Skip to content

Commit 4040bf0

Browse files
committed
Add more Python 3.15 stdlib updates
1 parent 9f3a260 commit 4040bf0

11 files changed

Lines changed: 143 additions & 40 deletions

File tree

stdlib/@tests/stubtest_allowlists/py315.txt

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ _frozen_importlib_external.SourceFileLoader.source_to_code
1212
_frozen_importlib_external.SourceLoader.source_to_code
1313
_frozen_importlib_external._LoaderBasics.load_module
1414
_frozen_importlib_external.cache_from_source
15-
_interpqueues.create
16-
_interpqueues.put
1715
_pyrepl.base_eventqueue
1816
_pyrepl.commands
1917
_pyrepl.completing_reader
@@ -62,8 +60,6 @@ codecs.namereplace_errors
6260
codecs.replace_errors
6361
codecs.strict_errors
6462
codecs.xmlcharrefreplace_errors
65-
collections.Counter.__ixor__
66-
collections.Counter.__xor__
6763
concurrent.interpreters._crossinterp.UNBOUND_ERROR
6864
concurrent.interpreters._crossinterp.UNBOUND_REMOVE
6965
concurrent.interpreters._crossinterp.UnboundItem.singleton
@@ -137,7 +133,6 @@ math.issubnormal
137133
math.signbit
138134
multiprocessing.context.BaseContext.set_forkserver_preload
139135
multiprocessing.forkserver.ForkServer.set_forkserver_preload
140-
multiprocessing.forkserver.main
141136
multiprocessing.managers.BaseListProxy.clear
142137
multiprocessing.managers.BaseListProxy.copy
143138
multiprocessing.managers._BaseDictProxy.__iter__
@@ -209,19 +204,8 @@ sre_parse
209204
symtable.symtable
210205
sys.__jit
211206
sys._monitoring
212-
sys.abi_info
213-
sys.get_lazy_imports
214-
sys.get_lazy_imports_filter
215207
sys.last_exc
216-
sys.lazy_modules
217-
sys.set_lazy_imports
218-
sys.set_lazy_imports_filter
219208
threading.Condition.locked
220-
threading.__all__
221-
threading.concurrent_tee
222-
threading.serialize_iterator
223-
threading.synchronized_iterator
224-
timeit.Timer.autorange
225209
tkinter.Grid.content
226210
tkinter.Grid.grid_content
227211
tkinter.Image.__iter__
@@ -238,20 +222,13 @@ tkinter.Text.search
238222
tkinter.Text.search_all
239223
tkinter.font.Font.__iter__
240224
tkinter.simpledialog.__all__
241-
types.AsyncGeneratorType.ag_state
242-
types.CodeType.co_lnotab
243-
types.CoroutineType.cr_state
244-
types.FrameLocalsProxyType
245-
types.GeneratorType.gi_state
246-
types.LazyImportType
247225
types.MappingProxyType.get
248226
types.SimpleNamespace.__delattr__
249227
types.SimpleNamespace.__setattr__
250228
types.UnionType.__class_getitem__
251229
types.UnionType.__mro_entries__
252230
types.UnionType.__name__
253231
types.UnionType.__qualname__
254-
types.__all__
255232
typing.LiteralString
256233
typing.NewType.__mro_entries__
257234
typing.ParamSpec.__mro_entries__
@@ -274,6 +251,4 @@ urllib.parse.urlsplit
274251
urllib.parse.urlunparse
275252
urllib.parse.urlunsplit
276253
xml.etree.ElementTree.__all__
277-
xml.is_valid_name
278-
xml.utils
279254
zipimport.zipimporter.load_module

stdlib/_interpqueues.pyi

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import sys
12
from typing import Any, Literal, SupportsIndex, TypeAlias
23

34
_UnboundOp: TypeAlias = Literal[1, 2, 3]
@@ -6,13 +7,25 @@ class QueueError(RuntimeError): ...
67
class QueueNotFoundError(QueueError): ...
78

89
def bind(qid: SupportsIndex) -> None: ...
9-
def create(maxsize: SupportsIndex, fmt: SupportsIndex, unboundop: _UnboundOp) -> int: ...
10+
11+
if sys.version_info >= (3, 15):
12+
def create(maxsize: SupportsIndex, unboundop: SupportsIndex = -1, fallback: SupportsIndex = -1) -> int: ...
13+
14+
else:
15+
def create(maxsize: SupportsIndex, fmt: SupportsIndex, unboundop: _UnboundOp) -> int: ...
16+
1017
def destroy(qid: SupportsIndex) -> None: ...
1118
def get(qid: SupportsIndex) -> tuple[Any, int, _UnboundOp | None]: ...
1219
def get_count(qid: SupportsIndex) -> int: ...
1320
def get_maxsize(qid: SupportsIndex) -> int: ...
1421
def get_queue_defaults(qid: SupportsIndex) -> tuple[int, _UnboundOp]: ...
1522
def is_full(qid: SupportsIndex) -> bool: ...
1623
def list_all() -> list[tuple[int, int, _UnboundOp]]: ...
17-
def put(qid: SupportsIndex, obj: Any, fmt: SupportsIndex, unboundop: _UnboundOp) -> None: ...
24+
25+
if sys.version_info >= (3, 15):
26+
def put(qid: SupportsIndex, obj: Any, unboundop: SupportsIndex = -1, fallback: SupportsIndex = -1) -> None: ...
27+
28+
else:
29+
def put(qid: SupportsIndex, obj: Any, fmt: SupportsIndex, unboundop: _UnboundOp) -> None: ...
30+
1831
def release(qid: SupportsIndex) -> None: ...

