Skip to content

Commit 705ce7d

Browse files
committedApr 21, 2024·
Optimize hashing and comparison of AlreadyInstalledCandidate
1 parent e16867e commit 705ce7d

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed
 

‎src/pip/_internal/resolution/resolvelib/candidates.py

+6-9
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from pip._internal.req.req_install import InstallRequirement
2121
from pip._internal.utils.direct_url_helpers import direct_url_from_link
2222
from pip._internal.utils.misc import normalize_version_info
23+
from pip._internal.utils.models import KeyBasedCompareMixin
2324

2425
from .base import Candidate, CandidateVersion, Requirement, format_name
2526

@@ -324,7 +325,7 @@ def _prepare_distribution(self) -> BaseDistribution:
324325
return self._factory.preparer.prepare_editable_requirement(self._ireq)
325326

326327

327-
class AlreadyInstalledCandidate(Candidate):
328+
class AlreadyInstalledCandidate(Candidate, KeyBasedCompareMixin):
328329
is_installed = True
329330
source_link = None
330331

@@ -346,20 +347,16 @@ def __init__(
346347
skip_reason = "already satisfied"
347348
factory.preparer.prepare_installed_requirement(self._ireq, skip_reason)
348349

350+
KeyBasedCompareMixin.__init__(
351+
self, key=(self.name, self.version), defining_class=self.__class__
352+
)
353+
349354
def __str__(self) -> str:
350355
return str(self.dist)
351356

352357
def __repr__(self) -> str:
353358
return f"{self.__class__.__name__}({self.dist!r})"
354359

355-
def __hash__(self) -> int:
356-
return hash((self.__class__, self.name, self.version))
357-
358-
def __eq__(self, other: Any) -> bool:
359-
if isinstance(other, self.__class__):
360-
return self.name == other.name and self.version == other.version
361-
return False
362-
363360
@property
364361
def project_name(self) -> NormalizedName:
365362
return self.dist.canonical_name

0 commit comments

Comments
 (0)
Please sign in to comment.