diff --git a/stubs/setuptools/@tests/stubtest_allowlist.txt b/stubs/setuptools/@tests/stubtest_allowlist.txt index d0cac99ae01e..30bb58115fec 100644 --- a/stubs/setuptools/@tests/stubtest_allowlist.txt +++ b/stubs/setuptools/@tests/stubtest_allowlist.txt @@ -2,7 +2,6 @@ pkg_resources.Distribution.__cmp__ pkg_resources.Distribution.activate pkg_resources.Distribution.get_entry_map pkg_resources.EggMetadata.__init__ -pkg_resources.EggProvider.__init__ pkg_resources.Environment.best_match pkg_resources.Environment.obtain pkg_resources.FileMetadata.__init__ @@ -13,12 +12,10 @@ pkg_resources.IMetadataProvider.metadata_isdir pkg_resources.IMetadataProvider.metadata_listdir pkg_resources.IMetadataProvider.run_script pkg_resources.IResourceManager -pkg_resources.NullProvider.__init__ pkg_resources.Requirement.__init__ pkg_resources.WorkingSet.find_plugins pkg_resources.WorkingSet.resolve pkg_resources.WorkingSet.subscribe -pkg_resources.ZipProvider.__init__ pkg_resources.declare_namespace pkg_resources.fixup_namespace_packages pkg_resources.get_entry_map @@ -26,6 +23,10 @@ pkg_resources.get_provider pkg_resources.split_sections pkg_resources.to_filename +# Is always set in __init__ +pkg_resources.PathMetadata.egg_info +pkg_resources.EggMetadata.loader + # Uncomment once ignore_missing_stub is turned off # # Not supported by typeshed # setuptools.py34compat diff --git a/stubs/setuptools/pkg_resources/__init__.pyi b/stubs/setuptools/pkg_resources/__init__.pyi index 490184c91f89..7888500e67e6 100644 --- a/stubs/setuptools/pkg_resources/__init__.pyi +++ b/stubs/setuptools/pkg_resources/__init__.pyi @@ -4,12 +4,15 @@ import zipimport from _typeshed import Incomplete from abc import ABCMeta from collections.abc import Callable, Generator, Iterable, Sequence -from typing import IO, Any, TypeVar, overload -from typing_extensions import Self, TypeAlias +from io import BytesIO +from re import Pattern +from typing import IO, Any, ClassVar, TypeVar, overload +from typing_extensions import Literal, Self, TypeAlias _Version: TypeAlias = Incomplete # from packaging.version _T = TypeVar("_T") +_D = TypeVar("_D", bound=Distribution) _NestedStr: TypeAlias = str | Iterable[str | Iterable[Any]] _InstallerType: TypeAlias = Callable[[Requirement], Distribution | None] _EPDistType: TypeAlias = Distribution | Requirement | str @@ -68,6 +71,10 @@ class Environment: def obtain(self, requirement: Requirement, installer: Callable[[Requirement], _T]) -> _T: ... def scan(self, search_path: Sequence[str] | None = ...) -> None: ... +class DistInfoDistribution(Distribution): + PKG_INFO: ClassVar[Literal["METADATA"]] + EQEQ: ClassVar[Pattern[str]] + def parse_requirements(strs: str | Iterable[str]) -> Generator[Requirement, None, None]: ... class Requirement: @@ -119,10 +126,13 @@ class EntryPoint: def resolve(self) -> Any: ... def find_distributions(path_item: str, only: bool = ...) -> Generator[Distribution, None, None]: ... -def get_distribution(dist: Requirement | str | Distribution) -> Distribution: ... +@overload +def get_distribution(dist: _D) -> _D: ... +@overload +def get_distribution(dist: _PkgReqType) -> Distribution: ... -class Distribution(IResourceProvider, IMetadataProvider): - PKG_INFO: str +class Distribution(NullProvider, IResourceProvider, IMetadataProvider): + PKG_INFO: ClassVar[str] location: str project_name: str @property @@ -156,7 +166,7 @@ class Distribution(IResourceProvider, IMetadataProvider): def as_requirement(self) -> Requirement: ... def requires(self, extras: tuple[str, ...] = ...) -> list[Requirement]: ... def clone(self, **kw: str | int | None) -> Requirement: ... - def egg_name(self) -> str: ... + def egg_name(self) -> str: ... # type: ignore[override] # supertype's egg_name is a variable, not a method def __cmp__(self, other: Any) -> bool: ... def get_entry_info(self, group: str, name: str) -> EntryPoint | None: ... @overload @@ -199,7 +209,7 @@ def get_provider(package_or_requirement: str) -> IResourceProvider: ... def get_provider(package_or_requirement: Requirement) -> Distribution: ... class IMetadataProvider: - def has_metadata(self, name: str) -> bool: ... + def has_metadata(self, name: str) -> bool | None: ... def metadata_isdir(self, name: str) -> bool: ... def metadata_listdir(self, name: str) -> list[str]: ... def get_metadata(self, name: str) -> str: ... @@ -243,19 +253,49 @@ def register_loader_type(loader_type: type, provider_factory: Callable[[types.Mo def register_namespace_handler(importer_type: type, namespace_handler: _NSHandlerType) -> None: ... class IResourceProvider(IMetadataProvider): ... -class NullProvider: ... -class EggProvider(NullProvider): ... + +class NullProvider: + egg_name: str | None + egg_info: str | None + loader: types._LoaderProtocol | None + module_path: str | None + + def __init__(self, module) -> None: ... + def get_resource_filename(self, manager, resource_name) -> str: ... + def get_resource_stream(self, manager, resource_name) -> BytesIO: ... + def get_resource_string(self, manager, resource_name): ... + def has_resource(self, resource_name) -> bool: ... + def has_metadata(self, name: str) -> bool | None: ... + def get_metadata(self, name: str) -> str: ... + def get_metadata_lines(self, name: str) -> Generator[str, None, None]: ... + def resource_isdir(self, resource_name) -> bool: ... + def metadata_isdir(self, name: str) -> bool: ... + def resource_listdir(self, resource_name) -> list[str]: ... + def metadata_listdir(self, name: str) -> list[str]: ... + def run_script(self, script_name: str, namespace: dict[str, Any]) -> None: ... + +class EggProvider(NullProvider): + egg_root: str + class DefaultProvider(EggProvider): ... class PathMetadata(DefaultProvider, IResourceProvider): + egg_info: str + module_path: str def __init__(self, path: str, egg_info: str) -> None: ... -class ZipProvider(EggProvider): ... +class ZipProvider(EggProvider): + eagers: list[str] | None + zip_pre: str class EggMetadata(ZipProvider, IResourceProvider): + loader: zipimport.zipimporter + module_path: str def __init__(self, zipimporter: zipimport.zipimporter) -> None: ... -class EmptyProvider(NullProvider): ... +class EmptyProvider(NullProvider): + module_path: None + def __init__(self) -> None: ... empty_provider: EmptyProvider