[Python-checkins] gh-107810: Improve DeprecationWarning for metaclasses with custom tp_new (GH-107834)

encukou webhook-mailer at python.org
Thu Aug 10 11:55:52 EDT 2023


https://github.com/python/cpython/commit/16dcce21768ba381996a88ac8c255bf1490b3680
commit: 16dcce21768ba381996a88ac8c255bf1490b3680
branch: main
author: Marc Mueller <30130371+cdce8p at users.noreply.github.com>
committer: encukou <encukou at gmail.com>
date: 2023-08-10T15:55:47Z
summary:

gh-107810: Improve DeprecationWarning for metaclasses with custom tp_new (GH-107834)


Co-authored-by: Kirill Podoprigora <kirill.bast9 at mail.ru>

files:
A Misc/NEWS.d/next/C API/2023-08-10-11-12-25.gh-issue-107810.oJ40Qx.rst
M Lib/test/test_capi/test_misc.py
M Objects/typeobject.c

diff --git a/Lib/test/test_capi/test_misc.py b/Lib/test/test_capi/test_misc.py
index 001d37de8e0eb..c81212202d9ef 100644
--- a/Lib/test/test_capi/test_misc.py
+++ b/Lib/test/test_capi/test_misc.py
@@ -611,7 +611,7 @@ class Base(metaclass=metaclass):
 
         # Class creation from C
         with warnings_helper.check_warnings(
-                ('.*custom tp_new.*in Python 3.14.*', DeprecationWarning),
+                ('.* _testcapi.Subclass .* custom tp_new.*in Python 3.14.*', DeprecationWarning),
                 ):
             sub = _testcapi.make_type_with_base(Base)
         self.assertTrue(issubclass(sub, Base))
diff --git a/Misc/NEWS.d/next/C API/2023-08-10-11-12-25.gh-issue-107810.oJ40Qx.rst b/Misc/NEWS.d/next/C API/2023-08-10-11-12-25.gh-issue-107810.oJ40Qx.rst
new file mode 100644
index 0000000000000..c8a1f6d122b61
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2023-08-10-11-12-25.gh-issue-107810.oJ40Qx.rst	
@@ -0,0 +1 @@
+Improve :exc:`DeprecationWarning` for uses of :c:type:`PyType_Spec` with metaclasses that have custom ``tp_new``.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 71e96f5af4e41..aca14e79a1997 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4264,9 +4264,9 @@ _PyType_FromMetaclass_impl(
         if (_allow_tp_new) {
             if (PyErr_WarnFormat(
                     PyExc_DeprecationWarning, 1,
-                    "Using PyType_Spec with metaclasses that have custom "
-                    "tp_new is deprecated and will no longer be allowed in "
-                    "Python 3.14.") < 0) {
+                    "Type %s uses PyType_Spec with a metaclass that has custom "
+                    "tp_new. This is deprecated and will no longer be allowed in "
+                    "Python 3.14.", spec->name) < 0) {
                 goto finally;
             }
         }



More information about the Python-checkins mailing list