Skip to content

Commit 3ec6587

Browse files
authored
Merge branch 'main' into importlib.resources
2 parents 82bf40e + 9bf9d15 commit 3ec6587

File tree

22 files changed

+216
-116
lines changed

22 files changed

+216
-116
lines changed

stdlib/@tests/stubtest_allowlists/common.txt

-1
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,6 @@ types.MethodType.__closure__ # read-only but not actually a property; stubtest
500500
types.MethodType.__defaults__ # read-only but not actually a property; stubtest thinks it doesn't exist.
501501
types.ModuleType.__dict__ # read-only but not actually a property; stubtest thinks it's a mutable attribute.
502502
types.ModuleType.__getattr__ # this doesn't exist at runtime
503-
types.SimpleNamespace.__init__ # class doesn't accept positional arguments but has default C signature
504503

505504
# sys attributes that are not always defined
506505
sys.gettotalrefcount # Available on python debug builds

stdlib/@tests/stubtest_allowlists/py310.txt

+1
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ pkgutil.ImpImporter\..*
249249
pkgutil.ImpLoader\..*
250250

251251
types.CodeType.replace # stubtest thinks default values are None but None doesn't work at runtime
252+
types.SimpleNamespace.__init__ # class doesn't accept positional arguments but has default C signature
252253

253254
# These enums derive from (str, Enum)
254255
pstats.SortKey.__new__

stdlib/@tests/stubtest_allowlists/py311.txt

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ inspect._ParameterKind.description # Still exists, but stubtest can't see it
135135
os.PathLike.__class_getitem__ # PathLike is a protocol; we don't expect all PathLike classes to implement class_getitem
136136
poplib.POP3_SSL.stls # bad declaration of inherited function. See poplib.pyi
137137
types.GenericAlias.__call__ # Would be complicated to fix properly, Any could silence problems. #6392
138+
types.SimpleNamespace.__init__ # class doesn't accept positional arguments but has default C signature
138139
types.GenericAlias.__getattr__
139140
types.GenericAlias.__mro_entries__
140141
weakref.ProxyType.__reversed__ # Doesn't really exist

stdlib/@tests/stubtest_allowlists/py312.txt

+3
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ typing.ParamSpecKwargs.__mro_entries__
184184
typing.TypeVar.__mro_entries__
185185
typing.TypeVarTuple.__mro_entries__
186186

187+
# class doesn't accept positional arguments but has default C signature
188+
types.SimpleNamespace.__init__
189+
187190
# TODO: mypy should infer that this attribute is inherited from builtins.type;
188191
# why doesn't it infer this?
189192
typing.SupportsAbs.__type_params__

stdlib/@tests/stubtest_allowlists/py313.txt