stdlib/collections/__init__.pyi

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,13 +315,18 @@ class Counter(dict[_T, int], Generic[_T]):
315315
def __sub__(self, other: Counter[_T]) -> Counter[_T]: ...
316316
def __and__(self, other: Counter[_T]) -> Counter[_T]: ...
317317
def __or__(self, other: Counter[_S]) -> Counter[_T | _S]: ... # type: ignore[override]
318+
if sys.version_info >= (3, 15):
319+
def __xor__(self, other: Counter[_S]) -> Counter[_T | _S]: ... # type: ignore[override]
320+
318321
def __pos__(self) -> Counter[_T]: ...
319322
def __neg__(self) -> Counter[_T]: ...
320323
# several type: ignores because __iadd__ is supposedly incompatible with __add__, etc.
321324
def __iadd__(self, other: SupportsItems[_T, int]) -> Self: ... # type: ignore[misc]
322325
def __isub__(self, other: SupportsItems[_T, int]) -> Self: ...
323326
def __iand__(self, other: SupportsItems[_T, int]) -> Self: ...
324327
def __ior__(self, other: SupportsItems[_T, int]) -> Self: ... # type: ignore[override,misc]
328+
if sys.version_info >= (3, 15):
329+
def __ixor__(self, other: Counter[_T]) -> Self: ... # type: ignore[misc]
325330

326331
# The pure-Python implementations of the "views" classes
327332
# These are exposed at runtime in `collections/__init__.py`

stdlib/multiprocessing/forkserver.pyi

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,20 @@ class ForkServer:
1515
def connect_to_new_process(self, fds: Sequence[int]) -> tuple[int, int]: ...
1616
def ensure_running(self) -> None: ...
1717

