1
1
import types
2
2
import zipimport
3
- from _typeshed import Incomplete
3
+ from _typeshed import Incomplete , StrPath , Unused
4
4
from collections .abc import Callable , Generator , Iterable , Iterator , Sequence
5
5
from io import BytesIO
6
+ from itertools import chain
6
7
from pkgutil import get_importer as get_importer
7
8
from re import Pattern
8
9
from 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
13
14
14
15
_T = TypeVar ("_T" )
15
16
_D = TypeVar ("_D" , bound = Distribution )
16
- _NestedStr : TypeAlias = str | Iterable [str | Iterable [ _NestedStr ] ]
17
+ _NestedStr : TypeAlias = str | Iterable [_NestedStr ]
17
18
_InstallerType : TypeAlias = Callable [[Requirement ], Distribution | None ]
18
- _EPDistType : TypeAlias = Distribution | Requirement | str
19
- _MetadataType : TypeAlias = IResourceProvider | None
20
19
_PkgReqType : TypeAlias = str | Requirement
20
+ _EPDistType : TypeAlias = Distribution | _PkgReqType
21
+ _MetadataType : TypeAlias = IResourceProvider | None
21
22
_ResolvedEntryPoint : TypeAlias = Any # Can be any attribute in the module
22
23
_ModuleLike : TypeAlias = object | types .ModuleType # Any object that optionally has __loader__ or __file__, usually a module
23
24
_ProviderFactoryType : TypeAlias = Callable [[_ModuleLike ], IResourceProvider ]
@@ -163,18 +164,19 @@ class Environment:
163
164
164
165
AvailableDistributions = Environment
165
166
166
- def parse_requirements (strs : str | Iterable [ str ] ) -> Generator [Requirement , None , None ]: ...
167
+ def parse_requirements (strs : _NestedStr ) -> Iterator [Requirement ]: ...
167
168
168
169
class RequirementParseError (packaging_requirements .InvalidRequirement ): ...
169
170
170
171
class Requirement (packaging_requirements .Requirement ):
171
172
unsafe_name : str
172
173
project_name : str
173
174
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]
175
177
specs : list [tuple [str , str ]]
176
178
def __init__ (self , requirement_string : str ) -> None : ...
177
- def __eq__ (self , other_requirement : object ) -> bool : ...
179
+ def __eq__ (self , other : object ) -> bool : ...
178
180
def __contains__ (self , item : Distribution | str | tuple [str , ...]) -> bool : ...
179
181
@staticmethod
180
182
def parse (s : str | Iterable [str ]) -> Requirement : ...
@@ -187,33 +189,31 @@ def get_entry_map(dist: _EPDistType, group: str) -> dict[str, EntryPoint]: ...
187
189
def get_entry_info (dist : _EPDistType , group : str , name : str ) -> EntryPoint | None : ...
188
190
189
191
class EntryPoint :
190
- pattern : ClassVar [Pattern [str ]]
191
192
name : str
192
193
module_name : str
193
194
attrs : tuple [str , ...]
194
195
extras : tuple [str , ...]
195
196
dist : Distribution | None
196
197
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
203
199
) -> None : ...
200
+ @overload
204
201
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
206
203
) -> _ResolvedEntryPoint : ...
204
+ @overload
205
+ def load (self , require : Literal [False ], * args : Unused , ** kwargs : Unused ) -> _ResolvedEntryPoint : ...
207
206
def resolve (self ) -> _ResolvedEntryPoint : ...
208
207
def require (self , env : Environment | None = None , installer : _InstallerType | None = None ) -> None : ...
208
+ pattern : ClassVar [Pattern [str ]]
209
209
@classmethod
210
210
def parse (cls , src : str , dist : Distribution | None = None ) -> Self : ...
211
211
@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 ]: ...
213
213
@classmethod
214
214
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 ] ]: ...
217
217
218
218
def find_distributions (path_item : str , only : bool = False ) -> Generator [Distribution , None , None ]: ...
219
219
@overload
@@ -229,9 +229,8 @@ CHECKOUT_DIST: Final = 0
229
229
DEVELOP_DIST : Final = - 1
230
230
231
231
class ResourceManager :
232
- extraction_path : Incomplete
232
+ extraction_path : str | None
233
233
cached_files : Incomplete
234
- def __init__ (self ) -> None : ...
235
234
def resource_exists (self , package_or_requirement : _PkgReqType , resource_name : str ) -> bool : ...
236
235
def resource_isdir (self , package_or_requirement : _PkgReqType , resource_name : str ) -> bool : ...
237
236
def resource_filename (self , package_or_requirement : _PkgReqType , resource_name : str ) -> str : ...
@@ -260,11 +259,11 @@ def get_provider(moduleOrReq: str) -> IResourceProvider: ...
260
259
def get_provider (moduleOrReq : Requirement ) -> Distribution : ...
261
260
262
261
class 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 ]: ...
264
265
def metadata_isdir (self , name : str ) -> bool : ...
265
266
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 ]: ...
268
267
def run_script (self , script_name : str , namespace : dict [str , Any ]) -> None : ...
269
268
270
269
class ResolutionError (Exception ): ...
@@ -298,7 +297,7 @@ class UnknownExtra(ResolutionError): ...
298
297
class ExtractionError (Exception ):
299
298
manager : ResourceManager
300
299
cache_path : str
301
- original_error : Exception
300
+ original_error : BaseException | None
302
301
303
302
def register_finder (importer_type : type [_T ], distribution_finder : _DistFinderType [_T ]) -> None : ...
304
303
def register_loader_type (loader_type : type [_ModuleLike ], provider_factory : _ProviderFactoryType ) -> None : ...
@@ -326,9 +325,9 @@ class NullProvider:
326
325
def get_resource_stream (self , manager : ResourceManager , resource_name ) -> BytesIO : ...
327
326
def get_resource_string (self , manager : ResourceManager , resource_name ): ...
328
327
def has_resource (self , resource_name ) -> bool : ...
329
- def has_metadata (self , name : str ) -> bool | None : ...
328
+ def has_metadata (self , name : str ) -> bool : ...
330
329
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 ]: ...
332
331
def resource_isdir (self , resource_name ) -> bool : ...
333
332
def metadata_isdir (self , name : str ) -> bool : ...
334
333
def resource_listdir (self , resource_name ) -> list [str ]: ...
@@ -339,26 +338,26 @@ class NullProvider:
339
338
class Distribution (NullProvider ):
340
339
PKG_INFO : ClassVar [str ]
341
340
project_name : str
342
- py_version : str
341
+ py_version : str | None
343
342
platform : str | None
344
- location : str
343
+ location : str | None
345
344
precedence : int
346
345
def __init__ (
347
346
self ,
348
347
location : str | None = None ,
349
348
metadata : _MetadataType = None ,
350
349
project_name : str | None = None ,
351
350
version : str | None = None ,
352
- py_version : str = ...,
351
+ py_version : str | None = ...,
353
352
platform : str | None = None ,
354
353
precedence : int = 3 ,
355
354
) -> None : ...
356
355
@classmethod
357
356
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
359
358
) -> Distribution : ...
360
359
@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 ]: ...
362
361
def __hash__ (self ) -> int : ...
363
362
def __lt__ (self , other : Distribution ) -> bool : ...
364
363
def __le__ (self , other : Distribution ) -> bool : ...
@@ -372,11 +371,11 @@ class Distribution(NullProvider):
372
371
def parsed_version (self ) -> packaging_version .Version : ...
373
372
@property
374
373
def version (self ) -> str : ...
375
- def requires (self , extras : tuple [str , ... ] = ()) -> list [Requirement ]: ...
374
+ def requires (self , extras : Iterable [str ] = ()) -> list [Requirement ]: ...
376
375
def activate (self , path : list [str ] | None = None , replace : bool = False ) -> None : ...
377
376
def egg_name (self ) -> str : ... # type: ignore[override] # supertype's egg_name is a variable, not a method
378
377
@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 : ...
380
379
def as_requirement (self ) -> Requirement : ...
381
380
def load_entry_point (self , group : str , name : str ) -> _ResolvedEntryPoint : ...
382
381
@overload
@@ -387,7 +386,7 @@ class Distribution(NullProvider):
387
386
def insert_on (self , path , loc : Incomplete | None = None , replace : bool = False ) -> None : ...
388
387
def check_version_conflict (self ) -> None : ...
389
388
def has_version (self ) -> bool : ...
390
- def clone (self , ** kw : str | int | None ) -> Requirement : ...
389
+ def clone (self , ** kw : str | int | IResourceProvider | None ) -> Requirement : ...
391
390
@property
392
391
def extras (self ) -> list [str ]: ...
393
392
@@ -426,13 +425,14 @@ class EmptyProvider(NullProvider):
426
425
empty_provider : EmptyProvider
427
426
428
427
class FileMetadata (EmptyProvider ):
429
- def __init__ (self , path : str ) -> None : ...
428
+ path : StrPath
429
+ def __init__ (self , path : StrPath ) -> None : ...
430
430
431
431
class PEP440Warning (RuntimeWarning ): ...
432
432
433
433
parse_version = packaging_version .Version
434
434
435
- def yield_lines (iterable : _NestedStr ) -> Generator [str , None , None ]: ...
435
+ def yield_lines (iterable : _NestedStr ) -> chain [str ]: ...
436
436
def split_sections (s : _NestedStr ) -> Generator [tuple [str | None , list [str ]], None , None ]: ...
437
437
def safe_name (name : str ) -> str : ...
438
438
def safe_version (version : str ) -> str : ...
0 commit comments