Skip to content

Copy template ireq to set hash info #11021

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 17 additions & 14 deletions src/pip/_internal/resolution/resolvelib/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
)
from pip._internal.index.package_finder import PackageFinder
from pip._internal.metadata import BaseDistribution, get_default_environment
from pip._internal.models.candidate import InstallationCandidate
from pip._internal.models.link import Link
from pip._internal.models.wheel import Wheel
from pip._internal.operations.prepare import RequirementPreparer
Expand All @@ -57,6 +58,7 @@
LinkCandidate,
RequiresPythonCandidate,
as_base_candidate,
make_install_req_from_link,
)
from .found_candidates import FoundCandidates, IndexCandidateInfo
from .requirements import (
Expand Down Expand Up @@ -290,6 +292,20 @@ def _get_installed_candidate() -> Optional[Candidate]:
return None
return candidate

def make_index_cand(ican: InstallationCandidate) -> Optional[Candidate]:
modified = make_install_req_from_link(ican.link, template)
if not modified.is_pinned:
assert modified.req, "Candidates found on index must be PEP 508"
modified.req.specifier = specifier
modified.hash_options = hashes.allowed
return self._make_candidate_from_link(
link=ican.link,
extras=extras,
template=modified,
name=name,
version=ican.version,
)

def iter_index_candidate_infos() -> Iterator[IndexCandidateInfo]:
result = self._finder.find_best_candidate(
project_name=name,
Expand All @@ -305,24 +321,11 @@ def iter_index_candidate_infos() -> Iterator[IndexCandidateInfo]:

pinned = is_pinned(specifier)

if not template.is_pinned:
assert template.req, "Candidates found on index must be PEP 508"
template.req.specifier = specifier
template.hash_options = hashes.allowed

# PackageFinder returns earlier versions first, so we reverse.
for ican in reversed(icans):
if not (all_yanked and pinned) and ican.link.is_yanked:
continue
func = functools.partial(
self._make_candidate_from_link,
link=ican.link,
extras=extras,
template=template,
name=name,
version=ican.version,
)
yield ican.version, func
yield ican.version, functools.partial(make_index_cand, ican)

return FoundCandidates(
iter_index_candidate_infos,
Expand Down