Skip to content

Commit 6a40806

Browse files
authored
Merge pull request #30 from nexB/max_rounds
Add --max-rounds param in CLI
2 parents b46a8d0 + 3cf69ea commit 6a40806

4 files changed

Lines changed: 35 additions & 4 deletions

File tree

src/python_inspector/resolution.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ def get_resolved_dependencies(
313313
environment: utils_pypi.Environment = None,
314314
repos: Sequence[utils_pypi.PypiSimpleRepository] = tuple(),
315315
as_tree: bool = False,
316+
max_rounds: int = 200000,
316317
):
317318
"""
318319
Return resolved dependencies of a ``requirements`` list of Requirement for
@@ -326,6 +327,6 @@ def get_resolved_dependencies(
326327
provider=PythonInputProvider(environment=environment, repos=repos),
327328
reporter=BaseReporter(),
328329
)
329-
results = resolver.resolve(requirements=requirements)
330+
results = resolver.resolve(requirements=requirements, max_rounds=max_rounds)
330331
results = format_resolution(results, as_tree=as_tree)
331332
return results

src/python_inspector/resolve_cli.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@
101101
help="Write output as pretty-printed JSON to FILE. "
102102
"Use the special '-' file name to print results on screen/stdout.",
103103
)
104+
@click.option(
105+
"--max-rounds",
106+
"max_rounds",
107+
type=int,
108+
default=200000,
109+
help="Increase the max rounds whenever the resolution is too deep",
110+
)
104111
@click.option(
105112
"--use-cached-index",
106113
is_flag=True,
@@ -128,6 +135,7 @@ def resolve_dependencies(
128135
operating_system,
129136
index_urls,
130137
json_output,
138+
max_rounds,
131139
use_cached_index=False,
132140
use_pypi_json_api=False,
133141
debug=TRACE,
@@ -220,6 +228,7 @@ def resolve_dependencies(
220228
environment=environment,
221229
repos=repos,
222230
as_tree=False,
231+
max_rounds=max_rounds,
223232
)
224233

225234
cli_options = [f"--requirement {rf}" for rf in requirement_files]
@@ -256,7 +265,7 @@ def resolve_dependencies(
256265
click.secho("done!")
257266

258267

259-
def resolve(direct_dependencies, environment, repos=tuple(), as_tree=False):
268+
def resolve(direct_dependencies, environment, repos=tuple(), as_tree=False, max_rounds=200000):
260269
"""
261270
Resolve dependencies given a ``direct_dependencies`` list of
262271
DependentPackage and return a tuple of (initial_requirements,
@@ -273,6 +282,7 @@ def resolve(direct_dependencies, environment, repos=tuple(), as_tree=False):
273282
environment=environment,
274283
repos=repos,
275284
as_tree=as_tree,
285+
max_rounds=max_rounds,
276286
)
277287

278288
initial_requirements = [d.to_dict() for d in direct_dependencies]

tests/test_cli.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,26 @@ def test_cli_with_multiple_index_url_and_tilde_req():
7474
)
7575

7676

77+
@pytest.mark.online
78+
def test_cli_with_multiple_index_url_and_tilde_req_with_max_rounds():
79+
expected_file = test_env.get_test_loc("tilde_req-expected.json", must_exist=False)
80+
specifier = "zipp~=3.8.0"
81+
extra_options = [
82+
"--index-url",
83+
"https://pypi.org/simple",
84+
"--index-url",
85+
"https://thirdparty.aboutcode.org/pypi/simple/",
86+
"--max-rounds",
87+
"100",
88+
]
89+
check_specs_resolution(
90+
specifier=specifier,
91+
expected_file=expected_file,
92+
extra_options=extra_options,
93+
regen=REGEN_TEST_FIXTURES,
94+
)
95+
96+
7797
@pytest.mark.online
7898
def test_cli_with_multiple_index_url_and_tilde_req_and_netrc_file_without_matching_url():
7999
expected_file = test_env.get_test_loc("tilde_req-expected.json", must_exist=False)

tests/test_resolution.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def test_get_resolved_dependencies_with_flask_and_python_36():
8282
assert as_list == [
8383
"pkg:pypi/click@8.1.3",
8484
"pkg:pypi/flask@2.1.2",
85-
"pkg:pypi/importlib-metadata@4.11.4",
85+
"pkg:pypi/importlib-metadata@4.12.0",
8686
"pkg:pypi/itsdangerous@2.1.2",
8787
"pkg:pypi/jinja2@3.1.2",
8888
"pkg:pypi/markupsafe@2.0.1",
@@ -107,7 +107,7 @@ def test_get_resolved_dependencies_with_tilde_requirement_using_json_api():
107107
assert as_list == [
108108
"pkg:pypi/click@8.1.3",
109109
"pkg:pypi/flask@2.1.2",
110-
"pkg:pypi/importlib-metadata@4.11.4",
110+
"pkg:pypi/importlib-metadata@4.12.0",
111111
"pkg:pypi/itsdangerous@2.1.2",
112112
"pkg:pypi/jinja2@3.1.2",
113113
"pkg:pypi/markupsafe@2.1.1",

0 commit comments

Comments
 (0)