18-
if sys.version_info >= (3, 14):
18+
if sys.version_info >= (3, 15):
19+
def main(
20+
listener_fd: int | None,
21+
alive_r: FileDescriptorLike,
22+
preload: Sequence[str],
23+
main_path: str | None = None,
24+
sys_path: list[str] | None = None,
25+
*,
26+
sys_argv: list[str] | None = None,
27+
authkey_r: int | None = None,
28+
on_error: str = "ignore",
29+
) -> None: ...
30+
31+
elif sys.version_info >= (3, 14):
1932
# `sys_argv` parameter added in Python 3.14.3
2033
def main(
2134
listener_fd: int | None,

stdlib/sys/__init__.pyi

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,30 @@ from _typeshed.importlib import MetaPathFinderProtocol, PathEntryFinderProtocol
44
from builtins import object as _object
55
from collections.abc import AsyncGenerator, Callable, Sequence
66
from io import TextIOWrapper
7-
from types import FrameType, ModuleType, TracebackType
7+
from types import FrameType, ModuleType, SimpleNamespace, TracebackType
88
from typing import Any, Final, Literal, NoReturn, Protocol, TextIO, TypeAlias, TypeVar, final, overload, type_check_only
99
from typing_extensions import LiteralString, deprecated
1010

1111
_T = TypeVar("_T")
12+
_LazyImportMode: TypeAlias = Literal["normal", "all", "none"]
13+
_LazyImportFilter: TypeAlias = Callable[[str, str, tuple[str, ...] | None], bool]
1214

1315
# see https://github.com/python/typeshed/issues/8513#issue-1333671093 for the rationale behind this alias
1416
_ExitCode: TypeAlias = str | int | None
1517

18+
if sys.version_info >= (3, 15):
19+
@type_check_only
20+
class _AbiInfo(SimpleNamespace):
21+
pointer_bits: int
22+
free_threaded: bool
23+
debug: bool
24+
byteorder: Literal["little", "big"]
25+
1626
# ----- sys variables -----
1727
if sys.platform != "win32":
1828
abiflags: str
29+
if sys.version_info >= (3, 15):
30+
abi_info: _AbiInfo
1931
argv: list[str]
2032
base_exec_prefix: str
2133
base_prefix: str
@@ -40,6 +52,8 @@ maxsize: int
4052
maxunicode: int
4153
meta_path: list[MetaPathFinderProtocol]
4254
modules: dict[str, ModuleType]
55+
if sys.version_info >= (3, 15):
56+
lazy_modules: dict[str, set[str]]
4357
orig_argv: list[str]
4458
path: list[str]
4559
path_hooks: list[Callable[[str], PathEntryFinderProtocol]]
@@ -376,6 +390,11 @@ if sys.platform != "win32":
376390

377391
def getfilesystemencoding() -> LiteralString: ...
378392
def getfilesystemencodeerrors() -> LiteralString: ...
393+
394+
if sys.version_info >= (3, 15):
395+
def get_lazy_imports() -> _LazyImportMode: ...
396+
def get_lazy_imports_filter() -> _LazyImportFilter | None: ...
397+
379398
def getrefcount(object: Any, /) -> int: ...
380399
def getrecursionlimit() -> int: ...
381400
def getsizeof(obj: object, default: int = ...) -> int: ...
@@ -486,6 +505,10 @@ def set_coroutine_origin_tracking_depth(depth: int) -> None: ...
486505
def set_int_max_str_digits(maxdigits: int) -> None: ...
487506
def get_int_max_str_digits() -> int: ...
488507

508+
if sys.version_info >= (3, 15):
509+
def set_lazy_imports(mode: _LazyImportMode) -> None: ...
510+
def set_lazy_imports_filter(filter: _LazyImportFilter | None) -> None: ...
511+
489512
if sys.version_info >= (3, 12):
490513
if sys.version_info >= (3, 13):
491514
def getunicodeinternedsize(*, _only_immortal: bool = False) -> int: ...

stdlib/tarfile.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,8 @@ class TarFile:
132132
errorlevel: Literal[0, 1, 2]
133133
offset: int # undocumented
134134
extraction_filter: _FilterFunction | None
135-
if sys.version_info >= (3, 13):
136-
stream: bool
137135
if sys.version_info >= (3, 15):
136+
stream: bool
138137
def __init__(
139138
self,
140139
name: StrOrBytesPath | None = None,
@@ -154,6 +153,7 @@ class TarFile:
154153
mtime: float | None = None,
155154
) -> None: ...
156155
elif sys.version_info >= (3, 13):
156+
stream: bool
157157
def __init__(
158158
self,
159159
name: StrOrBytesPath | None = None,

stdlib/threading.pyi

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import _thread
22
import sys
33
from _thread import _ExceptHookArgs, get_native_id as get_native_id
44
from _typeshed import ProfileFunction, TraceFunction
5-
from collections.abc import Callable, Iterable, Mapping
5+
from collections.abc import Callable, Iterable, Iterator, Mapping
66
from contextvars import Context
77
from types import TracebackType
88
from typing import Any, Final, TypeVar, final
9-
from typing_extensions import deprecated
9+
from typing_extensions import Self, deprecated
1010

1111
_T = TypeVar("_T")
1212

@@ -42,6 +42,9 @@ __all__ = [
4242
if sys.version_info >= (3, 12):
4343
__all__ += ["setprofile_all_threads", "settrace_all_threads"]
4444

45+
if sys.version_info >= (3, 15):
46+
__all__ += ["concurrent_tee", "serialize_iterator", "synchronized_iterator"]
47+
4548
_profile_hook: ProfileFunction | None
4649

4750
def active_count() -> int: ...
@@ -62,6 +65,20 @@ if sys.version_info >= (3, 12):
6265

6366
def gettrace() -> TraceFunction | None: ...
6467
def getprofile() -> ProfileFunction | None: ...
68+
69+
if sys.version_info >= (3, 15):
70+
@final
71+
class serialize_iterator(Iterator[_T]):
72+
def __init__(self, iterable: Iterable[_T]) -> None: ...
73+
def __iter__(self) -> Self: ...
74+
def __next__(self) -> _T: ...
75+
def send(self, value: Any, /) -> _T: ...
76+
def throw(self, typ: type[BaseException], val: BaseException | object = ..., tb: TracebackType | None = ...) -> _T: ...
77+
def close(self) -> None: ...
78+
79+
def synchronized_iterator(func: Callable[..., Iterable[_T]]) -> Callable[..., Iterator[_T]]: ...
80+
def concurrent_tee(iterable: Iterable[_T], n: int = 2) -> tuple[Iterator[_T], ...]: ...
81+
6582
def stack_size(size: int = 0, /) -> int: ...
6683

6784
TIMEOUT_MAX: Final[float]

stdlib/timeit.pyi

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import sys
12
import time
23
from collections.abc import Callable, Sequence
34
from typing import IO, Any, TypeAlias
@@ -20,7 +21,12 @@ class Timer:
2021
def print_exc(self, file: IO[str] | None = None) -> None: ...
2122
def timeit(self, number: int = 1000000) -> float: ...
2223
def repeat(self, repeat: int = 5, number: int = 1000000) -> list[float]: ...
23-
def autorange(self, callback: Callable[[int, float], object] | None = None) -> tuple[int, float]: ...
24+
if sys.version_info >= (3, 15):
25+
def autorange(
26+
self, callback: Callable[[int, float], object] | None = None, target_time: float = 0.2
27+
) -> tuple[int, float]: ...
28+
else:
29+
def autorange(self, callback: Callable[[int, float], object] | None = None) -> tuple[int, float]: ...
2430

2531
def timeit(
2632
stmt: _Stmt = "pass",

0 commit comments

Comments
 (0)