diff --git a/news/5002.bugfix.rst b/news/5002.bugfix.rst new file mode 100644 index 0000000000..c4e210301c --- /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 1c44485743..f61e49a45f 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 fb1241422d..78b24c7ba8 100644 --- a/tests/integration/test_install_basic.py +++ b/tests/integration/test_install_basic.py @@ -497,3 +497,30 @@ def test_rewrite_outline_table(PipenvInstance): 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