8000 Update `types.SimpleNamespace` for 3.13 (#12297) · python/typeshed@23fd30f · GitHub
[go: up one dir, main page]

Skip to content

Commit 23fd30f

Browse files
authored
Update types.SimpleNamespace for 3.13 (#12297)
1 parent 694c982 commit 23fd30f

File tree

8 files changed

+39
-2
lines changed

8 files changed

+39
-2
lines changed

stdlib/@tests/stubtest_allowlists/common.txt

Lines changed: 0 additions & 1 deletion
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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 3 additions & 0 deletions
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/py38.txt

Lines changed: 1 addition & 0 deletions
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

Lines changed: 1 addition & 0 deletions
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__
Lines changed: 27 additions & 0 deletions
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/types.pyi

Lines changed: 5 additions & 1 deletion
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: ...

0 commit comments

Comments
 (0)
0