Skip to content

Commit 4363107

Browse files
importlib: improve bytes handling (#9070)
1 parent 82bf494 commit 4363107

File tree

4 files changed

+38
-33
lines changed

4 files changed

+38
-33
lines changed

stdlib/importlib/abc.pyi

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
import sys
22
import types
3-
from _typeshed import OpenBinaryMode, OpenBinaryModeReading, OpenBinaryModeUpdating, OpenBinaryModeWriting, OpenTextMode
3+
from _typeshed import (
4+
OpenBinaryMode,
5+
OpenBinaryModeReading,
6+
OpenBinaryModeUpdating,
7+
OpenBinaryModeWriting,
8+
OpenTextMode,
9+
ReadableBuffer,
10+
)
411
from abc import ABCMeta, abstractmethod
512
from collections.abc import Iterator, Mapping, Sequence
613
from importlib.machinery import ModuleSpec
714
from io import BufferedRandom, BufferedReader, BufferedWriter, FileIO, TextIOWrapper
815
from typing import IO, Any, BinaryIO, NoReturn, Protocol, overload, runtime_checkable
9-
from typing_extensions import Literal, TypeAlias
16+
from typing_extensions import Literal
1017

1118
if sys.version_info >= (3, 11):
1219
__all__ = [
@@ -24,8 +31,6 @@ if sys.version_info >= (3, 11):
2431
"TraversableResources",
2532
]
2633

27-
_Path: TypeAlias = bytes | str
28-
2934
class Finder(metaclass=ABCMeta): ...
3035

3136
class Loader(metaclass=ABCMeta):
@@ -38,7 +43,7 @@ class Loader(metaclass=ABCMeta):
3843

3944
class ResourceLoader(Loader):
4045
@abstractmethod
41-
def get_data(self, path: _Path) -> bytes: ...
46+
def get_data(self, path: str) -> bytes: ...
4247

4348
class InspectLoader(Loader):
4449
def is_package(self, fullname: str) -> bool: ...
@@ -47,40 +52,40 @@ class InspectLoader(Loader):
4752
def get_source(self, fullname: str) -> str | None: ...
4853
def exec_module(self, module: types.ModuleType) -> None: ...
4954
@staticmethod
50-
def source_to_code(data: bytes | str, path: str = ...) -> types.CodeType: ...
55+
def source_to_code(data: ReadableBuffer | str, path: str = ...) -> types.CodeType: ...
5156

5257
class ExecutionLoader(InspectLoader):
5358
@abstractmethod
54-
def get_filename(self, fullname: str) -> _Path: ...
59+
def get_filename(self, fullname: str) -> str: ...
5560

5661
class SourceLoader(ResourceLoader, ExecutionLoader, metaclass=ABCMeta):
57-
def path_mtime(self, path: _Path) -> float: ...
58-
def set_data(self, path: _Path, data: bytes) -> None: ...
62+
def path_mtime(self, path: str) -> float: ...
63+
def set_data(self, path: str, data: bytes) -> None: ...
5964
def get_source(self, fullname: str) -> str | None: ...
60-
def path_stats(self, path: _Path) -> Mapping[str, Any]: ...
65+
def path_stats(self, path: str) -> Mapping[str, Any]: ...
6166

6267
# Please keep in sync with sys._MetaPathFinder
6368
class MetaPathFinder(Finder):
64-
def find_module(self, fullname: str, path: Sequence[_Path] | None) -> Loader | None: ...
69+
def find_module(self, fullname: str, path: Sequence[str] | None) -> Loader | None: ...
6570
def invalidate_caches(self) -> None: ...
6671
# Not defined on the actual class, but expected to exist.
6772
def find_spec(
68-
self, fullname: str, path: Sequence[_Path] | None, target: types.ModuleType | None = ...
73+
self, fullname: str, path: Sequence[str] | None, target: types.ModuleType | None = ...
6974
) -> ModuleSpec | None: ...
7075

7176
class PathEntryFinder(Finder):
7277
def find_module(self, fullname: str) -> Loader | None: ...
73-
def find_loader(self, fullname: str) -> tuple[Loader | None, Sequence[_Path]]: ...
78+
def find_loader(self, fullname: str) -> tuple[Loader | None, Sequence[str]]: ...
7479
def invalidate_caches(self) -> None: ...
7580
# Not defined on the actual class, but expected to exist.
7681
def find_spec(self, fullname: str, target: types.ModuleType | None = ...) -> ModuleSpec | None: ...
7782

7883
class FileLoader(ResourceLoader, ExecutionLoader, metaclass=ABCMeta):
7984
name: str
80-
path: _Path
81-
def __init__(self, fullname: str, path: _Path) -> None: ...
82-
def get_data(self, path: _Path) -> bytes: ...
83-
def get_filename(self, name: str | None = ...) -> _Path: ...
85+
path: str
86+
def __init__(self, fullname: str, path: str) -> None: ...
87+
def get_data(self, path: str) -> bytes: ...
88+
def get_filename(self, name: str | None = ...) -> str: ...
8489
def load_module(self, name: str | None = ...) -> types.ModuleType: ...
8590

8691
class ResourceReader(metaclass=ABCMeta):

stdlib/importlib/machinery.pyi

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import importlib.abc
22
import sys
33
import types
4+
from _typeshed import ReadableBuffer
45
from collections.abc import Callable, Iterable, Sequence
56
from typing import Any
67

@@ -31,10 +32,10 @@ class ModuleSpec:
3132
class BuiltinImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
3233
# MetaPathFinder
3334
@classmethod
34-
def find_module(cls, fullname: str, path: Sequence[importlib.abc._Path] | None = ...) -> importlib.abc.Loader | None: ...
35+
def find_module(cls, fullname: str, path: Sequence[str] | None = ...) -> importlib.abc.Loader | None: ...
3536
@classmethod
3637
def find_spec(
37-
cls, fullname: str, path: Sequence[importlib.abc._Path] | None = ..., target: types.ModuleType | None = ...
38+
cls, fullname: str, path: Sequence[str] | None = ..., target: types.ModuleType | None = ...
3839
) -> ModuleSpec | None: ...
3940
# InspectLoader
4041
@classmethod
@@ -62,10 +63,10 @@ class BuiltinImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader)
6263
class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
6364
# MetaPathFinder
6465
@classmethod
65-
def find_module(cls, fullname: str, path: Sequence[importlib.abc._Path] | None = ...) -> importlib.abc.Loader | None: ...
66+
def find_module(cls, fullname: str, path: Sequence[str] | None = ...) -> importlib.abc.Loader | None: ...
6667
@classmethod
6768
def find_spec(
68-
cls, fullname: str, path: Sequence[importlib.abc._Path] | None = ..., target: types.ModuleType | None = ...
69+
cls, fullname: str, path: Sequence[str] | None = ..., target: types.ModuleType | None = ...
6970
) -> ModuleSpec | None: ...
7071
# InspectLoader
7172
@classmethod
@@ -91,10 +92,10 @@ class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
9192