-35
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ _ctypes.pointer
1212
_ctypes.sizeof
1313
_thread.interrupt_main
1414
_thread.lock
15-
_thread.stack_size
1615
_thread.start_joinable_thread
17-
_thread.start_new_thread
1816
_tkinter.create
1917
asyncio.AbstractEventLoop.create_server
2018
asyncio.AbstractServer.abort_clients
@@ -92,34 +90,15 @@ importlib.metadata._meta.SimplePath.exists
9290
importlib.metadata._meta.SimplePath.read_bytes
9391
importlib.metadata._meta.SimplePath.read_text
9492
importlib.metadata.diagnose
95-
mailbox.Maildir.add_flag
96-
mailbox.Maildir.get_flags
97-
mailbox.Maildir.get_info
98-
mailbox.Maildir.remove_flag
99-
mailbox.Maildir.set_flags
100-
mailbox.Maildir.set_info
10193
os.path.splitroot
102-
pdb.Pdb.MAX_CHAINED_EXCEPTION_DEPTH
103-
pdb.Pdb.completedefault
104-
pdb.Pdb.completenames
105-
pdb.Pdb.do_exceptions
106-
pdb.Pdb.interaction
107-
pdb.Pdb.message
108-
pdb.Pdb.user_opcode
10994
# `__replace__` to be special cased in dataclasses
11095
pstats.FunctionProfile.__replace__
11196
pstats.StatsProfile.__replace__
112-
pydoc.pager
113-
pydoc.pipepager
114-
pydoc.plainpager
115-
pydoc.tempfilepager
116-
pydoc.ttypager
11797
site.gethistoryfile
11898
site.register_readline
11999
sre_compile.SRE_FLAG_TEMPLATE
120100
sre_constants.SRE_FLAG_TEMPLATE
121101
sre_parse.SRE_FLAG_TEMPLATE
122-
threading.stack_size
123102
tkinter.Misc.after_info
124103
tkinter.Misc.busy
125104
tkinter.Misc.busy_cget
@@ -148,20 +127,6 @@ tkinter.Text.count
148127
tkinter.Wm.wm_attributes
149128
trace.CoverageResults.write_results
150129
types.MappingProxyType.get
151-
unittest.IsolatedAsyncioTestCase.loop_factory
152-
unittest.TestProgram.usageExit
153-
unittest.__all__
154-
unittest.async_case.IsolatedAsyncioTestCase.loop_factory
155-
unittest.findTestCases
156-
unittest.getTestCaseNames
157-
unittest.loader.findTestCases
158-
unittest.loader.getTestCaseNames
159-
unittest.loader.makeSuite
160-
unittest.main.TestProgram.usageExit
161-
unittest.makeSuite
162-
unittest.mock.NonCallableMock._calls_repr
163-
unittest.mock.ThreadingMock
164-
unittest.mock.__all__
165130
zipfile.CompleteDirs.inject
166131
zipfile.ZipInfo.compress_level
167132
zipfile._path.CompleteDirs.inject

stdlib/@tests/stubtest_allowlists/py38.txt

+1
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ types.GetSetDescriptorType.__get__
206206
types.MemberDescriptorType.__get__
207207
types.MethodDescriptorType.__get__
208208
types.WrapperDescriptorType.__get__
209+
types.SimpleNamespace.__init__ # class doesn't accept positional arguments but has default C signature
209210
multiprocessing.managers.DictProxy.clear
210211
multiprocessing.managers.DictProxy.popitem
211212

stdlib/@tests/stubtest_allowlists/py39.txt

+1
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ pkgutil.ImpImporter\..*
223223
pkgutil.ImpLoader\..*
224224

225225
types.CodeType.replace # stubtest thinks default values are None but None doesn't work at runtime
226+
types.SimpleNamespace.__init__ # class doesn't accept positional arguments but has default C signature
226227

227228
# These enums derive from (str, Enum)
228229
pstats.SortKey.__new__
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import sys
2+
import types
3+
from collections import UserDict
4+
5+
# test `types.SimpleNamespace`
6+
7+
# Valid:
8+
types.SimpleNamespace()
9+
types.SimpleNamespace(x=1, y=2)
10+
11+
if sys.version_info >= (3, 13):
12+
types.SimpleNamespace(())
13+
types.SimpleNamespace([])
14+
types.SimpleNamespace([("x", "y"), ("z", 1)])
15+
types.SimpleNamespace({})
16+
types.SimpleNamespace(UserDict({"x": 1, "y": 2}))
17+
18+
19+
# Invalid:
20+
types.SimpleNamespace(1) # type: ignore
21+
types.SimpleNamespace([1]) # type: ignore
22+
types.SimpleNamespace([["x"]]) # type: ignore
23+
types.SimpleNamespace(**{1: 2}) # type: ignore
24+
types.SimpleNamespace({1: 2}) # type: ignore
25+
types.SimpleNamespace([[1, 2]]) # type: ignore
26+
types.SimpleNamespace(UserDict({1: 2})) # type: ignore
27+
types.SimpleNamespace([[[], 2]]) # type: ignore

stdlib/_thread.pyi

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ error = RuntimeError
1313
def _count() -> int: ...
1414
@final
1515
class LockType:
16-
def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ...
16+
def acquire(self, blocking: bool = True, timeout: float = -1) -> bool: ...
1717
def release(self) -> None: ...
1818
def locked(self) -> bool: ...
1919
def __enter__(self) -> bool: ...
@@ -22,14 +22,14 @@ class LockType:
2222
) -> None: ...
2323

