@@ -41,18 +41,9 @@ def is_satisfied_by(self, candidate: Candidate) -> bool:
41
41
42
42
43
43
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 :
54
45
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
56
47
self ._extras = frozenset (self ._ireq .extras )
57
48
58
49
def __str__ (self ) -> str :
@@ -102,6 +93,17 @@ def is_satisfied_by(self, candidate: Candidate) -> bool:
102
93
return spec .contains (candidate .version , prereleases = True )
103
94
104
95
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
+
105
107
class RequiresPythonRequirement (Requirement ):
106
108
"""A requirement representing Requires-Python metadata."""
107
109
0 commit comments