9293
class WindowsRegistryFinder(importlib.abc.MetaPathFinder):
9394
@classmethod
94-
def find_module(cls, fullname: str, path: Sequence[importlib.abc._Path] | None = ...) -> importlib.abc.Loader | None: ...
95+
def find_module(cls, fullname: str, path: Sequence[str] | None = ...) -> importlib.abc.Loader | None: ...
9596
@classmethod
9697
def find_spec(
97-
cls, fullname: str, path: Sequence[importlib.abc._Path] | None = ..., target: types.ModuleType | None = ...
98+
cls, fullname: str, path: Sequence[str] | None = ..., target: types.ModuleType | None = ...
9899
) -> ModuleSpec | None: ...
99100

100101
class PathFinder:
@@ -113,10 +114,10 @@ class PathFinder:
113114

114115
@classmethod
115116
def find_spec(
116-
cls, fullname: str, path: Sequence[bytes | str] | None = ..., target: types.ModuleType | None = ...
117+
cls, fullname: str, path: Sequence[str] | None = ..., target: types.ModuleType | None = ...
117118
) -> ModuleSpec | None: ...
118119
@classmethod
119-
def find_module(cls, fullname: str, path: Sequence[bytes | str] | None = ...) -> importlib.abc.Loader | None: ...
120+
def find_module(cls, fullname: str, path: Sequence[str] | None = ...) -> importlib.abc.Loader | None: ...
120121

