From b60fa7f5e6986c2b0867d80dfd18e4ab0d7a70ca Mon Sep 17 00:00:00 2001 From: Matt Davis Date: Wed, 23 Mar 2022 09:04:13 -0400 Subject: [PATCH] Fix the assumption that all sources are named. (#5004) * Fix the assumption that all sources are named. * Add test case * Add news fragment --- news/5002.bugfix.rst | 2 ++ pipenv/core.py | 2 +- tests/integration/test_install_basic.py | 27 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 news/5002.bugfix.rst diff --git a/news/5002.bugfix.rst b/news/5002.bugfix.rst new file mode 100644 index 00000000..c4e21030 --- /dev/null +++ b/news/5002.bugfix.rst @@ -0,0 +1,2 @@ +Fixes issue with new index safety restriction, whereby an unnamed extra sources index +caused and error to be thrown during install. diff --git a/pipenv/core.py b/pipenv/core.py index 1c444857..f61e49a4 100644 --- a/pipenv/core.py +++ b/pipenv/core.py @@ -1403,7 +1403,7 @@ def pip_install( if index and not extra_indexes: extra_indexes = [] if requirement.index: - extra_indexes = list(filter(lambda d: d['name'] == requirement.index, project.sources)) + extra_indexes = list(filter(lambda d: d.get('name') == requirement.index, project.sources)) if not extra_indexes: extra_indexes = list(project.sources) if requirement and requirement.vcs or requirement.editable: diff --git a/tests/integration/test_install_basic.py b/tests/integration/test_install_basic.py index fb124142..78b24c7b 100644 --- a/tests/integration/test_install_basic.py +++ b/tests/integration/test_install_basic.py @@ -497,3 +497,30 @@ extras = ["socks"] assert 'six = {version = "*"}' in contents assert 'requests = {version = "*"' in contents assert 'flask = "*"' in contents + + +@flaky +@pytest.mark.dev +@pytest.mark.basic +@pytest.mark.install +@pytest.mark.needs_internet +def test_install_with_unnamed_source(PipenvInstance): + """Ensure that running `pipenv install` doesn't break with an unamed index""" + with PipenvInstance(chdir=True) as p: + with open(p.pipfile_path, "w") as f: + contents = """ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true + +[packages] +requests = {version="*", index="pypi"} + """.strip() + f.write(contents) + c = p.pipenv("install") + assert c.returncode == 0