2424
@overload
25-
def start_new_thread(function: Callable[[Unpack[_Ts]], object], args: tuple[Unpack[_Ts]]) -> int: ...
25+
def start_new_thread(function: Callable[[Unpack[_Ts]], object], args: tuple[Unpack[_Ts]], /) -> int: ...
2626
@overload
27-
def start_new_thread(function: Callable[..., object], args: tuple[Any, ...], kwargs: dict[str, Any]) -> int: ...
27+
def start_new_thread(function: Callable[..., object], args: tuple[Any, ...], kwargs: dict[str, Any], /) -> int: ...
2828
def interrupt_main() -> None: ...
2929
def exit() -> NoReturn: ...
3030
def allocate_lock() -> LockType: ...
3131
def get_ident() -> int: ...
32-
def stack_size(size: int = ...) -> int: ...
32+
def stack_size(size: int = 0, /) -> int: ...
3333

3434
TIMEOUT_MAX: float
3535

stdlib/mailbox.pyi

+8
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@ class Maildir(Mailbox[MaildirMessage]):
115115
def get_message(self, key: str) -> MaildirMessage: ...
116116
def get_bytes(self, key: str) -> bytes: ...
117117
def get_file(self, key: str) -> _ProxyFile[bytes]: ...
118+
if sys.version_info >= (3, 13):
119+
def get_info(self, key: str) -> str: ...
120+
def set_info(self, key: str, info: str) -> None: ...
121+
def get_flags(self, key: str) -> str: ...
122+
def set_flags(self, key: str, flags: str) -> None: ...
123+
def add_flag(self, key: str, flag: str) -> None: ...
124+
def remove_flag(self, key: str, flag: str) -> None: ...
125+
118126
def iterkeys(self) -> Iterator[str]: ...
119127
def __contains__(self, key: str) -> bool: ...
120128
def __len__(self) -> int: ...

stdlib/pdb.pyi

+26-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ from cmd import Cmd
55
from collections.abc import Callable, Iterable, Mapping, Sequence
66
from inspect import _SourceObjectType
77
from types import CodeType, FrameType, TracebackType
8-
from typing import IO, Any, ClassVar, TypeVar
8+
from typing import IO, Any, ClassVar, Final, TypeVar
99
from typing_extensions import ParamSpec, Self
1010

1111
__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace", "post_mortem", "help"]
@@ -30,6 +30,9 @@ class Pdb(Bdb, Cmd):
3030

3131
commands_resuming: ClassVar[list[str]]
3232

33+
if sys.version_info >= (3, 13):
34+
MAX_CHAINED_EXCEPTION_DEPTH: Final = 999
35+
3336
aliases: dict[str, str]
3437
mainpyfile: str
3538
_wait_for_mainpyfile: bool
@@ -58,8 +61,16 @@ class Pdb(Bdb, Cmd):
5861
if sys.version_info < (3, 11):
5962
def execRcLines(self) -> None: ...
6063

64+
if sys.version_info >= (3, 13):
65+
user_opcode = Bdb.user_line
66+
6167
def bp_commands(self, frame: FrameType) -> bool: ...
62-
def interaction(self, frame: FrameType | None, traceback: TracebackType | None) -> None: ...
68+
69+
if sys.version_info >= (3, 13):
70+
def interaction(self, frame: FrameType | None, tb_or_exc: TracebackType | BaseException | None) -> None: ...
71+
else:
72+
def interaction(self, frame: FrameType | None, traceback: TracebackType | None) -> None: ...
73+
6374
def displayhook(self, obj: object) -> None: ...
6475
def handle_command_def(self, line: str) -> bool: ...
6576
def defaultFile(self) -> str: ...
@@ -72,6 +83,9 @@ class Pdb(Bdb, Cmd):
7283
if sys.version_info < (3, 11):
7384
def _runscript(self, filename: str) -> None: ...
7485

