77from typing import Any , Literal
88from urllib .parse import ParseResult , unquote , urlparse
99
10- from ._compat import (
11- fetch_bytes ,
12- install ,
13- loadedPackages ,
14- to_js ,
15- )
10+ from ._compat import CompatibilityLayer
1611from ._utils import best_compatible_tag_index , parse_wheel_filename
1712from ._vendored .packaging .src .packaging .requirements import Requirement
1813from ._vendored .packaging .src .packaging .tags import Tag
@@ -132,7 +127,9 @@ def from_package_index(
132127 _best_tag_index = best_tag_index ,
133128 )
134129
135- async def install (self , target : Path ) -> None :
130+ async def install (
131+ self , target : Path , compat_layer : type [CompatibilityLayer ]
132+ ) -> None :
136133 """
137134 Install the wheel to the target directory.
138135
@@ -148,13 +145,15 @@ async def install(self, target: Path) -> None:
148145 "Micropip internal error: attempted to install wheel before downloading it?"
149146 )
150147 _validate_sha256_checksum (self ._data , self .sha256 )
151- await self ._install (target )
148+ await self ._install (target , compat_layer )
152149
153- async def download (self , fetch_kwargs : dict [str , Any ]):
150+ async def download (
151+ self , fetch_kwargs : dict [str , Any ], compat_layer : type [CompatibilityLayer ]
152+ ):
154153 if self ._data is not None :
155154 return
156155
157- self ._data = await self ._fetch_bytes (self .url , fetch_kwargs )
156+ self ._data = await self ._fetch_bytes (self .url , fetch_kwargs , compat_layer )
158157
159158 # The wheel's metadata might be downloaded separately from the wheel itself.
160159 # If it is not downloaded yet or if the metadata is not available, extract it from the wheel.
@@ -174,14 +173,15 @@ def pep658_metadata_available(self) -> bool:
174173 async def download_pep658_metadata (
175174 self ,
176175 fetch_kwargs : dict [str , Any ],
176+ compat_layer : type [CompatibilityLayer ],
177177 ) -> None :
178178 """
179179 Download the wheel's metadata. If the metadata is not available, return None.
180180 """
181181 if self .core_metadata is None :
182182 return None
183183
184- data = await self ._fetch_bytes (self .metadata_url , fetch_kwargs )
184+ data = await self ._fetch_bytes (self .metadata_url , fetch_kwargs , compat_layer )
185185
186186 match self .core_metadata :
187187 case {"sha256" : checksum }: # sha256 checksum available
@@ -204,14 +204,19 @@ def requires(self, extras: set[str]) -> list[Requirement]:
204204 self ._requires = requires
205205 return requires
206206
207- async def _fetch_bytes (self , url : str , fetch_kwargs : dict [str , Any ]):
207+ async def _fetch_bytes (
208+ self ,
209+ url : str ,
210+ fetch_kwargs : dict [str , Any ],
211+ compat_layer : type [CompatibilityLayer ],
212+ ):
208213 if self .parsed_url .scheme not in ("https" , "http" , "emfs" , "file" ):
209214 # Don't raise ValueError it gets swallowed
210215 raise TypeError (
211216 f"Cannot download from a non-remote location: { url !r} ({ self .parsed_url !r} )"
212217 )
213218 try :
214- bytes = await fetch_bytes (url , fetch_kwargs )
219+ bytes = await compat_layer . fetch_bytes (url , fetch_kwargs )
215220 return bytes
216221 except OSError as e :
217222 if self .parsed_url .hostname in [
@@ -228,7 +233,9 @@ async def _fetch_bytes(self, url: str, fetch_kwargs: dict[str, Any]):
228233 ) from e
229234 raise e
230235
231- async def _install (self , target : Path ) -> None :
236+ async def _install (
237+ self , target : Path , compat_layer : type [CompatibilityLayer ]
238+ ) -> None :
232239 """
233240 Install the wheel to the target directory.
234241 """
@@ -247,15 +254,15 @@ async def _install(self, target: Path) -> None:
247254 sorted (x .name for x in self ._requires )
248255 )
249256
250- await install (
257+ await compat_layer . install (
251258 # TODO: Probably update install API to accept bytes directly, instead of converting it to JS.
252- to_js (self ._data ),
259+ compat_layer . to_js (self ._data ),
253260 self .filename ,
254261 str (target ),
255262 metadata ,
256263 )
257264
258- setattr (loadedPackages , self ._project_name , wheel_source )
265+ setattr (compat_layer . loadedPackages , self ._project_name , wheel_source )
259266
260267
261268def _validate_sha256_checksum (data : bytes , expected : str | None = None ) -> None :
0 commit comments