REDROOM
PHP 8.3.31
Path:
Logout
Edit File
Size: 5.76 KB
Close
/opt/hc_python/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py
Text
Base64
from __future__ import annotations from collections.abc import Iterable from dataclasses import dataclass from typing import Optional from pip._vendor.packaging.specifiers import SpecifierSet from pip._vendor.packaging.utils import NormalizedName from pip._vendor.packaging.version import Version from pip._internal.models.link import Link, links_equivalent from pip._internal.req.req_install import InstallRequirement from pip._internal.utils.hashes import Hashes CandidateLookup = tuple[Optional["Candidate"], Optional[InstallRequirement]] def format_name(project: NormalizedName, extras: frozenset[NormalizedName]) -> str: if not extras: return project extras_expr = ",".join(sorted(extras)) return f"{project}[{extras_expr}]" @dataclass(frozen=True) class Constraint: specifier: SpecifierSet hashes: Hashes hash_options: dict[str, list[str]] links: frozenset[Link] @classmethod def empty(cls) -> Constraint: return Constraint(SpecifierSet(), Hashes(), {}, frozenset()) @classmethod def from_ireq(cls, ireq: InstallRequirement) -> Constraint: links = frozenset([ireq.link]) if ireq.link else frozenset() hash_options = {alg: list(v) for alg, v in ireq.hash_options.items()} return Constraint( ireq.specifier, ireq.hashes(trust_internet=False), hash_options, links, ) def __bool__(self) -> bool: return bool(self.specifier) or bool(self.hashes) or bool(self.links) def __and__(self, other: InstallRequirement) -> Constraint: if not isinstance(other, InstallRequirement): return NotImplemented specifier = self.specifier & other.specifier hashes = self.hashes & other.hashes(trust_internet=False) if not self.hash_options: hash_options = {alg: list(v) for alg, v in other.hash_options.items()} elif not other.hash_options: hash_options = {alg: list(v) for alg, v in self.hash_options.items()} else: hash_options = { alg: [v for v in other.hash_options[alg] if v in self.hash_options[alg]] for alg in self.hash_options.keys() & other.hash_options.keys() } links = self.links if other.link: links = links.union([other.link]) return Constraint(specifier, hashes, hash_options, links) def is_satisfied_by(self, candidate: Candidate) -> bool: # Reject if there are any mismatched URL constraints on this package. if self.links and not all(_match_link(link, candidate) for link in self.links): return False # We can safely always allow prereleases here since PackageFinder # already implements the prerelease logic, and would have filtered out # prerelease candidates if the user does not expect them. return self.specifier.contains(candidate.version, prereleases=True) def format_for_error(self) -> str: s = str(self.specifier) if self.links: s += f" (from {', '.join(str(link) for link in self.links)})" return s class Requirement: @property def project_name(self) -> NormalizedName: """The "project name" of a requirement. This is different from ``name`` if this requirement contains extras, in which case ``name`` would contain the ``[...]`` part, while this refers to the name of the project. """ raise NotImplementedError("Subclass should override") @property def name(self) -> str: """The name identifying this requirement in the resolver. This is different from ``project_name`` if this requirement contains extras, where ``project_name`` would not contain the ``[...]`` part. """ raise NotImplementedError("Subclass should override") def is_satisfied_by(self, candidate: Candidate) -> bool: return False def get_candidate_lookup(self) -> CandidateLookup: raise NotImplementedError("Subclass should override") def format_for_error(self) -> str: raise NotImplementedError("Subclass should override") def _match_link(link: Link, candidate: Candidate) -> bool: if candidate.source_link: return links_equivalent(link, candidate.source_link) return False class Candidate: @property def project_name(self) -> NormalizedName: """The "project name" of the candidate. This is different from ``name`` if this candidate contains extras, in which case ``name`` would contain the ``[...]`` part, while this refers to the name of the project. """ raise NotImplementedError("Override in subclass") @property def name(self) -> str: """The name identifying this candidate in the resolver. This is different from ``project_name`` if this candidate contains extras, where ``project_name`` would not contain the ``[...]`` part. """ raise NotImplementedError("Override in subclass") @property def version(self) -> Version: raise NotImplementedError("Override in subclass") @property def is_installed(self) -> bool: raise NotImplementedError("Override in subclass") @property def is_editable(self) -> bool: raise NotImplementedError("Override in subclass") @property def source_link(self) -> Link | None: raise NotImplementedError("Override in subclass") def iter_dependencies(self, with_requires: bool) -> Iterable[Requirement | None]: raise NotImplementedError("Override in subclass") def get_install_requirement(self) -> InstallRequirement | None: raise NotImplementedError("Override in subclass") def format_for_error(self) -> str: raise NotImplementedError("Subclass should override")
Save
Close
Exit & Reset
Text mode: syntax highlighting auto-detects file type.
Directory Contents
Dirs: 1 × Files: 9
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
__pycache__
DIR
-
drwxr-xr-x
2026-06-11 06:30:21
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
base.py
5.76 KB
lrw-r--r--
2026-06-11 06:30:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
candidates.py
20.42 KB
lrw-r--r--
2026-06-11 06:30:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
factory.py
35.91 KB
lrw-r--r--
2026-06-11 06:30:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
found_candidates.py
5.88 KB
lrw-r--r--
2026-06-11 06:30:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
provider.py
11.87 KB
lrw-r--r--
2026-06-11 06:30:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
reporter.py
3.83 KB
lrw-r--r--
2026-06-11 06:30:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
requirements.py
8.05 KB
lrw-r--r--
2026-06-11 06:30:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
resolver.py
13.12 KB
lrw-r--r--
2026-06-11 06:30:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.py
0 B
lrw-r--r--
2026-06-11 06:30:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).