11import types
22import zipimport
3- from _typeshed import Incomplete
3+ from _typeshed import Incomplete , StrPath , Unused
44from collections .abc import Callable , Generator , Iterable , Iterator , Sequence
55from io import BytesIO
6+ from itertools import chain
67from pkgutil import get_importer as get_importer
78from re import Pattern
89from typing import IO , Any , ClassVar , Final , Literal , NoReturn , Protocol , TypeVar , overload , type_check_only
@@ -13,11 +14,11 @@ from ._vendored_packaging import requirements as packaging_requirements, version
1314
1415_T = TypeVar ("_T" )
1516_D = TypeVar ("_D" , bound = Distribution )
16- _NestedStr : TypeAlias = str | Iterable [str | Iterable [ _NestedStr ] ]
17+ _NestedStr : TypeAlias = str | Iterable [_NestedStr ]
1718_InstallerType : TypeAlias = Callable [[Requirement ], Distribution | None ]
18- _EPDistType : TypeAlias = Distribution | Requirement | str
19- _MetadataType : TypeAlias = IResourceProvider | None
2019_PkgReqType : TypeAlias = str | Requirement
20+ _EPDistType : TypeAlias = Distribution | _PkgReqType
21+ _MetadataType : TypeAlias = IResourceProvider | None
2122_ResolvedEntryPoint : TypeAlias = Any # Can be any attribute in the module
2223_ModuleLike : TypeAlias = object | types .ModuleType # Any object that optionally has __loader__ or __file__, usually a module
2324_ProviderFactoryType : TypeAlias = Callable [[_ModuleLike ], IResourceProvider ]
@@ -163,18 +164,19 @@ class Environment:
163164
164165AvailableDistributions = Environment
165166
166- def parse_requirements (strs : str | Iterable [ str ] ) -> Generator [Requirement , None , None ]: ...
167+ def parse_requirements (strs : _NestedStr ) -> Iterator [Requirement ]: ...
167168
168169class RequirementParseError (packaging_requirements .InvalidRequirement ): ...
169170
170171class Requirement (packaging_requirements .Requirement ):
171172 unsafe_name : str
172173 project_name : str
173174 key : str
174- extras : tuple [str , ...] # type: ignore[assignment] # incompatible override of attribute on base class
175+ # packaging.requirements.Requirement uses a set for its extras. setuptools/pkg_resources uses a variable-length tuple
176+ extras : tuple [str , ...] # type: ignore[assignment]
175177 specs : list [tuple [str , str ]]
176178 def __init__ (self , requirement_string : str ) -> None : ...
177- def __eq__ (self , other_requirement : object ) -> bool : ...
179+ def __eq__ (self , other : object ) -> bool : ...
178180 def __contains__ (self , item : Distribution | str | tuple [str , ...]) -> bool : ...
179181 @staticmethod
180182 def parse (s : str | Iterable [str ]) -> Requirement : ...
@@ -187,33 +189,31 @@ def get_entry_map(dist: _EPDistType, group: str) -> dict[str, EntryPoint]: ...
187189def get_entry_info (dist : _EPDistType , group : str , name : str ) -> EntryPoint | None : ...
188190
189191class EntryPoint :
190- pattern : ClassVar [Pattern [str ]]
191192 name : str
192193 module_name : str
193194 attrs : tuple [str , ...]
194195 extras : tuple [str , ...]
195196 dist : Distribution | None
196197 def __init__ (
197- self ,
198- name : str ,
199- module_name : str ,
200- attrs : tuple [str , ...] = (),
201- extras : tuple [str , ...] = (),
202- dist : Distribution | None = None ,
198+ self , name : str , module_name : str , attrs : Iterable [str ] = (), extras : Iterable [str ] = (), dist : Distribution | None = None
203199 ) -> None : ...
200+ @overload
204201 def load (
205- self , require : bool = True , env : Environment | None = ... , installer : _InstallerType | None = ...
202+ self , require : Literal [ True ] = True , env : Environment | None = None , installer : _InstallerType | None = None
206203 ) -> _ResolvedEntryPoint : ...
204+ @overload
205+ def load (self , require : Literal [False ], * args : Unused , ** kwargs : Unused ) -> _ResolvedEntryPoint : ...
207206 def resolve (self ) -> _ResolvedEntryPoint : ...
208207 def require (self , env : Environment | None = None , installer : _InstallerType | None = None ) -> None : ...
208+ pattern : ClassVar [Pattern [str ]]
209209 @classmethod
210210 def parse (cls , src : str , dist : Distribution | None = None ) -> Self : ...
211211 @classmethod
212- def parse_group (cls , group : str , lines : str | Sequence [ str ] , dist : Distribution | None = None ) -> dict [str , EntryPoint ]: ...
212+ def parse_group (cls , group : str , lines : _NestedStr , dist : Distribution | None = None ) -> dict [str , Self ]: ...
213213 @classmethod
214214 def parse_map (
215- cls , data : dict [ str , str | Sequence [str ]] | str | Sequence [str ], dist : Distribution | None = None
216- ) -> dict [str , EntryPoint ]: ...
215+ cls , data : str | Iterable [str ] | dict [ str , str | Iterable [str ] ], dist : Distribution | None = None
216+ ) -> dict [str , dict [ str , Self ] ]: ...
217217
218218def find_distributions (path_item : str , only : bool = False ) -> Generator [Distribution , None , None ]: ...
219219@overload
@@ -229,9 +229,8 @@ CHECKOUT_DIST: Final = 0
229229DEVELOP_DIST : Final = - 1
230230
231231class ResourceManager :
232- extraction_path : Incomplete
232+ extraction_path : str | None
233233 cached_files : Incomplete
234- def __init__ (self ) -> None : ...
235234 def resource_exists (self , package_or_requirement : _PkgReqType , resource_name : str ) -> bool : ...
236235 def resource_isdir (self , package_or_requirement : _PkgReqType , resource_name : str ) -> bool : ...
237236 def resource_filename (self , package_or_requirement : _PkgReqType , resource_name : str ) -> str : ...
@@ -260,11 +259,11 @@ def get_provider(moduleOrReq: str) -> IResourceProvider: ...
260259def get_provider (moduleOrReq : Requirement ) -> Distribution : ...
261260
262261class IMetadataProvider (Protocol ):
263- def has_metadata (self , name : str ) -> bool | None : ...
262+ def has_metadata (self , name : str ) -> bool : ...
263+ def get_metadata (self , name : str ) -> str : ...
264+ def get_metadata_lines (self , name : str ) -> Iterator [str ]: ...
264265 def metadata_isdir (self , name : str ) -> bool : ...
265266 def metadata_listdir (self , name : str ) -> list [str ]: ...
266- def get_metadata (self , name : str ) -> str : ...
267- def get_metadata_lines (self , name : str ) -> Generator [str , None , None ]: ...
268267 def run_script (self , script_name : str , namespace : dict [str , Any ]) -> None : ...
269268
270269class ResolutionError (Exception ): ...
@@ -298,7 +297,7 @@ class UnknownExtra(ResolutionError): ...
298297class ExtractionError (Exception ):
299298 manager : ResourceManager
300299 cache_path : str
301- original_error : Exception
300+ original_error : BaseException | None
302301
303302def register_finder (importer_type : type [_T ], distribution_finder : _DistFinderType [_T ]) -> None : ...
304303def register_loader_type (loader_type : type [_ModuleLike ], provider_factory : _ProviderFactoryType ) -> None : ...
@@ -326,9 +325,9 @@ class NullProvider:
326325 def get_resource_stream (self , manager : ResourceManager , resource_name ) -> BytesIO : ...
327326 def get_resource_string (self , manager : ResourceManager , resource_name ): ...
328327 def has_resource (self , resource_name ) -> bool : ...
329- def has_metadata (self , name : str ) -> bool | None : ...
328+ def has_metadata (self , name : str ) -> bool : ...
330329 def get_metadata (self , name : str ) -> str : ...
331- def get_metadata_lines (self , name : str ) -> Generator [str , None , None ]: ...
330+ def get_metadata_lines (self , name : str ) -> chain [str ]: ...
332331 def resource_isdir (self , resource_name ) -> bool : ...
333332 def metadata_isdir (self , name : str ) -> bool : ...
334333 def resource_listdir (self , resource_name ) -> list [str ]: ...
@@ -339,26 +338,26 @@ class NullProvider:
339338class Distribution (NullProvider ):
340339 PKG_INFO : ClassVar [str ]
341340 project_name : str
342- py_version : str
341+ py_version : str | None
343342 platform : str | None
344- location : str
343+ location : str | None
345344 precedence : int
346345 def __init__ (
347346 self ,
348347 location : str | None = None ,
349348 metadata : _MetadataType = None ,
350349 project_name : str | None = None ,
351350 version : str | None = None ,
352- py_version : str = ...,
351+ py_version : str | None = ...,
353352 platform : str | None = None ,
354353 precedence : int = 3 ,
355354 ) -> None : ...
356355 @classmethod
357356 def from_location (
358- cls , location : str , basename : str , metadata : _MetadataType = None , ** kw : str | None | int
357+ cls , location : str , basename : str , metadata : _MetadataType = None , * , precedence : int = 3
359358 ) -> Distribution : ...
360359 @property
361- def hashcmp (self ) -> tuple [Incomplete , int , str , Incomplete | None , str , str ]: ...
360+ def hashcmp (self ) -> tuple [parse_version , int , str , str | None , str , str ]: ...
362361 def __hash__ (self ) -> int : ...
363362 def __lt__ (self , other : Distribution ) -> bool : ...
364363 def __le__ (self , other : Distribution ) -> bool : ...
@@ -372,11 +371,11 @@ class Distribution(NullProvider):
372371 def parsed_version (self ) -> packaging_version .Version : ...
373372 @property
374373 def version (self ) -> str : ...
375- def requires (self , extras : tuple [str , ... ] = ()) -> list [Requirement ]: ...
374+ def requires (self , extras : Iterable [str ] = ()) -> list [Requirement ]: ...
376375 def activate (self , path : list [str ] | None = None , replace : bool = False ) -> None : ...
377376 def egg_name (self ) -> str : ... # type: ignore[override] # supertype's egg_name is a variable, not a method
378377 @classmethod
379- def from_filename (cls , filename : str , metadata : _MetadataType = None , ** kw : str | None | int ) -> Distribution : ...
378+ def from_filename (cls , filename : str , metadata : _MetadataType = None , * , precedence : int = 3 ) -> Distribution : ...
380379 def as_requirement (self ) -> Requirement : ...
381380 def load_entry_point (self , group : str , name : str ) -> _ResolvedEntryPoint : ...
382381 @overload
@@ -387,7 +386,7 @@ class Distribution(NullProvider):
387386 def insert_on (self , path , loc : Incomplete | None = None , replace : bool = False ) -> None : ...
388387 def check_version_conflict (self ) -> None : ...
389388 def has_version (self ) -> bool : ...
390- def clone (self , ** kw : str | int | None ) -> Requirement : ...
389+ def clone (self , ** kw : str | int | IResourceProvider | None ) -> Requirement : ...
391390 @property
392391 def extras (self ) -> list [str ]: ...
393392
@@ -426,13 +425,14 @@ class EmptyProvider(NullProvider):
426425empty_provider : EmptyProvider
427426
428427class FileMetadata (EmptyProvider ):
429- def __init__ (self , path : str ) -> None : ...
428+ path : StrPath
429+ def __init__ (self , path : StrPath ) -> None : ...
430430
431431class PEP440Warning (RuntimeWarning ): ...
432432
433433parse_version = packaging_version .Version
434434
435- def yield_lines (iterable : _NestedStr ) -> Generator [str , None , None ]: ...
435+ def yield_lines (iterable : _NestedStr ) -> chain [str ]: ...
436436def split_sections (s : _NestedStr ) -> Generator [tuple [str | None , list [str ]], None , None ]: ...
437437def safe_name (name : str ) -> str : ...
438438def safe_version (version : str ) -> str : ...
0 commit comments