72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
import optparse
|
|
from abc import ABCMeta, abstractmethod
|
|
from contextlib import contextmanager
|
|
from typing import Iterator
|
|
|
|
from pip._internal.commands.install import InstallCommand
|
|
from pip._internal.index.package_finder import PackageFinder
|
|
from pip._internal.models.index import PyPI
|
|
from pip._internal.network.session import PipSession
|
|
from pip._internal.req import InstallRequirement
|
|
|
|
|
|
class BaseRepository(metaclass=ABCMeta):
|
|
DEFAULT_INDEX_URL = PyPI.simple_url
|
|
|
|
def clear_caches(self) -> None:
|
|
"""Should clear any caches used by the implementation."""
|
|
|
|
@abstractmethod
|
|
def find_best_match(
|
|
self, ireq: InstallRequirement, prereleases: bool | None
|
|
) -> InstallRequirement:
|
|
"""
|
|
Returns a pinned InstallRequirement object that indicates the best match
|
|
for the given InstallRequirement according to the external repository.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def get_dependencies(self, ireq: InstallRequirement) -> set[InstallRequirement]:
|
|
"""
|
|
Given a pinned, URL, or editable InstallRequirement, returns a set of
|
|
dependencies (also InstallRequirements, but not necessarily pinned).
|
|
They indicate the secondary dependencies for the given requirement.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def get_hashes(self, ireq: InstallRequirement) -> set[str]:
|
|
"""
|
|
Given a pinned InstallRequirement, returns a set of hashes that represent
|
|
all of the files for a given requirement. It is not acceptable for an
|
|
editable or unpinned requirement to be passed to this function.
|
|
"""
|
|
|
|
@abstractmethod
|
|
@contextmanager
|
|
def allow_all_wheels(self) -> Iterator[None]:
|
|
"""
|
|
Monkey patches pip.Wheel to allow wheels from all platforms and Python versions.
|
|
"""
|
|
|
|
@property
|
|
@abstractmethod
|
|
def options(self) -> optparse.Values:
|
|
"""Returns parsed pip options"""
|
|
|
|
@property
|
|
@abstractmethod
|
|
def session(self) -> PipSession:
|
|
"""Returns a session to make requests"""
|
|
|
|
@property
|
|
@abstractmethod
|
|
def finder(self) -> PackageFinder:
|
|
"""Returns a package finder to interact with simple repository API (PEP 503)"""
|
|
|
|
@property
|
|
@abstractmethod
|
|
def command(self) -> InstallCommand:
|
|
"""Return an install command."""
|