forked from github/codeql
-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathunify_requirements.py
36 lines (33 loc) · 1.06 KB
/
unify_requirements.py
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
#!/usr/bin/env python
import os
import re
def get_requirements(file_path):
if not file_path:
return []
with open(file_path, "r") as requirements_file:
lines = requirements_file.read().splitlines()
for line_no, line in enumerate(lines):
match = re.search("^\\s*-r\\s+([^#]+)", line)
if match:
include_file_path = os.path.join(os.path.dirname(file_path), match.group(1).strip())
include_requirements = get_requirements(include_file_path)
lines[line_no:line_no+1] = include_requirements
return lines
def deduplicate(requirements):
result = []
seen = set()
for req in requirements:
if req in seen:
continue
result.append(req)
seen.add(req)
return result
def gather(requirement_files):
requirements = []
for file in requirement_files:
requirements += get_requirements(file)
requirements = deduplicate(requirements)
print("Requirements:")
for r in requirements:
print(" {}".format(r))
return requirements