Merge pull request #8710 from McSinyx/unnest-lazy-fetch

This commit is contained in:
Pradyun Gedam 2020-08-06 20:12:32 +05:30 committed by GitHub
commit f17c1d6d3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 20 deletions

View File

@ -238,6 +238,7 @@ class RequirementCommand(IndexGroupCommand):
wheel_download_dir=wheel_download_dir,
build_isolation=options.build_isolation,
req_tracker=req_tracker,
session=session,
downloader=downloader,
finder=finder,
require_hashes=options.require_hashes,

View File

@ -9,7 +9,6 @@ import mimetypes
import os
import shutil
from pip._vendor.contextlib2 import suppress
from pip._vendor.packaging.utils import canonicalize_name
from pip._vendor.six import PY2
@ -56,6 +55,7 @@ if MYPY_CHECK_RUNNING:
from pip._internal.index.package_finder import PackageFinder
from pip._internal.models.link import Link
from pip._internal.network.download import Downloader
from pip._internal.network.session import PipSession
from pip._internal.req.req_install import InstallRequirement
from pip._internal.req.req_tracker import RequirementTracker
from pip._internal.utils.hashes import Hashes
@ -332,6 +332,7 @@ class RequirementPreparer(object):
wheel_download_dir, # type: Optional[str]
build_isolation, # type: bool
req_tracker, # type: RequirementTracker
session, # type: PipSession
downloader, # type: Downloader
finder, # type: PackageFinder
require_hashes, # type: bool
@ -344,6 +345,7 @@ class RequirementPreparer(object):
self.src_dir = src_dir
self.build_dir = build_dir
self.req_tracker = req_tracker
self._session = session
self.downloader = downloader
self.finder = finder
@ -459,24 +461,34 @@ class RequirementPreparer(object):
# showing the user what the hash should be.
return req.hashes(trust_internet=False) or MissingHashes()
def _fetch_metadata(preparer, link):
def _fetch_metadata_using_lazy_wheel(self, link):
# type: (Link) -> Optional[Distribution]
"""Fetch metadata, using lazy wheel if possible."""
use_lazy_wheel = preparer.use_lazy_wheel
remote_wheel = link.is_wheel and not link.is_file
if use_lazy_wheel and remote_wheel and not preparer.require_hashes:
wheel = Wheel(link.filename)
name = canonicalize_name(wheel.name)
# If HTTPRangeRequestUnsupported is raised, fallback silently.
with indent_log(), suppress(HTTPRangeRequestUnsupported):
logger.info(
'Obtaining dependency information from %s %s',
name, wheel.version,
)
url = link.url.split('#', 1)[0]
session = preparer.downloader._session
return dist_from_wheel_url(name, url, session)
return None
"""Fetch metadata using lazy wheel, if possible."""
if not self.use_lazy_wheel:
return None
if self.require_hashes:
logger.debug('Lazy wheel is not used as hash checking is required')
return None
if link.is_file or not link.is_wheel:
logger.debug(
'Lazy wheel is not used as '
'%r does not points to a remote wheel',
link,
)
return None
wheel = Wheel(link.filename)
name = canonicalize_name(wheel.name)
logger.info(
'Obtaining dependency information from %s %s',
name, wheel.version,
)
url = link.url.split('#', 1)[0]
try:
return dist_from_wheel_url(name, url, self._session)
except HTTPRangeRequestUnsupported:
logger.debug('%s does not support range requests', url)
return None
def prepare_linked_requirement(self, req, parallel_builds=False):
# type: (InstallRequirement, bool) -> Distribution
@ -484,7 +496,8 @@ class RequirementPreparer(object):
assert req.link
link = req.link
self._log_preparing_link(req)
wheel_dist = self._fetch_metadata(link)
with indent_log():
wheel_dist = self._fetch_metadata_using_lazy_wheel(link)
if wheel_dist is not None:
req.needs_more_preparation = True
return wheel_dist

View File

@ -76,6 +76,7 @@ class TestRequirementSet(object):
isolated=False,
use_pep517=None,
)
session = PipSession()
with get_requirement_tracker() as tracker:
preparer = RequirementPreparer(
@ -85,7 +86,8 @@ class TestRequirementSet(object):
wheel_download_dir=None,
build_isolation=True,
req_tracker=tracker,
downloader=Downloader(PipSession(), progress_bar="on"),
session=session,
downloader=Downloader(session, progress_bar="on"),
finder=finder,
require_hashes=require_hashes,
use_user_site=False,