121122
SOURCE_SUFFIXES: list[str]
122123
DEBUG_BYTECODE_SUFFIXES: list[str]
@@ -135,13 +136,13 @@ class FileFinder(importlib.abc.PathEntryFinder):
135136
) -> Callable[[str], importlib.abc.PathEntryFinder]: ...
136137

137138
class SourceFileLoader(importlib.abc.FileLoader, importlib.abc.SourceLoader):
138-
def set_data(self, path: importlib.abc._Path, data: bytes, *, _mode: int = ...) -> None: ...
139+
def set_data(self, path: str, data: ReadableBuffer, *, _mode: int = ...) -> None: ...
139140

140141
class SourcelessFileLoader(importlib.abc.FileLoader, importlib.abc.SourceLoader): ...
141142

142143
class ExtensionFileLoader(importlib.abc.ExecutionLoader):
143-
def __init__(self, name: str, path: importlib.abc._Path) -> None: ...
144-
def get_filename(self, name: str | None = ...) -> importlib.abc._Path: ...
144+
def __init__(self, name: str, path: str) -> None: ...
145+
def get_filename(self, name: str | None = ...) -> str: ...
145146
def get_source(self, fullname: str) -> None: ...
146147
def create_module(self, spec: ModuleSpec) -> types.ModuleType: ...
147148
def exec_module(self, module: types.ModuleType) -> None: ...

stdlib/importlib/util.pyi

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import importlib.abc
22
import importlib.machinery
33
import types
4-
from _typeshed import StrOrBytesPath
4+
from _typeshed import ReadableBuffer, StrOrBytesPath
55
from collections.abc import Callable
66
from typing import Any
77
from typing_extensions import ParamSpec
@@ -17,7 +17,7 @@ MAGIC_NUMBER: bytes
1717

1818
def cache_from_source(path: str, debug_override: bool | None = ..., *, optimization: Any | None = ...) -> str: ...
1919
def source_from_cache(path: str) -> str: ...
20-
def decode_source(source_bytes: bytes) -> str: ...
20+
def decode_source(source_bytes: ReadableBuffer) -> str: ...
2121
def find_spec(name: str, package: str | None = ...) -> importlib.machinery.ModuleSpec | None: ...
2222
def spec_from_loader(
2323
name: str, loader: importlib.abc.Loader | None, *, origin: str | None = ..., is_package: bool | None = ...
@@ -37,4 +37,4 @@ class LazyLoader(importlib.abc.Loader):
3737
def factory(cls, loader: importlib.abc.Loader) -> Callable[..., LazyLoader]: ...
3838
def exec_module(self, module: types.ModuleType) -> None: ...
3939

40-
def source_hash(source_bytes: bytes) -> int: ...
40+
def source_hash(source_bytes: ReadableBuffer) -> int: ...

stubs/pyinstaller/PyInstaller/compat.pyi

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# https://pyinstaller.org/en/stable/hooks.html#module-PyInstaller.compat
22
from _typeshed import FileDescriptor, GenericPath, StrOrBytesPath
33
from collections.abc import Iterable
4-
from importlib.abc import _Path
54
from types import ModuleType
65
from typing import AnyStr, overload
76
from typing_extensions import Literal, TypeAlias
@@ -69,7 +68,7 @@ def exec_python(*args: str, **kwargs: str | None) -> str: ...
6968
def exec_python_rc(*args: str, **kwargs: str | None) -> int: ...
7069
def expand_path(path: GenericPath[AnyStr]) -> AnyStr: ...
7170
def getsitepackages(prefixes: Iterable[str] | None = ...) -> list[str]: ...
72-
def importlib_load_source(name: str, pathname: _Path) -> ModuleType: ...
71+
def importlib_load_source(name: str, pathname: str) -> ModuleType: ...
7372

7473
PY3_BASE_MODULES: set[str]
7574
PURE_PYTHON_MODULE_TYPES: set[str]

0 commit comments

Comments
 (0)