From b03652f642a8ea04644eb7d5b38223148dea5611 Mon Sep 17 00:00:00 2001 From: Benoit Pierre Date: Tue, 13 Aug 2019 01:10:05 +0200 Subject: pkg_resources: fix ``Requirement`` hash/equality implementation Take PEP 508 direct URL into account. --- changelog.d/1814.change.rst | 1 + pkg_resources/__init__.py | 1 + pkg_resources/tests/test_resources.py | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 changelog.d/1814.change.rst diff --git a/changelog.d/1814.change.rst b/changelog.d/1814.change.rst new file mode 100644 index 00000000..c936699d --- /dev/null +++ b/changelog.d/1814.change.rst @@ -0,0 +1 @@ +Fix ``pkg_resources.Requirement`` hash/equality implementation: take PEP 508 direct URL into account. diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py index 1f170cfd..e75769d7 100644 --- a/pkg_resources/__init__.py +++ b/pkg_resources/__init__.py @@ -3109,6 +3109,7 @@ class Requirement(packaging.requirements.Requirement): self.extras = tuple(map(safe_extra, self.extras)) self.hashCmp = ( self.key, + self.url, self.specifier, frozenset(self.extras), str(self.marker) if self.marker else None, diff --git a/pkg_resources/tests/test_resources.py b/pkg_resources/tests/test_resources.py index 86afcf74..42c801a7 100644 --- a/pkg_resources/tests/test_resources.py +++ b/pkg_resources/tests/test_resources.py @@ -520,6 +520,11 @@ class TestRequirements: assert r1 == r2 assert str(r1) == str(r2) assert str(r2) == "Twisted==1.2c1,>=1.2" + assert ( + Requirement("Twisted") + != + Requirement("Twisted @ https://localhost/twisted.zip") + ) def testBasicContains(self): r = Requirement("Twisted>=1.2") @@ -546,11 +551,23 @@ class TestRequirements: == hash(( "twisted", + None, packaging.specifiers.SpecifierSet(">=1.2"), frozenset(["foo", "bar"]), None )) ) + assert ( + hash(Requirement.parse("Twisted @ https://localhost/twisted.zip")) + == + hash(( + "twisted", + "https://localhost/twisted.zip", + packaging.specifiers.SpecifierSet(), + frozenset(), + None + )) + ) def testVersionEquality(self): r1 = Requirement.parse("foo==0.3a2") -- cgit v1.2.1