Skip to content

Commit bcf68e9

Browse files
committed
Ignore invalid requirement files
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent d765d89 commit bcf68e9

File tree

5 files changed

+53
-11
lines changed

5 files changed

+53
-11
lines changed

src/python_inspector/resolve_cli.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
#
1111

1212
import json
13+
import os
1314
from typing import List
1415

1516
import click
1617
from packaging.requirements import Requirement
1718
from tinynetrc import Netrc
1819

1920
from _packagedcode.models import DependentPackage
21+
from _packagedcode.pypi import PipRequirementsFileHandler
2022
from _packagedcode.pypi import can_process_dependent_package
2123
from python_inspector import dependencies
2224
from python_inspector import utils
@@ -183,15 +185,44 @@ def resolve_dependencies(
183185
if verbose:
184186
click.secho(f"Resolving dependencies...")
185187

186-
netrc = None
187188
if netrc_file:
189+
if not os.path.exists(netrc_file):
190+
raise Exception(f"Missing netrc file {netrc_file}")
191+
192+
if not netrc_file:
193+
netrc_file = os.path.join(os.path.expanduser("~"), ".netrc")
194+
if not os.path.exists(netrc_file):
195+
netrc_file = os.path.join(os.path.expanduser("~"), "_netrc")
196+
if not os.path.exists(netrc_file):
197+
netrc_file = None
198+
199+
if netrc_file:
200+
if verbose:
201+
click.secho(f"Using netrc file {netrc_file}")
188202
netrc = Netrc(file=netrc_file)
203+
else:
204+
netrc = None
205+
189206
# TODO: deduplicate me
190207
direct_dependencies = []
191208

192209
if PYPI_SIMPLE_URL not in index_urls:
193210
index_urls = tuple([PYPI_SIMPLE_URL]) + tuple(index_urls)
194211

212+
invalid_requirement_files = []
213+
214+
for req_file in requirement_files:
215+
if not PipRequirementsFileHandler.is_datafile(location=req_file):
216+
invalid_requirement_files.append(req_file)
217+
218+
if invalid_requirement_files:
219+
click.secho(
220+
f"""The following requirement files are not valid pip
221+
requirement file names: {invalid_requirement_files}""",
222+
err=True,
223+
)
224+
ctx.exit(1)
225+
195226
for req_file in requirement_files:
196227
deps = dependencies.get_dependencies_from_requirements(requirements_file=req_file)
197228
for extra_data in dependencies.get_extra_data_from_requirements(requirements_file=req_file):

tests/data/pdt-requirements.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
click==6.7
2+
Flask==1.0
3+
itsdangerous==0.24
4+
Jinja2==2.11.3
5+
MarkupSafe==1.0
6+
Werkzeug==0.15.3

tests/data/pdt.txt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +0,0 @@
1-
click==6.7
2-
Flask==1.0
3-
itsdangerous==0.24
4-
Jinja2==2.11.3
5-
MarkupSafe==1.0
6-
Werkzeug==0.15.3

tests/data/single-url-except-simple-expected.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"sdist_url": "https://files.pythonhosted.org/packages/59/87/84326af34517fca8c58418d148f2403df25303e02736832403587318e9e8/click-8.1.3.tar.gz"
3838
},
3939
{
40-
"package": "pkg:pypi/flask@2.1.3",
40+
"package": "pkg:pypi/flask@2.2.0",
4141
"dependencies": [
4242
"pkg:pypi/click@8.1.3",
4343
"pkg:pypi/importlib-metadata@4.12.0",
@@ -46,9 +46,9 @@
4646
"pkg:pypi/werkzeug@2.2.1"
4747
],
4848
"wheel_urls": [
49-
"https://files.pythonhosted.org/packages/af/6a/00d144ac1626fbb44c4ff36519712e258128985a5d0ae43344778ae5cbb9/Flask-2.1.3-py3-none-any.whl"
49+
"https://files.pythonhosted.org/packages/7b/97/3b7716320e560f937e356773a4ec7846c2617b78f6b7d1334cd1725ba834/Flask-2.2.0-py3-none-any.whl"
5050
],
51-
"sdist_url": "https://files.pythonhosted.org/packages/5b/77/3accd62b8771954e9584beb03f080385b32ddcad30009d2a4fe4068a05d9/Flask-2.1.3.tar.gz"
51+
"sdist_url": "https://files.pythonhosted.org/packages/dd/2e/6efff09194bd056e2dc3d4b87028cf835dfbde5b324570db351ef04b868a/Flask-2.2.0.tar.gz"
5252
},
5353
{
5454
"package": "pkg:pypi/importlib-metadata@4.12.0",

tests/test_cli.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def test_cli_with_default_urls():
4444

4545
@pytest.mark.online
4646
def test_pdt_output():
47-
requirements_file = test_env.get_test_loc("pdt.txt")
47+
requirements_file = test_env.get_test_loc("pdt-requirements.txt")
4848
expected_file = test_env.get_test_loc("pdt-expected.json", must_exist=False)
4949
extra_options = []
5050
check_requirements_resolution(
@@ -212,6 +212,17 @@ def test_passing_of_json_pdt_and_json_flags():
212212
run_cli(options=options, expected_rc=1)
213213

214214

215+
def test_passing_of_netrc_file_that_does_not_exist():
216+
options = ["--specifier", "foo", "--netrc", "bar.txt", "--json", "-"]
217+
run_cli(options=options, expected_rc=2)
218+
219+
220+
def test_passing_of_wrong_requiremts_file():
221+
test_file = test_env.get_test_loc("pdt.txt")
222+
options = ["--requirement", test_file, "--json", "-"]
223+
run_cli(options=options, expected_rc=1)
224+
225+
215226
def test_passing_of_no_json_output_flag():
216227
options = ["--specifier", "foo"]
217228
run_cli(options=options, expected_rc=1)

0 commit comments

Comments
 (0)