Skip to content

Commit f17c1d6

Browse files
authored
Merge pull request #8710 from McSinyx/unnest-lazy-fetch
2 parents 709ad37 + 11f7994 commit f17c1d6

File tree

4 files changed

+36
-20
lines changed

4 files changed

+36
-20
lines changed

news/c6182139-edb4-4bf6-bc3f-2d37cb5759ad.trivial

Whitespace-only changes.

src/pip/_internal/cli/req_command.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ def make_requirement_preparer(
238238
wheel_download_dir=wheel_download_dir,
239239
build_isolation=options.build_isolation,
240240
req_tracker=req_tracker,
241+
session=session,
241242
downloader=downloader,
242243
finder=finder,
243244
require_hashes=options.require_hashes,

src/pip/_internal/operations/prepare.py

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import os
1010
import shutil
1111

12-
from pip._vendor.contextlib2 import suppress
1312
from pip._vendor.packaging.utils import canonicalize_name
1413
from pip._vendor.six import PY2
1514

@@ -56,6 +55,7 @@
5655
from pip._internal.index.package_finder import PackageFinder
5756
from pip._internal.models.link import Link
5857
from pip._internal.network.download import Downloader
58+
from pip._internal.network.session import PipSession
5959
from pip._internal.req.req_install import InstallRequirement
6060
from pip._internal.req.req_tracker import RequirementTracker
6161
from pip._internal.utils.hashes import Hashes
@@ -332,6 +332,7 @@ def __init__(
332332
wheel_download_dir, # type: Optional[str]
333333
build_isolation, # type: bool
334334
req_tracker, # type: RequirementTracker
335+
session, # type: PipSession
335336
downloader, # type: Downloader
336337
finder, # type: PackageFinder
337338
require_hashes, # type: bool
@@ -344,6 +345,7 @@ def __init__(
344345
self.src_dir = src_dir
345346
self.build_dir = build_dir
346347
self.req_tracker = req_tracker
348+
self._session = session
347349
self.downloader = downloader
348350
self.finder = finder
349351

@@ -459,32 +461,43 @@ def _get_linked_req_hashes(self, req):
459461
# showing the user what the hash should be.
460462
return req.hashes(trust_internet=False) or MissingHashes()
461463

462-
def _fetch_metadata(preparer, link):
464+
def _fetch_metadata_using_lazy_wheel(self, link):
463465
# type: (Link) -> Optional[Distribution]
464-
"""Fetch metadata, using lazy wheel if possible."""
465-
use_lazy_wheel = preparer.use_lazy_wheel
466-
remote_wheel = link.is_wheel and not link.is_file
467-
if use_lazy_wheel and remote_wheel and not preparer.require_hashes:
468-
wheel = Wheel(link.filename)
469-
name = canonicalize_name(wheel.name)
470-
# If HTTPRangeRequestUnsupported is raised, fallback silently.
471-
with indent_log(), suppress(HTTPRangeRequestUnsupported):
472-
logger.info(
473-
'Obtaining dependency information from %s %s',
474-
name, wheel.version,
475-
)
476-
url = link.url.split('#', 1)[0]
477-
session = preparer.downloader._session
478-
return dist_from_wheel_url(name, url, session)
479-
return None
466+
"""Fetch metadata using lazy wheel, if possible."""
467+
if not self.use_lazy_wheel:
468+
return None
469+
if self.require_hashes:
470+
logger.debug('Lazy wheel is not used as hash checking is required')
471+
return None
472+
if link.is_file or not link.is_wheel:
473+
logger.debug(
474+
'Lazy wheel is not used as '
475+
'%r does not points to a remote wheel',
476+
link,
477+
)
478+
return None
479+
480+
wheel = Wheel(link.filename)
481+
name = canonicalize_name(wheel.name)
482+
logger.info(
483+
'Obtaining dependency information from %s %s',
484+
name, wheel.version,
485+
)
486+
url = link.url.split('#', 1)[0]
487+
try:
488+
return dist_from_wheel_url(name, url, self._session)
489+
except HTTPRangeRequestUnsupported:
490+
logger.debug('%s does not support range requests', url)
491+
return None
480492

481493
def prepare_linked_requirement(self, req, parallel_builds=False):
482494
# type: (InstallRequirement, bool) -> Distribution
483495
"""Prepare a requirement to be obtained from req.link."""
484496
assert req.link
485497
link = req.link
486498
self._log_preparing_link(req)
487-
wheel_dist = self._fetch_metadata(link)
499+
with indent_log():
500+
wheel_dist = self._fetch_metadata_using_lazy_wheel(link)
488501
if wheel_dist is not None:
489502
req.needs_more_preparation = True
490503
return wheel_dist

tests/unit/test_req.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ def _basic_resolver(self, finder, require_hashes=False):
7676
isolated=False,
7777
use_pep517=None,
7878
)
79+
session = PipSession()
7980

8081
with get_requirement_tracker() as tracker:
8182
preparer = RequirementPreparer(
@@ -85,7 +86,8 @@ def _basic_resolver(self, finder, require_hashes=False):
8586
wheel_download_dir=None,
8687
build_isolation=True,
8788
req_tracker=tracker,
88-
downloader=Downloader(PipSession(), progress_bar="on"),
89+
session=session,
90+
downloader=Downloader(session, progress_bar="on"),
8991
finder=finder,
9092
require_hashes=require_hashes,
9193
use_user_site=False,

0 commit comments

Comments
 (0)