Skip to content

Commit 828da47

Browse files
committed
Add download_info on InstallRequirement
1 parent dc0f41f commit 828da47

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/pip/_internal/operations/prepare.py

+17-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
)
2626
from pip._internal.index.package_finder import PackageFinder
2727
from pip._internal.metadata import BaseDistribution
28+
from pip._internal.models.direct_url import ArchiveInfo
2829
from pip._internal.models.link import Link
2930
from pip._internal.models.wheel import Wheel
3031
from pip._internal.network.download import BatchDownloader, Downloader
@@ -35,9 +36,15 @@
3536
from pip._internal.network.session import PipSession
3637
from pip._internal.operations.build.build_tracker import BuildTracker
3738
from pip._internal.req.req_install import InstallRequirement
39+
from pip._internal.utils.direct_url_helpers import direct_url_from_link
3840
from pip._internal.utils.hashes import Hashes, MissingHashes
3941
from pip._internal.utils.logging import indent_log
40-
from pip._internal.utils.misc import display_path, hide_url, is_installable_dir
42+
from pip._internal.utils.misc import (
43+
display_path,
44+
hash_file,
45+
hide_url,
46+
is_installable_dir,
47+
)
4148
from pip._internal.utils.temp_dir import TempDirectory
4249
from pip._internal.utils.unpacking import unpack_file
4350
from pip._internal.vcs import vcs
@@ -482,10 +489,19 @@ def _prepare_linked_requirement(
482489
hashes.check_against_path(file_path)
483490
local_file = File(file_path, content_type=None)
484491

492+
# TODO handle editable here so we don't have to special case them elsewhere
493+
req.download_info = direct_url_from_link(
494+
link, req.source_dir, req.original_link_is_in_wheel_cache
495+
)
496+
485497
# For use in later processing,
486498
# preserve the file path on the requirement.
487499
if local_file:
488500
req.local_file_path = local_file.path
501+
assert isinstance(req.download_info.info, ArchiveInfo)
502+
if not req.download_info.info.hash:
503+
hash = hash_file(local_file.path)[0].hexdigest()
504+
req.download_info.info.hash = f"sha256={hash}"
489505

490506
dist = _get_prepared_distribution(
491507
req,

src/pip/_internal/req/req_install.py

+4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
get_wheel_distribution,
2929
)
3030
from pip._internal.metadata.base import FilesystemWheel
31+
from pip._internal.models.direct_url import DirectUrl
3132
from pip._internal.models.link import Link
3233
from pip._internal.operations.build.metadata import generate_metadata
3334
from pip._internal.operations.build.metadata_editable import generate_editable_metadata
@@ -114,6 +115,8 @@ def __init__(
114115
self.link = self.original_link = link
115116
self.original_link_is_in_wheel_cache = False
116117

118+
self.download_info: Optional[DirectUrl] = None
119+
117120
# Path to any downloaded or already-existing package.
118121
self.local_file_path: Optional[str] = None
119122
if self.link and self.link.is_file:
@@ -771,6 +774,7 @@ def install(
771774
if self.is_wheel:
772775
assert self.local_file_path
773776
direct_url = None
777+
# TODO use self.download_info instead
774778
if self.editable:
775779
direct_url = direct_url_for_editable(self.unpacked_source_directory)
776780
elif self.original_link:

0 commit comments

Comments
 (0)