Skip to content

Commit 91c3706

Browse files
committed
Add support for recursive requirements.
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent b40a676 commit 91c3706

6 files changed

Lines changed: 827 additions & 14 deletions

File tree

CHANGELOG.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ v0.9.1
1818
if no source distribution is available then binary distributions are used.
1919

2020

21+
v0.9.0
22+
------
23+
24+
- Add support for recursive requirements.
25+
26+
2127
v0.9.0
2228
------
2329

src/python_inspector/api.py

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -143,21 +143,36 @@ def resolve_dependencies(
143143
if PYPI_SIMPLE_URL not in index_urls:
144144
index_urls = tuple([PYPI_SIMPLE_URL]) + tuple(index_urls)
145145

146-
for req_file in requirement_files:
147-
deps = dependencies.get_dependencies_from_requirements(requirements_file=req_file)
148-
for extra_data in dependencies.get_extra_data_from_requirements(requirements_file=req_file):
149-
index_urls = (*index_urls, *tuple(extra_data.get("extra_index_urls") or []))
150-
direct_dependencies.extend(deps)
151-
package_data = [
152-
pkg_data.to_dict() for pkg_data in PipRequirementsFileHandler.parse(location=req_file)
153-
]
154-
files.append(
155-
dict(
156-
type="file",
157-
path=req_file,
158-
package_data=package_data,
146+
known_files = {*requirement_files}
147+
visited_files = set()
148+
while True:
149+
unvisited_files = known_files - visited_files
150+
for req_file in unvisited_files:
151+
deps = dependencies.get_dependencies_from_requirements(requirements_file=req_file)
152+
os.path.dirname(req_file)
153+
for extra_data in dependencies.get_extra_data_from_requirements(
154+
requirements_file=req_file
155+
):
156+
index_urls = (*index_urls, *tuple(extra_data.get("extra_index_urls") or []))
157+
recursive_files = extra_data.get("requirements") or []
158+
direct_dependencies.extend(deps)
159+
recursive_files = [os.path.join(os.path.dirname(req_file), f) for f in recursive_files]
160+
package_data = [
161+
pkg_data.to_dict()
162+
for pkg_data in PipRequirementsFileHandler.parse(location=req_file)
163+
]
164+
files.append(
165+
dict(
166+
type="file",
167+
path=req_file,
168+
package_data=package_data,
169+
)
159170
)
160-
)
171+
visited_files.add(req_file)
172+
known_files.update(recursive_files)
173+
174+
if known_files == visited_files:
175+
break
161176

162177
for specifier in specifiers:
163178
dep = dependencies.get_dependency(specifier=specifier)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
simplekml==1.3.5
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Only installs requirements for deployments
2+
PyYAML==6.0
3+
retrying==1.3.3
4+
shapely==1.7.1
5+
-r com.txt

0 commit comments

Comments
 (0)