Skip to content

Commit 4e73e3e

Browse files
committed
review comment: subclass instead of constructor flag
1 parent 9041602 commit 4e73e3e

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import contextlib
2-
import itertools
32
import functools
43
import logging
54
from typing import (
@@ -63,6 +62,7 @@
6362
ExplicitRequirement,
6463
RequiresPythonRequirement,
6564
SpecifierRequirement,
65+
SpecifierWithoutExtrasRequirement,
6666
UnsatisfiableRequirement,
6767
)
6868

@@ -467,7 +467,7 @@ def _make_requirements_from_install_req(
467467
yield from ()
468468
elif not ireq.link:
469469
if ireq.extras and ireq.req is not None and ireq.req.specifier:
470-
yield SpecifierRequirement(ireq, drop_extras=True),
470+
yield SpecifierWithoutExtrasRequirement(ireq),
471471
yield SpecifierRequirement(ireq)
472472
else:
473473
self._fail_if_link_is_unsupported_wheel(ireq.link)

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

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,9 @@ def is_satisfied_by(self, candidate: Candidate) -> bool:
4141

4242

4343
class SpecifierRequirement(Requirement):
44-
def __init__(
45-
self,
46-
ireq: InstallRequirement,
47-
*,
48-
drop_extras: bool = False,
49-
) -> None:
50-
"""
51-
:param drop_extras: Ignore any extras that are part of the install requirement,
52-
making this a requirement on the base only.
53-
"""
44+
def __init__(self, ireq: InstallRequirement) -> None:
5445
assert ireq.link is None, "This is a link, not a specifier"
55-
self._ireq = ireq if not drop_extras else install_req_drop_extras(ireq)
46+
self._ireq = ireq
5647
self._extras = frozenset(self._ireq.extras)
5748

5849
def __str__(self) -> str:
@@ -102,6 +93,17 @@ def is_satisfied_by(self, candidate: Candidate) -> bool:
10293
return spec.contains(candidate.version, prereleases=True)
10394

10495

96+
class SpecifierWithoutExtrasRequirement(SpecifierRequirement):
97+
"""
98+
Requirement backed by an install requirement on a base package. Trims extras from its install requirement if there are any.
99+
"""
100+
101+
def __init__(self, ireq: InstallRequirement) -> None:
102+
assert ireq.link is None, "This is a link, not a specifier"
103+
self._ireq = install_req_drop_extras(ireq)
104+
self._extras = frozenset(self._ireq.extras)
105+
106+
105107
class RequiresPythonRequirement(Requirement):
106108
"""A requirement representing Requires-Python metadata."""
107109

0 commit comments

Comments
 (0)