Skip to content

Commit 84fd495

Browse files
authored
Update importlib to reflect recent changes (#6557)
1 parent e330a74 commit 84fd495

File tree

12 files changed

+65
-24
lines changed

12 files changed

+65
-24
lines changed

stdlib/VERSIONS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ imghdr: 2.7-
139139
imp: 2.7-
140140
importlib: 2.7-
141141
importlib.metadata: 3.8-
142+
importlib.metadata._meta: 3.10-
142143
importlib.resources: 3.7-
143144
inspect: 2.7-
144145
io: 2.7-

stdlib/importlib/abc.pyi

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ from _typeshed import (
1212
from abc import ABCMeta, abstractmethod
1313
from importlib.machinery import ModuleSpec
1414
from io import BufferedRandom, BufferedReader, BufferedWriter, FileIO, TextIOWrapper
15-
from typing import IO, Any, BinaryIO, Iterator, Mapping, Protocol, Sequence, Union, overload
15+
from typing import IO, Any, BinaryIO, Iterator, Mapping, NoReturn, Protocol, Sequence, Union, overload
1616
from typing_extensions import Literal, runtime_checkable
1717

1818
_Path = Union[bytes, str]
@@ -173,3 +173,10 @@ if sys.version_info >= (3, 9):
173173
def read_bytes(self) -> bytes: ...
174174
@abstractmethod
175175
def read_text(self, encoding: str | None = ...) -> str: ...
176+
class TraversableResources(ResourceReader):
177+
@abstractmethod
178+
def files(self) -> Traversable: ...
179+
def open_resource(self, resource: StrPath) -> BufferedReader: ... # type: ignore[override]
180+
def resource_path(self, resource: Any) -> NoReturn: ...
181+
def is_resource(self, path: StrPath) -> bool: ...
182+
def contents(self) -> Iterator[str]: ...

stdlib/importlib/machinery.pyi

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import importlib.abc
22
import sys
33
import types
4-
from typing import Any, Callable, Sequence
4+
from typing import Any, Callable, Iterable, Sequence
5+
6+
if sys.version_info >= (3, 8):
7+
from importlib.metadata import DistributionFinder, PathDistribution
58

69
class ModuleSpec:
710
def __init__(
@@ -97,6 +100,12 @@ class PathFinder:
97100
else:
98101
@classmethod
99102
def invalidate_caches(cls) -> None: ...
103+
if sys.version_info >= (3, 10):
104+
@staticmethod
105+
def find_distributions(context: DistributionFinder.Context = ...) -> Iterable[PathDistribution]: ...
106+
elif sys.version_info >= (3, 8):
107+
@classmethod
108+
def find_distributions(cls, context: DistributionFinder.Context = ...) -> Iterable[PathDistribution]: ...
100109
@classmethod
101110
def find_spec(
102111
cls, fullname: str, path: Sequence[bytes | str] | None = ..., target: types.ModuleType | None = ...

stdlib/importlib/metadata.pyi renamed to stdlib/importlib/metadata/__init__.pyi

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ from email.message import Message
77
from importlib.abc import MetaPathFinder
88
from os import PathLike
99
from pathlib import Path
10-
from typing import Any, Iterable, NamedTuple, Tuple, overload
10+
from typing import Any, ClassVar, Iterable, NamedTuple, Pattern, Tuple, overload
1111

1212
if sys.version_info >= (3, 10):
13+
from importlib.metadata._meta import PackageMetadata as PackageMetadata
1314
def packages_distributions() -> Mapping[str, list[str]]: ...
1415

1516
if sys.version_info >= (3, 8):
@@ -19,9 +20,18 @@ if sys.version_info >= (3, 8):
1920
value: str
2021
group: str
2122
class EntryPoint(_EntryPointBase):
23+
pattern: ClassVar[Pattern[str]]
2224
def load(self) -> Any: ... # Callable[[], Any] or an importable module
2325
@property
2426
def extras(self) -> list[str]: ...
27+
if sys.version_info >= (3, 9):
28+
@property
29+
def module(self) -> str: ...
30+
@property
31+
def attr(self) -> str: ...
32+
if sys.version_info >= (3, 10):
33+
dist: ClassVar[Distribution | None]
34+
def matches(self, **params: Any) -> bool: ... # undocumented
2535
class PackagePath(pathlib.PurePosixPath):
2636
def read_text(self, encoding: str = ...) -> str: ...
2737
def read_binary(self) -> bytes: ...
@@ -61,6 +71,9 @@ if sys.version_info >= (3, 8):
6171
def files(self) -> list[PackagePath] | None: ...
6272
@property
6373
def requires(self) -> list[str] | None: ...
74+
if sys.version_info >= (3, 10):
75+
@property
76+
def name(self) -> str: ...
6477
class DistributionFinder(MetaPathFinder):
6578
class Context:
6679
name: str | None

stdlib/importlib/metadata/_meta.pyi

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from typing import Any, Iterator, Protocol, TypeVar
2+
3+
_T = TypeVar("_T")
4+
5+
class PackageMetadata(Protocol):
6+
def __len__(self) -> int: ...
7+
def __contains__(self, item: str) -> bool: ...
8+
def __getitem__(self, key: str) -> str: ...
9+
def __iter__(self) -> Iterator[str]: ...
10+
def get_all(self, name: str, failobj: _T = ...) -> list[Any] | _T: ...
11+
@property
12+
def json(self) -> dict[str, str | list[str]]: ...
13+
14+
class SimplePath(Protocol):
15+
def joinpath(self) -> SimplePath: ...
16+
def __div__(self) -> SimplePath: ...
17+
def parent(self) -> SimplePath: ...
18+
def read_text(self) -> str: ...

stdlib/importlib/resources.pyi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,6 @@ if sys.version_info >= (3, 9):
2323
from importlib.abc import Traversable
2424
def files(package: Package) -> Traversable: ...
2525
def as_file(path: Traversable) -> AbstractContextManager[Path]: ...
26+
27+
if sys.version_info >= (3, 10):
28+
from importlib.abc import ResourceReader as ResourceReader

stdlib/importlib/util.pyi

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import importlib.abc
22
import importlib.machinery
3+
import sys
34
import types
45
from _typeshed import StrOrBytesPath
56
from typing import Any, Callable
@@ -36,3 +37,6 @@ class LazyLoader(importlib.abc.Loader):
3637
def factory(cls, loader: importlib.abc.Loader) -> Callable[..., LazyLoader]: ...
3738
def create_module(self, spec: importlib.machinery.ModuleSpec) -> types.ModuleType | None: ...
3839
def exec_module(self, module: types.ModuleType) -> None: ...
40+
41+
if sys.version_info >= (3, 7):
42+
def source_hash(source_bytes: bytes) -> int: ...

tests/stubtest_allowlists/py310.txt

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ gettext.translation
4343
hmac.new # Stub is a white lie; see comments in the stub
4444
http.server.SimpleHTTPRequestHandler.__init__ # *args is expanded
4545
importlib.abc.Traversable.__init__ # Inherits __init__ from typing.Protocol
46+
importlib.metadata.PackageMetadata.__init__ # Inherits __init__ from typing.Protocol
47+
importlib.metadata._meta.PackageMetadata.__init__ # Inherits __init__ from typing.Protocol
48+
importlib.metadata._meta.SimplePath.__init__ # Inherits __init__ from typing.Protocol
4649
ipaddress.IPv4Interface.hostmask
4750
ipaddress.IPv6Interface.hostmask
4851
ipaddress._BaseNetwork.broadcast_address
@@ -150,17 +153,6 @@ distutils.dist.DistributionMetadata.set_keywords
150153
distutils.dist.DistributionMetadata.set_platforms
151154
distutils.util.get_host_platform
152155
email.headerregistry.MessageIDHeader.max_count
153-
importlib.abc.TraversableResources
154-
importlib.machinery.PathFinder.find_distributions
155-
importlib.metadata.Distribution.name
156-
importlib.metadata.EntryPoint.attr
157-
importlib.metadata.EntryPoint.dist
158-
importlib.metadata.EntryPoint.matches
159-
importlib.metadata.EntryPoint.module
160-
importlib.metadata.EntryPoint.pattern
161-
importlib.metadata.PackageMetadata
162-
importlib.resources.ResourceReader
163-
importlib.util.source_hash
164156
lib2to3.pgen2.tokenize.COLONEQUAL
165157
multiprocessing.managers.SharedMemoryServer.create
166158
multiprocessing.managers.SharedMemoryServer.list_segments

tests/stubtest_allowlists/py36.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ enum.Enum._generate_next_value_
2525
fractions.Fraction.__new__ # overload is too complicated for stubtest to resolve
2626
hmac.HMAC.__init__
2727
importlib.metadata # Added in 3.8
28+
importlib.metadata._meta # Added in 3.10
2829
importlib.resources # Added in 3.7
2930
io.StringIO.readline
3031
ipaddress._BaseNetwork.__init__

tests/stubtest_allowlists/py37.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ fractions.Fraction.__new__ # overload is too complicated for stubtest to resolv
2929
hmac.HMAC.__init__
3030
http.server.SimpleHTTPRequestHandler.__init__ # *args is expanded
3131
importlib.metadata # Added in 3.8
32+
importlib.metadata._meta # Added in 3.10
3233
ipaddress._BaseNetwork.__init__
3334
json.loads
3435
multiprocessing.shared_memory
@@ -110,7 +111,6 @@ dummy_threading.setprofile
110111
dummy_threading.settrace
111112
dummy_threading.stack_size
112113
html.parser.HTMLParser.unescape
113-
importlib.util.source_hash
114114
lib2to3.pgen2.tokenize.COLONEQUAL
115115
platform.popen
116116
plistlib.Data.asBase64

tests/stubtest_allowlists/py38.txt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ gettext.install # codeset default value is ['unspecified'] so can't be specifie
3737
gettext.translation # codeset default value is ['unspecified'] so can't be specified
3838
hmac.new # Stub is a white lie; see comments in the stub
3939
http.server.SimpleHTTPRequestHandler.__init__ # *args is expanded
40+
importlib.metadata._meta # Added in 3.10
4041
ipaddress.IPv4Interface.hostmask
4142
ipaddress.IPv6Interface.hostmask
4243
ipaddress._BaseNetwork.broadcast_address
@@ -134,9 +135,6 @@ dummy_threading.settrace
134135
dummy_threading.stack_size
135136
email.headerregistry.MessageIDHeader.max_count
136137
html.parser.HTMLParser.unescape
137-
importlib.machinery.PathFinder.find_distributions
138-
importlib.metadata.EntryPoint.pattern
139-
importlib.util.source_hash
140138
lib2to3.pgen2.tokenize.COLONEQUAL
141139
multiprocessing.managers.SharedMemoryServer.create
142140
multiprocessing.managers.SharedMemoryServer.list_segments

tests/stubtest_allowlists/py39.txt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ gettext.translation
4040
hmac.new # Stub is a white lie; see comments in the stub
4141
http.server.SimpleHTTPRequestHandler.__init__ # *args is expanded
4242
importlib.abc.Traversable.__init__ # Inherits __init__ from typing.Protocol
43+
importlib.metadata._meta # Added in 3.10
4344
ipaddress.IPv4Interface.hostmask
4445
ipaddress.IPv6Interface.hostmask
4546
ipaddress._BaseNetwork.broadcast_address
@@ -135,12 +136,6 @@ email.headerregistry.MessageIDHeader.max_count
135136
hmac.HMAC.digest_cons
136137
hmac.HMAC.inner
137138
hmac.HMAC.outer
138-
importlib.abc.TraversableResources
139-
importlib.machinery.PathFinder.find_distributions
140-
importlib.metadata.EntryPoint.attr
141-
importlib.metadata.EntryPoint.module
142-
importlib.metadata.EntryPoint.pattern
143-
importlib.util.source_hash
144139
lib2to3.pgen2.tokenize.COLONEQUAL
145140
multiprocessing.managers.SharedMemoryServer.create
146141
multiprocessing.managers.SharedMemoryServer.list_segments

0 commit comments

Comments
 (0)