1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
from rope.base import exceptions
def resources(project, rules):
"""Find python files in the `project` matching `rules`
`rules` is a multi-line `str`; each line starts with either a '+'
or '-'. Each '+' means include the file (or its children if it's
a folder) that comes after it. '-' has the same meaning for
exclusion.
"""
all = set(project.pycore.get_python_files())
files = None
for line in rules.splitlines():
if not line.strip():
continue
first, path = (line[0], line[1:])
if first not in '+-':
continue
try:
resource = project.get_resource(path.strip())
except exceptions.ResourceNotFoundError:
continue
if resource.is_folder():
matches = set(filter(lambda item: resource.contains(item), all))
else:
matches = set([resource])
if first == '+':
if files is None:
files = set()
files.update(matches)
if first == '-':
if files is None:
files = set(all)
files -= matches
if files is None:
return all
return files
|