https://github.com/python/cpython/commit/7f06cd335e91b0ec79c4608f23018c2a785332b1
commit: 7f06cd335e91b0ec79c4608f23018c2a785332b1
branch: 3.12
author: Jelle Zijlstra <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2024-05-28T19:54:47Z
summary:

[3.12] gh-119011: `type.__type_params__` now return an empty tuple (GH-119296) 
(#119681)

(cherry picked from commit 6b240c2308a044e38623900ccb8fa58c3549d4ae)

Co-authored-by: Nikita Sobolev <[email protected]>

files:
A Misc/NEWS.d/next/Core and 
Builtins/2024-05-21-09-46-51.gh-issue-119011.WOe3bu.rst
M Lib/test/test_functools.py
M Lib/test/test_type_params.py
M Objects/typeobject.c

diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index b73e48789425b7..7f1b80a5e51ec4 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -705,6 +705,14 @@ def wrapper():
         self.assertTrue(wrapper.__doc__.startswith('max('))
         self.assertEqual(wrapper.__annotations__, {})
 
+    def test_update_type_wrapper(self):
+        def wrapper(*args): pass
+
+        functools.update_wrapper(wrapper, type)
+        self.assertEqual(wrapper.__name__, 'type')
+        self.assertEqual(wrapper.__annotations__, {})
+        self.assertEqual(wrapper.__type_params__, ())
+
 
 class TestWraps(TestUpdateWrapper):
 
diff --git a/Lib/test/test_type_params.py b/Lib/test/test_type_params.py
index 38416315173bd4..ad5339ef4483ee 100644
--- a/Lib/test/test_type_params.py
+++ b/Lib/test/test_type_params.py
@@ -499,6 +499,11 @@ class C[T]:
                                             r"Cannot use [a-z]+ in annotation 
scope within class scope"):
                     run_code(code.format(case))
 
+    def test_type_special_case(self):
+        # https://github.com/python/cpython/issues/119011
+        self.assertEqual(type.__type_params__, ())
+        self.assertEqual(object.__type_params__, ())
+
 
 def make_base(arg):
     class Base:
diff --git a/Misc/NEWS.d/next/Core and 
Builtins/2024-05-21-09-46-51.gh-issue-119011.WOe3bu.rst b/Misc/NEWS.d/next/Core 
and Builtins/2024-05-21-09-46-51.gh-issue-119011.WOe3bu.rst
new file mode 100644
index 00000000000000..0083c18da13278
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and 
Builtins/2024-05-21-09-46-51.gh-issue-119011.WOe3bu.rst 
@@ -0,0 +1,2 @@
+Fixes ``type.__type_params__`` to return an empty tuple instead of a
+descriptor.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 0a21ec8dbb54af..bf2be42f73fdd4 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1506,8 +1506,11 @@ type_set_annotations(PyTypeObject *type, PyObject 
*value, void *context)
 static PyObject *
 type_get_type_params(PyTypeObject *type, void *context)
 {
-    PyObject *params = PyDict_GetItemWithError(lookup_tp_dict(type), 
&_Py_ID(__type_params__));
+    if (type == &PyType_Type) {
+        return PyTuple_New(0);
+    }
 
+    PyObject *params = PyDict_GetItemWithError(lookup_tp_dict(type), 
&_Py_ID(__type_params__));
     if (params) {
         return Py_NewRef(params);
     }

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to