mirror of https://github.com/python/cpython
gh-118895: Call PyType_Ready() on typing.NoDefault (#118897)
This commit is contained in:
parent
c444362c6e
commit
13d7cf997b
|
@ -18,6 +18,7 @@ extern int _Py_initialize_generic(PyInterpreterState *);
|
|||
extern void _Py_clear_generic_types(PyInterpreterState *);
|
||||
|
||||
extern PyTypeObject _PyTypeAlias_Type;
|
||||
extern PyTypeObject _PyNoDefault_Type;
|
||||
extern PyObject _Py_NoDefaultStruct;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -45,7 +45,7 @@ import typing
|
|||
import weakref
|
||||
import types
|
||||
|
||||
from test.support import captured_stderr, cpython_only, infinite_recursion
|
||||
from test.support import captured_stderr, cpython_only, infinite_recursion, requires_docstrings
|
||||
from test.typinganndata import ann_module695, mod_generics_cache, _typed_dict_helper
|
||||
|
||||
|
||||
|
@ -10236,15 +10236,34 @@ class NoDefaultTests(BaseTestCase):
|
|||
def test_constructor(self):
|
||||
self.assertIs(NoDefault, type(NoDefault)())
|
||||
with self.assertRaises(TypeError):
|
||||
NoDefault(1)
|
||||
type(NoDefault)(1)
|
||||
|
||||
def test_repr(self):
|
||||
self.assertEqual(repr(NoDefault), 'typing.NoDefault')
|
||||
|
||||
@requires_docstrings
|
||||
def test_doc(self):
|
||||
self.assertIsInstance(NoDefault.__doc__, str)
|
||||
|
||||
def test_class(self):
|
||||
self.assertIs(NoDefault.__class__, type(NoDefault))
|
||||
|
||||
def test_no_call(self):
|
||||
with self.assertRaises(TypeError):
|
||||
NoDefault()
|
||||
|
||||
def test_no_attributes(self):
|
||||
with self.assertRaises(AttributeError):
|
||||
NoDefault.foo = 3
|
||||
with self.assertRaises(AttributeError):
|
||||
NoDefault.foo
|
||||
|
||||
# TypeError is consistent with the behavior of NoneType
|
||||
with self.assertRaises(TypeError):
|
||||
type(NoDefault).foo = 3
|
||||
with self.assertRaises(AttributeError):
|
||||
type(NoDefault).foo
|
||||
|
||||
|
||||
class AllTests(BaseTestCase):
|
||||
"""Tests for __all__."""
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Setting attributes on :data:`typing.NoDefault` now raises
|
||||
:exc:`AttributeError` instead of :exc:`TypeError`.
|
|
@ -63,6 +63,9 @@ _typing_exec(PyObject *m)
|
|||
if (PyModule_AddObjectRef(m, "TypeAliasType", (PyObject *)&_PyTypeAlias_Type) < 0) {
|
||||
return -1;
|
||||
}
|
||||
if (PyType_Ready(&_PyNoDefault_Type) < 0) {
|
||||
return -1;
|
||||
}
|
||||
if (PyModule_AddObjectRef(m, "NoDefault", (PyObject *)&_Py_NoDefaultStruct) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue