from pip._vendor.resolvelib.providers import AbstractProvider from pip._internal.utils.typing import MYPY_CHECK_RUNNING if MYPY_CHECK_RUNNING: from typing import Any, Optional, Sequence, Tuple, Union from pip._internal.req.req_install import InstallRequirement from .base import Requirement, Candidate from .factory import Factory class PipProvider(AbstractProvider): def __init__( self, factory, # type: Factory ignore_dependencies, # type: bool ): # type: (...) -> None self._factory = factory self._ignore_dependencies = ignore_dependencies def get_install_requirement(self, c): # type: (Candidate) -> Optional[InstallRequirement] return c.get_install_requirement() def identify(self, dependency): # type: (Union[Requirement, Candidate]) -> str return dependency.name def get_preference( self, resolution, # type: Optional[Candidate] candidates, # type: Sequence[Candidate] information # type: Sequence[Tuple[Requirement, Candidate]] ): # type: (...) -> Any # Use the "usual" value for now return len(candidates) def find_matches(self, requirement): # type: (Requirement) -> Sequence[Candidate] return requirement.find_matches() def is_satisfied_by(self, requirement, candidate): # type: (Requirement, Candidate) -> bool return requirement.is_satisfied_by(candidate) def get_dependencies(self, candidate): # type: (Candidate) -> Sequence[Requirement] if self._ignore_dependencies: return [] return candidate.get_dependencies()