From 26957911883daf875b568811fadf3b9564d82800 Mon Sep 17 00:00:00 2001 From: raul-sq Date: Sun, 19 Jul 2026 14:54:33 +0200 Subject: [PATCH 1/2] Update _frozen_importlib_external for Python 3.15 --- stdlib/@tests/stubtest_allowlists/py315.txt | 8 -- stdlib/_frozen_importlib_external.pyi | 89 ++++++++++++++++----- 2 files changed, 68 insertions(+), 29 deletions(-) diff --git a/stdlib/@tests/stubtest_allowlists/py315.txt b/stdlib/@tests/stubtest_allowlists/py315.txt index 7354dac4dc90..0099a1092eca 100644 --- a/stdlib/@tests/stubtest_allowlists/py315.txt +++ b/stdlib/@tests/stubtest_allowlists/py315.txt @@ -4,14 +4,6 @@ _frozen_importlib.BuiltinImporter.load_module _frozen_importlib.FrozenImporter.load_module -_frozen_importlib_external.FileFinder.discover -_frozen_importlib_external.NamespaceLoader.load_module -_frozen_importlib_external.NamespacePath -_frozen_importlib_external.PathFinder.discover -_frozen_importlib_external.SourceFileLoader.source_to_code -_frozen_importlib_external.SourceLoader.source_to_code -_frozen_importlib_external._LoaderBasics.load_module -_frozen_importlib_external.cache_from_source _struct.Struct.pack_into _struct.pack _struct.pack_into diff --git a/stdlib/_frozen_importlib_external.pyi b/stdlib/_frozen_importlib_external.pyi index 907e8def9380..886bf0ee618e 100644 --- a/stdlib/_frozen_importlib_external.pyi +++ b/stdlib/_frozen_importlib_external.pyi @@ -6,7 +6,7 @@ import sys import types from _typeshed import ReadableBuffer, StrOrBytesPath, StrPath from _typeshed.importlib import LoaderProtocol -from collections.abc import Callable, Iterable, Mapping, MutableSequence, Sequence +from collections.abc import Callable, Iterable, Mapping, MutableSequence, Sequence, Iterator from importlib.machinery import ModuleSpec from importlib.metadata import DistributionFinder, PathDistribution from typing import Any, Final, Literal, overload @@ -23,13 +23,17 @@ else: MAGIC_NUMBER: Final[bytes] -@overload -@deprecated( - "The `debug_override` parameter is deprecated since Python 3.5; will be removed in Python 3.15. Use `optimization` instead." -) -def cache_from_source(path: StrPath, debug_override: bool, *, optimization: None = None) -> str: ... -@overload -def cache_from_source(path: StrPath, debug_override: None = None, *, optimization: Any | None = None) -> str: ... +if sys.version_info >= (3, 15): + def cache_from_source(path: StrPath, *, optimization: Any | None = None) -> str: ... + +else: + @overload + @deprecated( + "The `debug_override` parameter is deprecated since Python 3.5; will be removed in Python 3.15. Use `optimization` instead." + ) + def cache_from_source(path: StrPath, debug_override: bool, *, optimization: None = None) -> str: ... + @overload + def cache_from_source(path: StrPath, debug_override: None = None, *, optimization: Any | None = None) -> str: ... def source_from_cache(path: StrPath) -> str: ... def decode_source(source_bytes: ReadableBuffer) -> str: ... @@ -70,6 +74,10 @@ class PathFinder(importlib.abc.MetaPathFinder): @deprecated("Deprecated since Python 3.4; removed in Python 3.12. Use `find_spec()` instead.") def find_module(cls, fullname: str, path: Sequence[str] | None = None) -> importlib.abc.Loader | None: ... + if sys.version_info >= (3, 15): + @classmethod + def discover(cls, parent: ModuleSpec | None = None) -> Iterator[ModuleSpec]: ... + SOURCE_SUFFIXES: Final[list[str]] DEBUG_BYTECODE_SUFFIXES: Final = [".pyc"] OPTIMIZED_BYTECODE_SUFFIXES: Final = [".pyc"] @@ -83,21 +91,33 @@ class FileFinder(importlib.abc.PathEntryFinder): def path_hook( cls, *loader_details: tuple[type[importlib.abc.Loader], list[str]] ) -> Callable[[str], importlib.abc.PathEntryFinder]: ... + if sys.version_info >= (3, 15): + def discover(self, parent: ModuleSpec | None = None) -> Iterator[ModuleSpec]: ... class _LoaderBasics: def is_package(self, fullname: str) -> bool: ... def create_module(self, spec: ModuleSpec) -> types.ModuleType | None: ... def exec_module(self, module: types.ModuleType) -> None: ... - def load_module(self, fullname: str) -> types.ModuleType: ... + if sys.version_info < (3, 15): + @deprecated("Deprecated since Python 3.4; removed in Python 3.15. Use `exec_module()` instead.") + def load_module(self, fullname: str) -> types.ModuleType: ... class SourceLoader(_LoaderBasics): def path_mtime(self, path: str) -> float: ... def set_data(self, path: str, data: bytes) -> None: ... def get_source(self, fullname: str) -> str | None: ... def path_stats(self, path: str) -> Mapping[str, Any]: ... - def source_to_code( - self, data: ReadableBuffer | str | _ast.Module | _ast.Expression | _ast.Interactive, path: bytes | StrPath - ) -> types.CodeType: ... + if sys.version_info >= (3, 15): + def source_to_code( + self, + data: ReadableBuffer | str | _ast.Module | _ast.Expression | _ast.Interactive, + path: bytes | StrPath, + fullname: str | None = None, + ) -> types.CodeType: ... + else: + def source_to_code( + self, data: ReadableBuffer | str | _ast.Module | _ast.Expression | _ast.Interactive, path: bytes | StrPath + ) -> types.CodeType: ... def get_code(self, fullname: str) -> types.CodeType | None: ... class FileLoader: @@ -112,13 +132,23 @@ class FileLoader: class SourceFileLoader(importlib.abc.FileLoader, FileLoader, importlib.abc.SourceLoader, SourceLoader): # type: ignore[misc] # incompatible method arguments in base classes def set_data(self, path: str, data: ReadableBuffer, *, _mode: int = 0o666) -> None: ... def path_stats(self, path: str) -> Mapping[str, Any]: ... - def source_to_code( # type: ignore[override] # incompatible with InspectLoader.source_to_code - self, - data: ReadableBuffer | str | _ast.Module | _ast.Expression | _ast.Interactive, - path: bytes | StrPath, - *, - _optimize: int = -1, - ) -> types.CodeType: ... + if sys.version_info >= (3, 15): + def source_to_code( # type: ignore[override] # incompatible with InspectLoader.source_to_code + self, + data: ReadableBuffer | str | _ast.Module | _ast.Expression | _ast.Interactive, + path: bytes | StrPath, + fullname: str | None = None, + *, + _optimize: int = -1, + ) -> types.CodeType: ... + else: + def source_to_code( # type: ignore[override] # incompatible with InspectLoader.source_to_code + self, + data: ReadableBuffer | str | _ast.Module | _ast.Expression | _ast.Interactive, + path: bytes | StrPath, + *, + _optimize: int = -1, + ) -> types.CodeType: ... class SourcelessFileLoader(importlib.abc.FileLoader, FileLoader, _LoaderBasics): def get_code(self, fullname: str) -> types.CodeType | None: ... @@ -134,6 +164,20 @@ class ExtensionFileLoader(FileLoader, _LoaderBasics, importlib.abc.ExecutionLoad def __eq__(self, other: object) -> bool: ... def __hash__(self) -> int: ... +if sys.version_info >= (3, 15): + class NamespacePath: + def __init__( + self, name: str, path: MutableSequence[str], path_finder: Callable[[str, tuple[str, ...]], ModuleSpec] + ) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def __getitem__(self, index: int) -> str: ... + def __setitem__(self, index: int, path: str) -> None: ... + def __len__(self) -> int: ... + def __contains__(self, item: str) -> bool: ... + def append(self, item: str) -> None: ... + + _NamespacePath = NamespacePath + if sys.version_info >= (3, 11): class NamespaceLoader(importlib.abc.InspectLoader): def __init__( @@ -144,8 +188,9 @@ if sys.version_info >= (3, 11): def get_code(self, fullname: str) -> types.CodeType: ... def create_module(self, spec: ModuleSpec) -> None: ... def exec_module(self, module: types.ModuleType) -> None: ... - @deprecated("Deprecated since Python 3.10; will be removed in Python 3.15. Use `exec_module()` instead.") - def load_module(self, fullname: str) -> types.ModuleType: ... + if sys.version_info < (3, 15): + @deprecated("Deprecated since Python 3.10; removed in Python 3.15. Use `exec_module()` instead.") + def load_module(self, fullname: str) -> types.ModuleType: ... def get_resource_reader(self, module: types.ModuleType) -> importlib.readers.NamespaceReader: ... if sys.version_info < (3, 12): @staticmethod @@ -178,3 +223,5 @@ else: if sys.version_info >= (3, 13): class AppleFrameworkLoader(ExtensionFileLoader, importlib.abc.ExecutionLoader): ... + + From f2bf58fe72688147eceef8364294c79d660c4f15 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 19 Jul 2026 12:59:42 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stdlib/_frozen_importlib_external.pyi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stdlib/_frozen_importlib_external.pyi b/stdlib/_frozen_importlib_external.pyi index 886bf0ee618e..d6138be5725a 100644 --- a/stdlib/_frozen_importlib_external.pyi +++ b/stdlib/_frozen_importlib_external.pyi @@ -6,7 +6,7 @@ import sys import types from _typeshed import ReadableBuffer, StrOrBytesPath, StrPath from _typeshed.importlib import LoaderProtocol -from collections.abc import Callable, Iterable, Mapping, MutableSequence, Sequence, Iterator +from collections.abc import Callable, Iterable, Iterator, Mapping, MutableSequence, Sequence from importlib.machinery import ModuleSpec from importlib.metadata import DistributionFinder, PathDistribution from typing import Any, Final, Literal, overload @@ -118,6 +118,7 @@ class SourceLoader(_LoaderBasics): def source_to_code( self, data: ReadableBuffer | str | _ast.Module | _ast.Expression | _ast.Interactive, path: bytes | StrPath ) -> types.CodeType: ... + def get_code(self, fullname: str) -> types.CodeType | None: ... class FileLoader: @@ -191,6 +192,7 @@ if sys.version_info >= (3, 11): if sys.version_info < (3, 15): @deprecated("Deprecated since Python 3.10; removed in Python 3.15. Use `exec_module()` instead.") def load_module(self, fullname: str) -> types.ModuleType: ... + def get_resource_reader(self, module: types.ModuleType) -> importlib.readers.NamespaceReader: ... if sys.version_info < (3, 12): @staticmethod @@ -223,5 +225,3 @@ else: if sys.version_info >= (3, 13): class AppleFrameworkLoader(ExtensionFileLoader, importlib.abc.ExecutionLoader): ... - -