• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import logging
2
3
4logger = logging.getLogger(__name__)
5
6
7def unrepr(value):
8    raise NotImplementedError
9
10
11def parse_entries(entries, *, ignoresep=None):
12    for entry in entries:
13        if ignoresep and ignoresep in entry:
14            subentries = [entry]
15        else:
16            subentries = entry.strip().replace(',', ' ').split()
17        for item in subentries:
18            if item.startswith('+'):
19                filename = item[1:]
20                try:
21                    infile = open(filename)
22                except FileNotFoundError:
23                    logger.debug(f'ignored in parse_entries(): +{filename}')
24                    return
25                with infile:
26                    # We read the entire file here to ensure the file
27                    # gets closed sooner rather than later.  Note that
28                    # the file would stay open if this iterator is never
29                    # exhausted.
30                    lines = infile.read().splitlines()
31                for line in _iter_significant_lines(lines):
32                    yield line, filename
33            else:
34                yield item, None
35
36
37def _iter_significant_lines(lines):
38    for line in lines:
39        line = line.partition('#')[0]
40        if not line.strip():
41            continue
42        yield line
43