This repository was archived by the owner on Sep 1, 2023. It is now read-only.
forked from python-mode/python-mode
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathfilter.py
More file actions
39 lines (35 loc) · 1.17 KB
/
filter.py
File metadata and controls
39 lines (35 loc) · 1.17 KB
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