22
22
from pip ._internal .utils .typing import MYPY_CHECK_RUNNING
23
23
from pip ._internal .utils .virtualenv import running_under_virtualenv
24
24
25
+ from .base import Constraint
25
26
from .candidates import (
26
27
AlreadyInstalledCandidate ,
27
28
EditableCandidate ,
@@ -154,6 +155,7 @@ def _iter_found_candidates(
154
155
self ,
155
156
ireqs , # type: Sequence[InstallRequirement]
156
157
specifier , # type: SpecifierSet
158
+ hashes , # type: Hashes
157
159
):
158
160
# type: (...) -> Iterable[Candidate]
159
161
if not ireqs :
@@ -166,11 +168,10 @@ def _iter_found_candidates(
166
168
template = ireqs [0 ]
167
169
name = canonicalize_name (template .req .name )
168
170
169
- hashes = Hashes ()
170
171
extras = frozenset () # type: FrozenSet[str]
171
172
for ireq in ireqs :
172
173
specifier &= ireq .req .specifier
173
- hashes | = ireq .hashes (trust_internet = False )
174
+ hashes & = ireq .hashes (trust_internet = False )
174
175
extras |= frozenset (ireq .extras )
175
176
176
177
# We use this to ensure that we only yield a single candidate for
@@ -220,7 +221,7 @@ def _iter_found_candidates(
220
221
return six .itervalues (candidates )
221
222
222
223
def find_candidates (self , requirements , constraint ):
223
- # type: (Sequence[Requirement], SpecifierSet ) -> Iterable[Candidate]
224
+ # type: (Sequence[Requirement], Constraint ) -> Iterable[Candidate]
224
225
explicit_candidates = set () # type: Set[Candidate]
225
226
ireqs = [] # type: List[InstallRequirement]
226
227
for req in requirements :
@@ -233,7 +234,11 @@ def find_candidates(self, requirements, constraint):
233
234
# If none of the requirements want an explicit candidate, we can ask
234
235
# the finder for candidates.
235
236
if not explicit_candidates :
236
- return self ._iter_found_candidates (ireqs , constraint )
237
+ return self ._iter_found_candidates (
238
+ ireqs ,
239
+ constraint .specifier ,
240
+ constraint .hashes ,
241
+ )
237
242
238
243
if constraint :
239
244
name = explicit_candidates .pop ().name
0 commit comments