aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--changelog.d/1814.change.rst1
-rw-r--r--pkg_resources/__init__.py1
-rw-r--r--pkg_resources/tests/test_resources.py17
3 files changed, 19 insertions, 0 deletions
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 fb68813e..51fb1192 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 7063ed3d..93fa7114 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")