From 185ef486ae02ae75e7b96634bc28bc8f5e6aa3ed Mon Sep 17 00:00:00 2001 From: Avasam Date: Fri, 1 Mar 2024 10:09:51 -0500 Subject: [PATCH] Override `pkg_resources.ZipProvider.loader` type (#11514) --- stubs/setuptools/@tests/stubtest_allowlist.txt | 1 + stubs/setuptools/pkg_resources/__init__.pyi | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/stubs/setuptools/@tests/stubtest_allowlist.txt b/stubs/setuptools/@tests/stubtest_allowlist.txt index 57ecb67e4..8203636ed 100644 --- a/stubs/setuptools/@tests/stubtest_allowlist.txt +++ b/stubs/setuptools/@tests/stubtest_allowlist.txt @@ -1,6 +1,7 @@ # Is always set in __init__ pkg_resources.PathMetadata.egg_info pkg_resources.EggMetadata.loader +pkg_resources.ZipProvider.loader # 1 used for True as a default value setuptools._distutils.dist.Distribution.get_command_obj diff --git a/stubs/setuptools/pkg_resources/__init__.pyi b/stubs/setuptools/pkg_resources/__init__.pyi index 25be472df..c66ed795e 100644 --- a/stubs/setuptools/pkg_resources/__init__.pyi +++ b/stubs/setuptools/pkg_resources/__init__.pyi @@ -6,8 +6,9 @@ from abc import ABCMeta from collections.abc import Callable, Generator, Iterable, Iterator, Sequence from io import BytesIO from re import Pattern -from typing import IO, Any, ClassVar, Literal, Protocol, TypeVar, overload +from typing import IO, Any, ClassVar, Literal, Protocol, TypeVar, overload, type_check_only from typing_extensions import Self, TypeAlias +from zipfile import ZipInfo from ._vendored_packaging import requirements as packaging_requirements, version as packaging_version @@ -21,6 +22,10 @@ _PkgReqType: TypeAlias = str | Requirement _DistFinderType: TypeAlias = Callable[[_Importer, str, bool], Generator[Distribution, None, None]] _NSHandlerType: TypeAlias = Callable[[_Importer, str, str, types.ModuleType], str] +@type_check_only +class _ZipLoaderModule(Protocol): + __loader__: zipimport.zipimporter + def declare_namespace(packageName: str) -> None: ... def fixup_namespace_packages(path_item: str, parent=None) -> None: ... @@ -321,8 +326,11 @@ class PathMetadata(DefaultProvider): class ZipProvider(EggProvider): eagers: list[str] | None zip_pre: str + # ZipProvider's loader should always be a zipimporter + loader: zipimport.zipimporter + def __init__(self, module: _ZipLoaderModule) -> None: ... @property - def zipinfo(self): ... + def zipinfo(self) -> dict[str, ZipInfo]: ... class EggMetadata(ZipProvider): loader: zipimport.zipimporter