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