Skip to content

Commit f169918

Browse files
committed
bugfix the new simpler algo
1 parent b56fe74 commit f169918

File tree

1 file changed

+25
-10
lines changed
  • python/private/pypi/whl_installer

1 file changed

+25
-10
lines changed

python/private/pypi/whl_installer/wheel.py

+25-10
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ def __init__(
6262
"""
6363
self.name: str = Deps._normalize(name)
6464
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+
}
6668
if platforms and len(self._target_versions) > 1:
6769
# TODO @aignas 2024-06-23: enable this to be set via a CLI arg
6870
# for being more explicit.
@@ -94,8 +96,8 @@ def __init__(
9496
for req in reqs:
9597
reqs_by_name.setdefault(req.name, []).append(req)
9698

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)
99101

100102
def _add(self, dep: str, platform: Optional[Platform]):
101103
dep = Deps._normalize(dep)
@@ -134,7 +136,7 @@ def _normalize(name: str) -> str:
134136
return re.sub(r"[-_.]+", "_", name).lower()
135137

136138
def _resolve_extras(
137-
self, reqs: List[Requirement], extras: Optional[Set[str]]
139+
self, reqs: List[Requirement], want_extras: Optional[Set[str]]
138140
) -> Set[str]:
139141
"""Resolve extras which are due to depending on self[some_other_extra].
140142
@@ -156,7 +158,7 @@ def _resolve_extras(
156158
# extras The empty string in the set is just a way to make the handling
157159
# of no extras and a single extra easier and having a set of {"", "foo"}
158160
# is equivalent to having {"foo"}.
159-
extras = extras or {""}
161+
extras: Set[str] = want_extras or {""}
160162

161163
self_reqs = []
162164
for req in reqs:
@@ -189,13 +191,19 @@ def _resolve_extras(
189191

190192
return extras
191193

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:
193195
platforms_to_add = set()
194196
for req in reqs:
195197
if req.marker is None:
196198
self._add(req.name, None)
197199
return
198200

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+
199207
for plat in self._platforms:
200208
if plat in platforms_to_add:
201209
# marker evaluation is more expensive than this check
@@ -211,18 +219,25 @@ def _add_req(self, reqs: List[Requirement], extras: Set[str]) -> None:
211219
added = True
212220
break
213221

222+
# TODO @aignas 2025-04-28: add a test
223+
if not self._platforms:
224+
return
225+
214226
if len(platforms_to_add) == len(self._platforms):
215227
# the dep is in all target platforms, let's just add it to the regular
216228
# list
217-
self._add(req.name, None)
229+
self._add(req_name, None)
218230
return
219231

220232
for plat in platforms_to_add:
221233
if self._default_minor_version is not None:
222-
self._add(req.name, plat)
234+
self._add(req_name, plat)
223235

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))
226241

227242
def build(self) -> FrozenDeps:
228243
return FrozenDeps(

0 commit comments

Comments
 (0)