86+
if sys.version_info >= (3, 13):
87+
def completedefault(self, text: str, line: str, begidx: int, endidx: int) -> list[str]: ... # type: ignore[override]
88+
7589
def do_commands(self, arg: str) -> bool | None: ...
7690
def do_break(self, arg: str, temporary: bool = ...) -> bool | None: ...
7791
def do_tbreak(self, arg: str) -> bool | None: ...
@@ -81,6 +95,9 @@ class Pdb(Bdb, Cmd):
8195
def do_ignore(self, arg: str) -> bool | None: ...
8296
def do_clear(self, arg: str) -> bool | None: ...
8397
def do_where(self, arg: str) -> bool | None: ...
98+
if sys.version_info >= (3, 13):
99+
def do_exceptions(self, arg: str) -> bool | None: ...
100+
84101
def do_up(self, arg: str) -> bool | None: ...
85102
def do_down(self, arg: str) -> bool | None: ...
86103
def do_until(self, arg: str) -> bool | None: ...
@@ -125,8 +142,14 @@ class Pdb(Bdb, Cmd):
125142
def help_exec(self) -> None: ...
126143
def help_pdb(self) -> None: ...
127144
def sigint_handler(self, signum: signal.Signals, frame: FrameType) -> None: ...
128-
def message(self, msg: str) -> None: ...
145+
if sys.version_info >= (3, 13):
146+
def message(self, msg: str, end: str = "\n") -> None: ...
147+
else:
148+
def message(self, msg: str) -> None: ...
149+
129150
def error(self, msg: str) -> None: ...
151+
if sys.version_info >= (3, 13):
152+
def completenames(self, text: str, line: str, begidx: int, endidx: int) -> list[str]: ... # type: ignore[override]
130153
if sys.version_info >= (3, 12):
131154
def set_convenience_variable(self, frame: FrameType, name: str, value: Any) -> None: ...
132155

stdlib/pydoc.pyi

+30-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ from builtins import list as _list # "list" conflicts with method name
55
from collections.abc import Callable, Container, Mapping, MutableMapping
66
from reprlib import Repr
77
from types import MethodType, ModuleType, TracebackType
8-
from typing import IO, Any, AnyStr, Final, NoReturn, TypeVar
8+
from typing import IO, Any, AnyStr, Final, NoReturn, Protocol, TypeVar
99
from typing_extensions import TypeGuard
1010

1111
__all__ = ["help"]
@@ -17,6 +17,9 @@ __date__: Final[str]
1717
__version__: Final[str]
1818
__credits__: Final[str]
1919

20+
class _Pager(Protocol):
21+
def __call__(self, text: str, title: str = "") -> None: ...
22+
2023
def pathdirs() -> list[str]: ...
2124
def getdoc(object: object) -> str: ...
2225
def splitdoc(doc: AnyStr) -> tuple[AnyStr, AnyStr]: ...
@@ -229,16 +232,36 @@ class TextDoc(Doc):
229232
doc: Any | None = None,
230233
) -> str: ...
231234

232-
def pager(text: str) -> None: ...
233-
def getpager() -> Callable[[str], None]: ...
235+
if sys.version_info >= (3, 13):
236+
def pager(text: str, title: str = "") -> None: ...
237+
238+
else:
239+
def pager(text: str) -> None: ...
240+
234241
def plain(text: str) -> str: ...
235-
def pipepager(text: str, cmd: str) -> None: ...
236-
def tempfilepager(text: str, cmd: str) -> None: ...
237-
def ttypager(text: str) -> None: ...
238-
def plainpager(text: str) -> None: ...
239242
def describe(thing: Any) -> str: ...
240243
def locate(path: str, forceload: bool = ...) -> object: ...
241244

