Skip to content

Commit 7127fc9

Browse files
committed
Prevent eager extra normalization
This removes extra normalization when metadata is loaded into the data structures, so we can obtain the raw values later in the process during resolution. The change in match_markers is needed because this is relied on by the legacy resolver. Since we removed eager normalization, we need to do that when the extras are used instead to maintain compatibility.
1 parent 90c4a42 commit 7127fc9

File tree

2 files changed

+5
-7
lines changed

2 files changed

+5
-7
lines changed

src/pip/_internal/metadata/importlib/_dists.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
Wheel,
2828
)
2929
from pip._internal.utils.misc import normalize_path
30-
from pip._internal.utils.packaging import safe_extra
3130
from pip._internal.utils.temp_dir import TempDirectory
3231
from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file
3332

@@ -208,12 +207,10 @@ def _metadata_impl(self) -> email.message.Message:
208207
return cast(email.message.Message, self._dist.metadata)
209208

210209
def iter_provided_extras(self) -> Iterable[str]:
211-
return (
212-
safe_extra(extra) for extra in self.metadata.get_all("Provides-Extra", [])
213-
)
210+
return (extra for extra in self.metadata.get_all("Provides-Extra", []))
214211

215212
def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]:
216-
contexts: Sequence[Dict[str, str]] = [{"extra": safe_extra(e)} for e in extras]
213+
contexts: Sequence[Dict[str, str]] = [{"extra": e} for e in extras]
217214
for req_string in self.metadata.get_all("Requires-Dist", []):
218215
req = Requirement(req_string)
219216
if not req.marker:

src/pip/_internal/req/req_install.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def __init__(
128128
if extras:
129129
self.extras = extras
130130
elif req:
131-
self.extras = {safe_extra(extra) for extra in req.extras}
131+
self.extras = req.extras
132132
else:
133133
self.extras = set()
134134
if markers is None and req:
@@ -272,7 +272,8 @@ def match_markers(self, extras_requested: Optional[Iterable[str]] = None) -> boo
272272
extras_requested = ("",)
273273
if self.markers is not None:
274274
return any(
275-
self.markers.evaluate({"extra": extra}) for extra in extras_requested
275+
self.markers.evaluate({"extra": safe_extra(extra)})
276+
for extra in extras_requested
276277
)
277278
else:
278279
return True

0 commit comments

Comments
 (0)