@@ -62,7 +62,9 @@ def __init__(
62
62
"""
63
63
self .name : str = Deps ._normalize (name )
64
64
self ._platforms : Set [Platform ] = platforms or set ()
65
- self ._target_versions = {(p .minor_version , p .micro_version ) for p in platforms or {}}
65
+ self ._target_versions = {
66
+ (p .minor_version , p .micro_version ) for p in platforms or {}
67
+ }
66
68
if platforms and len (self ._target_versions ) > 1 :
67
69
# TODO @aignas 2024-06-23: enable this to be set via a CLI arg
68
70
# for being more explicit.
@@ -94,8 +96,8 @@ def __init__(
94
96
for req in reqs :
95
97
reqs_by_name .setdefault (req .name , []).append (req )
96
98
97
- for reqs in reqs_by_name .values ():
98
- self ._add_req (reqs , want_extras )
99
+ for req_name , reqs in reqs_by_name .items ():
100
+ self ._add_req (req_name , reqs , want_extras )
99
101
100
102
def _add (self , dep : str , platform : Optional [Platform ]):
101
103
dep = Deps ._normalize (dep )
@@ -134,7 +136,7 @@ def _normalize(name: str) -> str:
134
136
return re .sub (r"[-_.]+" , "_" , name ).lower ()
135
137
136
138
def _resolve_extras (
137
- self , reqs : List [Requirement ], extras : Optional [Set [str ]]
139
+ self , reqs : List [Requirement ], want_extras : Optional [Set [str ]]
138
140
) -> Set [str ]:
139
141
"""Resolve extras which are due to depending on self[some_other_extra].
140
142
@@ -156,7 +158,7 @@ def _resolve_extras(
156
158
# extras The empty string in the set is just a way to make the handling
157
159
# of no extras and a single extra easier and having a set of {"", "foo"}
158
160
# is equivalent to having {"foo"}.
159
- extras = extras or {"" }
161
+ extras : Set [ str ] = want_extras or {"" }
160
162
161
163
self_reqs = []
162
164
for req in reqs :
@@ -189,13 +191,19 @@ def _resolve_extras(
189
191
190
192
return extras
191
193
192
- def _add_req (self , reqs : List [Requirement ], extras : Set [str ]) -> None :
194
+ def _add_req (self , req_name , reqs : List [Requirement ], extras : Set [str ]) -> None :
193
195
platforms_to_add = set ()
194
196
for req in reqs :
195
197
if req .marker is None :
196
198
self ._add (req .name , None )
197
199
return
198
200
201
+ # TODO @aignas 2025-04-28: add a test
202
+ if not self ._platforms :
203
+ if any (req .marker .evaluate ({"extra" : extra }) for extra in extras ):
204
+ self ._add (req .name , None )
205
+ return
206
+
199
207
for plat in self ._platforms :
200
208
if plat in platforms_to_add :
201
209
# marker evaluation is more expensive than this check
@@ -211,18 +219,25 @@ def _add_req(self, reqs: List[Requirement], extras: Set[str]) -> None:
211
219
added = True
212
220
break
213
221
222
+ # TODO @aignas 2025-04-28: add a test
223
+ if not self ._platforms :
224
+ return
225
+
214
226
if len (platforms_to_add ) == len (self ._platforms ):
215
227
# the dep is in all target platforms, let's just add it to the regular
216
228
# list
217
- self ._add (req . name , None )
229
+ self ._add (req_name , None )
218
230
return
219
231
220
232
for plat in platforms_to_add :
221
233
if self ._default_minor_version is not None :
222
- self ._add (req . name , plat )
234
+ self ._add (req_name , plat )
223
235
224
- if self ._default_minor_version is None or plat .minor_version == self ._default_minor_version :
225
- self ._add (req .name , Platform (os = plat .os , arch = plat .arch ))
236
+ if (
237
+ self ._default_minor_version is None
238
+ or plat .minor_version == self ._default_minor_version
239
+ ):
240
+ self ._add (req_name , Platform (os = plat .os , arch = plat .arch ))
226
241
227
242
def build (self ) -> FrozenDeps :
228
243
return FrozenDeps (
0 commit comments