| import logging | |
| logger = logging.getLogger(__name__) | |
| def unrepr(value): | |
| raise NotImplementedError | |
| def parse_entries(entries, *, ignoresep=None): | |
| for entry in entries: | |
| if ignoresep and ignoresep in entry: | |
| subentries = [entry] | |
| else: | |
| subentries = entry.strip().replace(',', ' ').split() | |
| for item in subentries: | |
| if item.startswith('+'): | |
| filename = item[1:] | |
| try: | |
| infile = open(filename) | |
| except FileNotFoundError: | |
| logger.debug(f'ignored in parse_entries(): +{filename}') | |
| return | |
| with infile: | |
| # We read the entire file here to ensure the file | |
| # gets closed sooner rather than later. Note that | |
| # the file would stay open if this iterator is never | |
| # exhausted. | |
| lines = infile.read().splitlines() | |
| for line in _iter_significant_lines(lines): | |
| yield line, filename | |
| else: | |
| yield item, None | |
| def _iter_significant_lines(lines): | |
| for line in lines: | |
| line = line.partition('#')[0] | |
| if not line.strip(): | |
| continue | |
| yield line |