]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-107810: Improve DeprecationWarning for metaclasses with custom tp_new ...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 11 Aug 2023 14:12:50 +0000 (07:12 -0700)
committerGitHub <noreply@github.com>
Fri, 11 Aug 2023 14:12:50 +0000 (16:12 +0200)
gh-107810: Improve DeprecationWarning for metaclasses with custom tp_new (GH-107834)

(cherry picked from commit 16dcce21768ba381996a88ac8c255bf1490b3680)

Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
Co-authored-by: Kirill Podoprigora <kirill.bast9@mail.ru>
Lib/test/test_capi/test_misc.py
Misc/NEWS.d/next/C API/2023-08-10-11-12-25.gh-issue-107810.oJ40Qx.rst [new file with mode: 0644]
Objects/typeobject.c

index cd37fc71aa966e3c178d5d7e4eb4a484ac08a422..3f2736da7d93a4d2a4a11143f8ade5ea12efa15c 100644 (file)
@@ -740,7 +740,7 @@ class CAPITest(unittest.TestCase):
 
         # 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 (file)
index 0000000..c8a1f6d
--- /dev/null
@@ -0,0 +1 @@
+Improve :exc:`DeprecationWarning` for uses of :c:type:`PyType_Spec` with metaclasses that have custom ``tp_new``.
index 40e187d4d8d22a0e100c651e9580f05fd0b96bdd..5c71c28f75150451f8138332ef1eb3ac941c04df 100644 (file)
@@ -4242,9 +4242,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;
             }
         }