From 923b18277e6a7642a39f990a9ab18dcf8c957a40 Mon Sep 17 00:00:00 2001 From: Avasam Date: Sat, 18 Feb 2023 00:03:16 -0500 Subject: [PATCH 1/5] Update pkg_resources-stubs for use in pytype_test --- stubs/setuptools/pkg_resources/__init__.pyi | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/stubs/setuptools/pkg_resources/__init__.pyi b/stubs/setuptools/pkg_resources/__init__.pyi index 490184c91f89..ce4ce2fc8a1e 100644 --- a/stubs/setuptools/pkg_resources/__init__.pyi +++ b/stubs/setuptools/pkg_resources/__init__.pyi @@ -4,12 +4,14 @@ 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 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 +70,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 +125,15 @@ 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) -> DistInfoDistribution: ... class Distribution(IResourceProvider, IMetadataProvider): - PKG_INFO: str + PKG_INFO: ClassVar[str] + # Initialized to None, but is not meant to be instanciated directly + egg_info: str location: str project_name: str @property From d5b738420a17733f0a93eb78bb5ef5c1ce836e82 Mon Sep 17 00:00:00 2001 From: Avasam Date: Sun, 19 Feb 2023 14:14:25 -0500 Subject: [PATCH 2/5] Update stubs/setuptools/pkg_resources/__init__.pyi Co-authored-by: Alex Waygood --- stubs/setuptools/pkg_resources/__init__.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/setuptools/pkg_resources/__init__.pyi b/stubs/setuptools/pkg_resources/__init__.pyi index ce4ce2fc8a1e..f68d5958697e 100644 --- a/stubs/setuptools/pkg_resources/__init__.pyi +++ b/stubs/setuptools/pkg_resources/__init__.pyi @@ -132,7 +132,7 @@ def get_distribution(dist: _PkgReqType) -> DistInfoDistribution: ... class Distribution(IResourceProvider, IMetadataProvider): PKG_INFO: ClassVar[str] - # Initialized to None, but is not meant to be instanciated directly + # Initialized to None, but is not meant to be instantiated directly egg_info: str location: str project_name: str From a1abeb420d9fb92483320dc57e4b15b8275025ea Mon Sep 17 00:00:00 2001 From: Avasam Date: Thu, 23 Feb 2023 03:40:28 -0500 Subject: [PATCH 3/5] Add eggs to providers, PathMetadata and Distribution --- stubs/setuptools/pkg_resources/__init__.pyi | 39 ++++++++++++++++----- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/stubs/setuptools/pkg_resources/__init__.pyi b/stubs/setuptools/pkg_resources/__init__.pyi index ce4ce2fc8a1e..f879a712454e 100644 --- a/stubs/setuptools/pkg_resources/__init__.pyi +++ b/stubs/setuptools/pkg_resources/__init__.pyi @@ -4,6 +4,7 @@ import zipimport from _typeshed import Incomplete from abc import ABCMeta from collections.abc import Callable, Generator, Iterable, Sequence +from io import BytesIO from re import Pattern from typing import IO, Any, ClassVar, TypeVar, overload from typing_extensions import Literal, Self, TypeAlias @@ -128,12 +129,10 @@ def find_distributions(path_item: str, only: bool = ...) -> Generator[Distributi @overload def get_distribution(dist: _D) -> _D: ... @overload -def get_distribution(dist: _PkgReqType) -> DistInfoDistribution: ... +def get_distribution(dist: _PkgReqType) -> Distribution: ... -class Distribution(IResourceProvider, IMetadataProvider): +class Distribution(NullProvider, IResourceProvider, IMetadataProvider): PKG_INFO: ClassVar[str] - # Initialized to None, but is not meant to be instanciated directly - egg_info: str location: str project_name: str @property @@ -167,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 @@ -210,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: ... @@ -254,11 +253,35 @@ 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 + + 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_name: str + egg_info: str + egg_root: str + class DefaultProvider(EggProvider): ... class PathMetadata(DefaultProvider, IResourceProvider): + egg_info: str def __init__(self, path: str, egg_info: str) -> None: ... class ZipProvider(EggProvider): ... From a08efa238d6fde993fbd9552a939f03372515000 Mon Sep 17 00:00:00 2001 From: Avasam Date: Thu, 23 Feb 2023 04:10:33 -0500 Subject: [PATCH 4/5] stubtest fixes --- stubs/setuptools/@tests/stubtest_allowlist.txt | 7 ++++--- stubs/setuptools/pkg_resources/__init__.pyi | 14 ++++++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/stubs/setuptools/@tests/stubtest_allowlist.txt b/stubs/setuptools/@tests/stubtest_allowlist.txt index fdcdd0a54fe0..3085304d79a9 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 @@ -27,6 +24,10 @@ pkg_resources.py31compat pkg_resources.split_sections pkg_resources.to_filename +# Is always set in __init__ +pkg_resources.PathMetadata.egg_info +pkg_resources.EggMetadata.loader + # Only present if docutils is installed setuptools._distutils.command.check.SilentReporter diff --git a/stubs/setuptools/pkg_resources/__init__.pyi b/stubs/setuptools/pkg_resources/__init__.pyi index f879a712454e..7f4d1ac5b251 100644 --- a/stubs/setuptools/pkg_resources/__init__.pyi +++ b/stubs/setuptools/pkg_resources/__init__.pyi @@ -258,6 +258,7 @@ 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: ... @@ -274,22 +275,27 @@ class NullProvider: def run_script(self, script_name: str, namespace: dict[str, Any]) -> None: ... class EggProvider(NullProvider): - egg_name: str - egg_info: str 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: types._LoaderProtocol + 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 From 30f6013bfa87cc897835b817db3fda45367921a0 Mon Sep 17 00:00:00 2001 From: Avasam Date: Sat, 25 Feb 2023 13:31:54 -0500 Subject: [PATCH 5/5] Narrower EggMetadata.loader type --- stubs/setuptools/pkg_resources/__init__.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/setuptools/pkg_resources/__init__.pyi b/stubs/setuptools/pkg_resources/__init__.pyi index 7f4d1ac5b251..7888500e67e6 100644 --- a/stubs/setuptools/pkg_resources/__init__.pyi +++ b/stubs/setuptools/pkg_resources/__init__.pyi @@ -289,7 +289,7 @@ class ZipProvider(EggProvider): zip_pre: str class EggMetadata(ZipProvider, IResourceProvider): - loader: types._LoaderProtocol + loader: zipimport.zipimporter module_path: str def __init__(self, zipimporter: zipimport.zipimporter) -> None: ...