Skip to content

Commit b66aa71

Browse files
committed
Support requirements file with --extra-index-url
Signed-off-by: Tushar Goel <[email protected]>
1 parent bb9ee83 commit b66aa71

File tree

5 files changed

+43
-2
lines changed

5 files changed

+43
-2
lines changed

src/_packagedcode/pypi.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -828,8 +828,14 @@ def get_requirements_txt_dependencies(location, include_nested=False):
828828
# for now we ignore errors
829829
extra_data = {}
830830
for opt in req_file.options:
831-
extra_data.update(opt.options)
832-
831+
for name, value in opt.options.items():
832+
if name not in extra_data:
833+
extra_data[name] = value
834+
else:
835+
if isinstance(value, list):
836+
extra_data[name].extend(value)
837+
else:
838+
extra_data[name] = value
833839
dependent_packages = []
834840
for req in req_file.requirements:
835841

src/python_inspector/dependencies.py

+9
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@ def get_dependencies_from_requirements(requirements_file="requirements.txt", *ar
3838
yield dependent_package
3939

4040

41+
def get_extra_data_from_requirements(requirements_file="requirements.txt", *args, **kwargs):
42+
"""
43+
Yield extra_data for each requirement in a `requirement`
44+
file.
45+
"""
46+
for package_data in PipRequirementsFileHandler.parse(location=requirements_file):
47+
yield package_data.extra_data
48+
49+
4150
def get_dependency(specifier, *args, **kwargs):
4251
"""
4352
Return a DependentPackage given a requirement ``specifier`` string.

src/python_inspector/resolve_cli.py

+2
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ def resolve_dependencies(
146146

147147
for req_file in requirement_files:
148148
deps = dependencies.get_dependencies_from_requirements(requirements_file=req_file)
149+
for extra_data in dependencies.get_extra_data_from_requirements(requirements_file=req_file):
150+
index_urls = (*index_urls, *tuple(extra_data.get("extra_index_urls") or []))
149151
direct_dependencies.extend(deps)
150152

151153
for specifier in specifiers:

tests/data/requirements-test.txt

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
attrs
2+
--extra-index-url https://pypi.python.org/simple/
3+
--extra-index-url https://testpypi.python.org/simple/
4+
--extra-index-url https://pypi1.python.org/simple/

tests/test_requirement_parsing.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import os
2+
3+
from python_inspector.dependencies import get_extra_data_from_requirements
4+
5+
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
6+
REQ_FILE = os.path.join(BASE_DIR, "data", "requirements-test.txt")
7+
8+
9+
def test_get_extra_data_from_requirements():
10+
expected = [
11+
{
12+
"extra_index_urls": [
13+
"https://pypi.python.org/simple/",
14+
"https://testpypi.python.org/simple/",
15+
"https://pypi1.python.org/simple/",
16+
]
17+
}
18+
]
19+
result = list(get_extra_data_from_requirements(REQ_FILE))
20+
assert expected == result

0 commit comments

Comments
 (0)