mirror of https://github.com/pypa/pip
Merge pull request #8710 from McSinyx/unnest-lazy-fetch
This commit is contained in:
commit
f17c1d6d3b
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue