Skip to content

Commit

Permalink
Throw a RuntimeError on hash mismatch in Chooser._get_links (#3885)
Browse files Browse the repository at this point in the history
Throw a specific exception in the case of finding a matching
name+version, but none of the digests for a link matching the
`poetry.lock` metadata.

Fixes Issue #2422

Co-authored-by: Nicolas Simonds <nisimond@cisco.com>
  • Loading branch information
2 people authored and pietrodn committed Aug 21, 2021
1 parent 2439ded commit 435ff81
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
5 changes: 5 additions & 0 deletions poetry/installation/chooser.py
Expand Up @@ -109,6 +109,11 @@ def _get_links(self, package): # type: (Package) -> List[Link]

selected_links.append(link)

if links and not selected_links:
raise RuntimeError(
f"Retrieved digest for link {link.filename}({h}) not in poetry.lock metadata {hashes}"
)

return selected_links

def _sort_key(self, package, link): # type: (Package, Link) -> Tuple
Expand Down
33 changes: 33 additions & 0 deletions tests/installation/test_chooser.py
Expand Up @@ -195,3 +195,36 @@ def test_chooser_chooses_distributions_that_match_the_package_hashes(
link = chooser.choose_for(package)

assert "isort-4.3.4.tar.gz" == link.filename


@pytest.mark.parametrize("source_type", ["", "legacy"])
def test_chooser_throws_an_error_if_package_hashes_do_not_match(
env,
mock_pypi,
mock_legacy,
source_type,
pool,
):
chooser = Chooser(pool, env)

package = Package("isort", "4.3.4")
files = [
{
"hash": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
"filename": "isort-4.3.4.tar.gz",
}
]
if source_type == "legacy":
package = Package(
package.name,
package.version.text,
source_type="legacy",
source_reference="foo",
source_url="https://foo.bar/simple/",
)

package.files = files

with pytest.raises(RuntimeError) as e:
chooser.choose_for(package)
assert files[0]["hash"] in str(e)

0 comments on commit 435ff81

Please sign in to comment.