]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-129027: Raise DeprecationWarning for sys._clear_type_cache (#129043)
authorSrinivas Reddy Thatiparthy (తాటిపర్తి శ్రీనివాస్ రెడ్డి) <thatiparthysreenivas@gmail.com>
Fri, 25 Apr 2025 12:01:48 +0000 (17:31 +0530)
committerGitHub <noreply@github.com>
Fri, 25 Apr 2025 12:01:48 +0000 (15:01 +0300)
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Doc/deprecations/pending-removal-in-future.rst
Doc/whatsnew/3.14.rst
Lib/test/test_cmd_line.py
Lib/test/test_sys.py
Lib/test/test_type_cache.py
Misc/NEWS.d/next/Library/2025-01-21-11-48-19.gh-issue-129027.w0vxzZ.rst [new file with mode: 0644]
Python/sysmodule.c

index 30d7d579705f2defbb46659299277330e33c038d..24e8853da906214a49b1b8ea737e38a9b32e660a 100644 (file)
@@ -153,3 +153,6 @@ although there is currently no date scheduled for their removal.
   :class:`~xml.etree.ElementTree.Element` is deprecated. In a future release it
   will always return ``True``. Prefer explicit ``len(elem)`` or
   ``elem is not None`` tests instead.
+
+* :func:`sys._clear_type_cache` is deprecated:
+  use :func:`sys._clear_internal_caches` instead.
index bc7b12c5be21d0fba50e6c07693f17d106198f45..4477a82777877d114300e68398e7aff86614dfaa 100644 (file)
@@ -1246,6 +1246,9 @@ sys
 * On FreeBSD, :data:`sys.platform` doesn't contain the major version anymore.
   It is always ``'freebsd'``, instead of ``'freebsd13'`` or ``'freebsd14'``.
 
+* Raise :exc:`DeprecationWarning` for :func:`sys._clear_type_cache`. This
+  function was deprecated in Python 3.13 but it didn't raise a runtime warning.
+
 
 sys.monitoring
 --------------
index e1d1d03d4ff698a358f2bfe4127b98e847d1b623..36f87e259e794d5a3af9f1aa7d5c1c8ec3abd9fe 100644 (file)
@@ -9,6 +9,7 @@ import sysconfig
 import tempfile
 import textwrap
 import unittest
+import warnings
 from test import support
 from test.support import os_helper
 from test.support import force_not_colorized
@@ -936,14 +937,20 @@ class CmdLineTest(unittest.TestCase):
     @unittest.skipUnless(sysconfig.get_config_var('Py_TRACE_REFS'), "Requires --with-trace-refs build option")
     def test_python_dump_refs(self):
         code = 'import sys; sys._clear_type_cache()'
-        rc, out, err = assert_python_ok('-c', code, PYTHONDUMPREFS='1')
+        # TODO: Remove warnings context manager once sys._clear_type_cache is removed
+        with warnings.catch_warnings():
+            warnings.simplefilter("ignore", DeprecationWarning)
+            rc, out, err = assert_python_ok('-c', code, PYTHONDUMPREFS='1')
         self.assertEqual(rc, 0)
 
     @unittest.skipUnless(sysconfig.get_config_var('Py_TRACE_REFS'), "Requires --with-trace-refs build option")
     def test_python_dump_refs_file(self):
         with tempfile.NamedTemporaryFile() as dump_file:
             code = 'import sys; sys._clear_type_cache()'
-            rc, out, err = assert_python_ok('-c', code, PYTHONDUMPREFSFILE=dump_file.name)
+            # TODO: Remove warnings context manager once sys._clear_type_cache is removed
+            with warnings.catch_warnings():
+                warnings.simplefilter("ignore", DeprecationWarning)
+                rc, out, err = assert_python_ok('-c', code, PYTHONDUMPREFSFILE=dump_file.name)
             self.assertEqual(rc, 0)
             with open(dump_file.name, 'r') as file:
                 contents = file.read()
index f9bac3fe351867043340eb293831264a857801b7..56413d00823f4a47c262c23fb3d4e999cd5bbb39 100644 (file)
@@ -891,7 +891,9 @@ class SysModuleTest(unittest.TestCase):
 
     @test.support.cpython_only
     def test_clear_type_cache(self):
-        sys._clear_type_cache()
+        with self.assertWarnsRegex(DeprecationWarning,
+                                   r"sys\._clear_type_cache\(\) is deprecated.*"):
+            sys._clear_type_cache()
 
     @force_not_colorized
     @support.requires_subprocess()
index ee64f89358ed55a39d00ca3e72d1782ac36c522e..7469a1047f81d70d0ff257579f209467670878e6 100644 (file)
@@ -1,6 +1,7 @@
 """ Tests for the internal type cache in CPython. """
-import unittest
 import dis
+import unittest
+import warnings
 from test import support
 from test.support import import_helper, requires_specialization, requires_specialization_ft
 try:
@@ -16,6 +17,10 @@ type_assign_specific_version_unsafe = _testinternalcapi.type_assign_specific_ver
 type_assign_version = _testcapi.type_assign_version
 type_modified = _testcapi.type_modified
 
+def clear_type_cache():
+    with warnings.catch_warnings():
+        warnings.simplefilter("ignore", DeprecationWarning)
+        _clear_type_cache()
 
 @support.cpython_only
 @unittest.skipIf(_clear_type_cache is None, "requires sys._clear_type_cache")
@@ -38,7 +43,7 @@ class TypeCacheTests(unittest.TestCase):
         append_result = all_version_tags.append
         assertNotEqual = self.assertNotEqual
         for _ in range(30):
-            _clear_type_cache()
+            clear_type_cache()
             X = type('Y', (), {})
             X.x = 1
             X.x
@@ -78,7 +83,7 @@ class TypeCacheTests(unittest.TestCase):
         new_version = type_get_version(C)
         self.assertEqual(new_version, orig_version + 5)
 
-        _clear_type_cache()
+        clear_type_cache()
 
     def test_per_class_limit(self):
         class C:
@@ -112,7 +117,7 @@ class TypeCacheTests(unittest.TestCase):
 @support.cpython_only
 class TypeCacheWithSpecializationTests(unittest.TestCase):
     def tearDown(self):
-        _clear_type_cache()
+        clear_type_cache()
 
     def _assign_valid_version_or_skip(self, type_):
         type_modified(type_)
diff --git a/Misc/NEWS.d/next/Library/2025-01-21-11-48-19.gh-issue-129027.w0vxzZ.rst b/Misc/NEWS.d/next/Library/2025-01-21-11-48-19.gh-issue-129027.w0vxzZ.rst
new file mode 100644 (file)
index 0000000..d2abf53
--- /dev/null
@@ -0,0 +1,2 @@
+Raise :exc:`DeprecationWarning` for :func:`sys._clear_type_cache`. This function was deprecated in Python 3.13
+but it didn't raise a runtime warning.
index 3e0165acd6fb8c0324fb627266c8929f20d52dff..1a7b01bf97f8f8dbbec0aaaff9c7bc0ba3263864 100644 (file)
@@ -2208,6 +2208,14 @@ static PyObject *
 sys__clear_type_cache_impl(PyObject *module)
 /*[clinic end generated code: output=20e48ca54a6f6971 input=127f3e04a8d9b555]*/
 {
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                     "sys._clear_type_cache() is deprecated and"
+                     " scheduled for removal in a future version."
+                     " Use sys._clear_internal_caches() instead.",
+                     1) < 0)
+    {
+        return NULL;
+    }
     PyType_ClearCache();
     Py_RETURN_NONE;
 }