Skip to content

Commit d309e2c

Browse files
committed
Fix type hint errors due to new resolvelib
1 parent 88ceab2 commit d309e2c

File tree

4 files changed

+18
-11
lines changed

4 files changed

+18
-11
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ def get_installation_error(
748748
# The simplest case is when we have *one* cause that can't be
749749
# satisfied. We just report that case.
750750
if len(e.causes) == 1:
751-
req, parent = e.causes[0]
751+
req, parent = next(iter(e.causes))
752752
if req.name not in constraints:
753753
return self._report_single_requirement_conflict(req, parent)
754754

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

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
from collections import defaultdict
22
from logging import getLogger
3-
from typing import Any, DefaultDict
3+
from typing import Any, DefaultDict, Optional
44

55
from pip._vendor.resolvelib.reporters import BaseReporter
6+
from pip._vendor.resolvelib.resolvers import Criterion
67

78
from .base import Candidate, Requirement
89

910
logger = getLogger(__name__)
1011

1112

12-
class PipReporter(BaseReporter):
13+
class PipReporter(BaseReporter[Requirement, Candidate, str]):
1314
def __init__(self) -> None:
1415
self.reject_count_by_package: DefaultDict[str, int] = defaultdict(int)
1516

@@ -32,7 +33,9 @@ def __init__(self) -> None:
3233
),
3334
}
3435

35-
def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None:
36+
def rejecting_candidate(
37+
self, criterion: Criterion[Requirement, Candidate], candidate: Candidate
38+
) -> None:
3639
self.reject_count_by_package[candidate.name] += 1
3740

3841
count = self.reject_count_by_package[candidate.name]
@@ -55,7 +58,7 @@ def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None:
5558
logger.debug(msg)
5659

5760

58-
class PipDebuggingReporter(BaseReporter):
61+
class PipDebuggingReporter(BaseReporter[Requirement, Candidate, str]):
5962
"""A reporter that does an info log for every event it sees."""
6063

6164
def starting(self) -> None:
@@ -71,7 +74,9 @@ def ending_round(self, index: int, state: Any) -> None:
7174
def ending(self, state: Any) -> None:
7275
logger.info("Reporter.ending(%r)", state)
7376

74-
def adding_requirement(self, requirement: Requirement, parent: Candidate) -> None:
77+
def adding_requirement(
78+
self, requirement: Requirement, parent: Optional[Candidate]
79+
) -> None:
7580
logger.info("Reporter.adding_requirement(%r, %r)", requirement, parent)
7681

7782
def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None:

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def resolve(
8282
user_requested=collected.user_requested,
8383
)
8484
if "PIP_RESOLVER_DEBUG" in os.environ:
85-
reporter: BaseReporter = PipDebuggingReporter()
85+
reporter: BaseReporter[Requirement, Candidate, str] = PipDebuggingReporter()
8686
else:
8787
reporter = PipReporter()
8888
resolver: RLResolver[Requirement, Candidate, str] = RLResolver(

tests/unit/resolution_resolvelib/test_provider.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from pip._internal.models.candidate import InstallationCandidate
66
from pip._internal.models.link import Link
77
from pip._internal.req.constructors import install_req_from_req_string
8+
from pip._internal.resolution.resolvelib.base import Candidate
89
from pip._internal.resolution.resolvelib.factory import Factory
910
from pip._internal.resolution.resolvelib.provider import PipProvider
1011
from pip._internal.resolution.resolvelib.requirements import SpecifierRequirement
@@ -14,13 +15,13 @@
1415

1516

1617
def build_requirement_information(
17-
name: str, parent: Optional[InstallationCandidate]
18+
name: str, parent: Optional[Candidate]
1819
) -> List["PreferenceInformation"]:
1920
install_requirement = install_req_from_req_string(name)
2021
# RequirementInformation is typed as a tuple, but it is a namedtupled.
2122
# https://github.com/sarugaku/resolvelib/blob/7bc025aa2a4e979597c438ad7b17d2e8a08a364e/src/resolvelib/resolvers.pyi#L20-L22
2223
requirement_information: PreferenceInformation = RequirementInformation(
23-
requirement=SpecifierRequirement(install_requirement), # type: ignore[call-arg]
24+
requirement=SpecifierRequirement(install_requirement),
2425
parent=parent,
2526
)
2627
return [requirement_information]
@@ -29,7 +30,7 @@ def build_requirement_information(
2930
def test_provider_known_depths(factory: Factory) -> None:
3031
# Root requirement is specified by the user
3132
# therefore has an inferred depth of 1
32-
root_requirement_name = "my-package"
33+
root_requirement_name: str = "my-package"
3334
provider = PipProvider(
3435
factory=factory,
3536
constraints={},
@@ -60,7 +61,8 @@ def test_provider_known_depths(factory: Factory) -> None:
6061
transitive_requirement_name = "my-transitive-package"
6162

6263
transitive_package_information = build_requirement_information(
63-
name=transitive_requirement_name, parent=root_package_candidate
64+
name=transitive_requirement_name,
65+
parent=root_package_candidate, # type: ignore
6466
)
6567
provider.get_preference(
6668
identifier=transitive_requirement_name,

0 commit comments

Comments
 (0)