245+
if sys.version_info >= (3, 13):
246+
def get_pager() -> _Pager: ...
247+
def pipe_pager(text: str, cmd: str, title: str = "") -> None: ...
248+
def tempfile_pager(text: str, cmd: str, title: str = "") -> None: ...
249+
def tty_pager(text: str, title: str = "") -> None: ...
250+
def plain_pager(text: str, title: str = "") -> None: ...
251+
252+
# For backwards compatibility.
253+
getpager = get_pager
254+
pipepager = pipe_pager
255+
tempfilepager = tempfile_pager
256+
ttypager = tty_pager
257+
plainpager = plain_pager
258+
else:
259+
def getpager() -> Callable[[str], None]: ...
260+
def pipepager(text: str, cmd: str) -> None: ...
261+
def tempfilepager(text: str, cmd: str) -> None: ...
262+
def ttypager(text: str) -> None: ...
263+
def plainpager(text: str) -> None: ...
264+
242265
text: TextDoc
243266
html: HTMLDoc
244267

stdlib/threading.pyi

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ if sys.version_info >= (3, 10):
6161
def gettrace() -> TraceFunction | None: ...
6262
def getprofile() -> ProfileFunction | None: ...
6363

64-
def stack_size(size: int = ...) -> int: ...
64+
def stack_size(size: int = 0, /) -> int: ...
6565

6666
TIMEOUT_MAX: float
6767

stdlib/types.pyi

+5-1
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,11 @@ class MappingProxyType(Mapping[_KT, _VT_co]):
312312

313313
class SimpleNamespace:
314314
__hash__: ClassVar[None] # type: ignore[assignment]
315-
def __init__(self, **kwargs: Any) -> None: ...
315+
if sys.version_info >= (3, 13):
316+
def __init__(self, mapping_or_iterable: Mapping[str, Any] | Iterable[tuple[str, Any]] = (), /, **kwargs: Any) -> None: ...
317+
else:
318+
def __init__(self, **kwargs: Any) -> None: ...
319+
316320
def __eq__(self, value: object, /) -> bool: ...
317321
def __getattribute__(self, name: str, /) -> Any: ...
318322
def __setattr__(self, name: str, value: Any, /) -> None: ...

stdlib/unittest/__init__.pyi

+6-10
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,7 @@ from .case import (
1111
skipIf as skipIf,
1212
skipUnless as skipUnless,
1313
)
14-
from .loader import (
15-
TestLoader as TestLoader,
16-
defaultTestLoader as defaultTestLoader,
17-
findTestCases as findTestCases,
18-
getTestCaseNames as getTestCaseNames,
19-
makeSuite as makeSuite,
20-
)
14+
from .loader import TestLoader as TestLoader, defaultTestLoader as defaultTestLoader
2115
from .main import TestProgram as TestProgram, main as main
2216
from .result import TestResult as TestResult
2317
from .runner import TextTestResult as TextTestResult, TextTestRunner as TextTestRunner
@@ -52,12 +46,14 @@ __all__ = [
5246
"registerResult",
5347
"removeResult",
5448
"removeHandler",
55-
"getTestCaseNames",
56-
"makeSuite",
57-
"findTestCases",
5849
"addModuleCleanup",
5950
]
6051

52+
if sys.version_info < (3, 13):
53+
from .loader import findTestCases as findTestCases, getTestCaseNames as getTestCaseNames, makeSuite as makeSuite
54+
55+
__all__ += ["getTestCaseNames", "makeSuite", "findTestCases"]
56+
6157
if sys.version_info >= (3, 11):
6258
__all__ += ["enterModuleContext", "doModuleCleanups"]
6359

stdlib/unittest/async_case.pyi

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import sys
2+
from asyncio.events import AbstractEventLoop
23
from collections.abc import Awaitable, Callable
34
from typing import TypeVar
45
from typing_extensions import ParamSpec
@@ -12,6 +13,9 @@ _T = TypeVar("_T")
1213
_P = ParamSpec("_P")
1314

1415
class IsolatedAsyncioTestCase(TestCase):
16+
if sys.version_info >= (3, 13):
17+
loop_factory: Callable[[], AbstractEventLoop] | None = None
18+
1519
async def asyncSetUp(self) -> None: ...
1620
async def asyncTearDown(self) -> None: ...
1721
def addAsyncCleanup(self, func: Callable[_P, Awaitable[object]], /, *args: _P.args, **kwargs: _P.kwargs) -> None: ...

0 commit comments

Comments
 (0)