Skip to content

Commit b972040

Browse files
committed
Convince Mypy we're doing the right thing
1 parent fcc9240 commit b972040

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,18 @@
3333
]
3434

3535

36+
def as_base_candidate(candidate: Candidate) -> Optional[BaseCandidate]:
37+
"""The runtime version of BaseCandidate."""
38+
base_candidate_classes = (
39+
AlreadyInstalledCandidate,
40+
EditableCandidate,
41+
LinkCandidate,
42+
)
43+
if isinstance(candidate, base_candidate_classes):
44+
return candidate
45+
return None
46+
47+
3648
def make_install_req_from_link(link, template):
3749
# type: (Link, InstallRequirement) -> InstallRequirement
3850
assert not template.editable, "template is editable"

src/pip/_internal/resolution/resolvelib/factory.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@
1616
cast,
1717
)
1818

19-
from pip._vendor.packaging.requirements import (
20-
InvalidRequirement,
21-
Requirement as PackagingRequirement,
22-
)
19+
from pip._vendor.packaging.requirements import InvalidRequirement
20+
from pip._vendor.packaging.requirements import Requirement as PackagingRequirement
2321
from pip._vendor.packaging.specifiers import SpecifierSet
2422
from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
2523
from pip._vendor.pkg_resources import Distribution
@@ -57,6 +55,7 @@
5755
ExtrasCandidate,
5856
LinkCandidate,
5957
RequiresPythonCandidate,
58+
as_base_candidate,
6059
)
6160
from .found_candidates import FoundCandidates, IndexCandidateInfo
6261
from .requirements import (
@@ -306,15 +305,19 @@ def find_candidates(
306305
identifier_req = PackagingRequirement(identifier)
307306
except InvalidRequirement:
308307
base_identifier = None
309-
extras = frozenset()
308+
extras: FrozenSet[str] = frozenset()
310309
else:
311310
base_identifier = identifier_req.name
312311
extras = frozenset(identifier_req.extras)
313312
if base_identifier and base_identifier in requirements:
314313
for req in requirements[base_identifier]:
315-
base_cand, _ = req.get_candidate_lookup()
316-
if base_cand is None:
314+
lookup_cand, _ = req.get_candidate_lookup()
315+
if lookup_cand is None: # Not explicit.
317316
continue
317+
# We've stripped extras from the identifier, and should always
318+
# get a BaseCandidate here, unless there's a bug elsewhere.
319+
base_cand = as_base_candidate(lookup_cand)
320+
assert base_cand is not None
318321
candidate = self._make_extras_candidate(base_cand, extras)
319322
explicit_candidates.add(candidate)
320323

0 commit comments

Comments
 (0)