pkg_resources: Make _InstallerType stricter and generic (#11527)

This commit is contained in:
Avasam
2024-03-09 17:37:10 -05:00
committed by GitHub
parent 96e62dd757
commit 63737acac6

View File

@@ -15,7 +15,8 @@ from ._vendored_packaging import requirements as packaging_requirements, version
_T = TypeVar("_T")
_D = TypeVar("_D", bound=Distribution)
_NestedStr: TypeAlias = str | Iterable[_NestedStr]
_InstallerType: TypeAlias = Callable[[Requirement], Distribution | None]
_StrictInstallerType: TypeAlias = Callable[[Requirement], _D]
_InstallerType: TypeAlias = Callable[[Requirement], Distribution | None] | None
_PkgReqType: TypeAlias = str | Requirement
_EPDistType: TypeAlias = Distribution | _PkgReqType
_MetadataType: TypeAlias = IResourceProvider | None
@@ -117,19 +118,53 @@ class WorkingSet:
def run_script(self, requires: str, script_name: str) -> None: ...
def __iter__(self) -> Iterator[Distribution]: ...
def add(self, dist: Distribution, entry: str | None = None, insert: bool = True, replace: bool = False) -> None: ...
@overload
def resolve( # type: ignore[overload-overlap]
self,
requirements: Iterable[Requirement],
env: Environment | None,
installer: _StrictInstallerType[_D],
replace_conflicting: bool = False,
extras: tuple[str, ...] | None = None,
) -> list[_D]: ...
@overload
def resolve( # type: ignore[overload-overlap]
self,
requirements: Iterable[Requirement],
env: Environment | None = None,
*,
installer: _StrictInstallerType[_D],
replace_conflicting: bool = False,
extras: tuple[str, ...] | None = None,
) -> list[_D]: ...
@overload
def resolve(
self,
requirements: Iterable[Requirement],
env: Environment | None = None,
installer: _InstallerType | None = None,
installer: _InstallerType = None,
replace_conflicting: bool = False,
extras: tuple[str, ...] | None = None,
) -> list[Distribution]: ...
@overload
def find_plugins( # type: ignore[overload-overlap]
self, plugin_env: Environment, full_env: Environment | None, installer: _StrictInstallerType[_D], fallback: bool = True
) -> tuple[list[_D], dict[Distribution, Exception]]: ...
@overload
def find_plugins( # type: ignore[overload-overlap]
self,
plugin_env: Environment,
full_env: Environment | None = None,
*,
installer: _StrictInstallerType[_D],
fallback: bool = True,
) -> tuple[list[_D], dict[Distribution, Exception]]: ...
@overload
def find_plugins(
self,
plugin_env: Environment,
full_env: Environment | None = None,
installer: _InstallerType | None = None,
installer: _InstallerType = None,
fallback: bool = True,
) -> tuple[list[Distribution], dict[Distribution, Exception]]: ...
def require(self, *requirements: _NestedStr) -> Sequence[Distribution]: ...
@@ -153,16 +188,18 @@ class Environment:
def add(self, dist: Distribution) -> None: ...
@overload
def best_match(
self, req: Requirement, working_set: WorkingSet, installer: None = None, replace_conflicting: bool = False
) -> Distribution: ...
self, req: Requirement, working_set: WorkingSet, installer: _StrictInstallerType[_D], replace_conflicting: bool = False
) -> _D: ...
@overload
def best_match(
self, req: Requirement, working_set: WorkingSet, installer: Callable[[Requirement], _T], replace_conflicting: bool = False
) -> _T: ...
self, req: Requirement, working_set: WorkingSet, installer: _InstallerType = None, replace_conflicting: bool = False
) -> Distribution | None: ...
@overload
def obtain(self, requirement: Requirement, installer: None = None) -> None: ...
def obtain(self, requirement: Requirement, installer: _StrictInstallerType[_D]) -> _D: ... # type: ignore[overload-overlap]
@overload
def obtain(self, requirement: Requirement, installer: Callable[[Requirement], _T]) -> _T: ...
def obtain(self, requirement: Requirement, installer: Callable[[Requirement], None] | None = None) -> None: ...
@overload
def obtain(self, requirement: Requirement, installer: _InstallerType = None) -> Distribution | None: ...
def __iter__(self) -> Iterator[str]: ...
def __iadd__(self, other: Distribution | Environment) -> Self: ...
def __add__(self, other: Distribution | Environment) -> Self: ...
@@ -204,12 +241,12 @@ class EntryPoint:
) -> None: ...
@overload
def load(
self, require: Literal[True] = True, env: Environment | None = None, installer: _InstallerType | None = None
self, require: Literal[True] = True, env: Environment | None = None, installer: _InstallerType = None
) -> _ResolvedEntryPoint: ...
@overload
def load(self, require: Literal[False], *args: Unused, **kwargs: Unused) -> _ResolvedEntryPoint: ...
def resolve(self) -> _ResolvedEntryPoint: ...
def require(self, env: Environment | None = None, installer: _InstallerType | None = None) -> None: ...
def require(self, env: Environment | None = None, installer: _InstallerType = None) -> None: ...
pattern: ClassVar[Pattern[str]]
@classmethod
def parse(cls, src: str, dist: Distribution | None = None) -> Self: ...