https://github.com/python/cpython/commit/e09837fcbf39d07c0af51aa936e95c50aed4787c
commit: e09837fcbf39d07c0af51aa936e95c50aed4787c
branch: main
author: sobolevn <[email protected]>
committer: sobolevn <[email protected]>
date: 2025-10-20T21:10:44Z
summary:
gh-133601: Remove deprecated `typing.no_type_check_decorator` (#133602)
files:
A Misc/NEWS.d/next/Library/2025-05-07-22-09-28.gh-issue-133601.9kUL3P.rst
M Doc/deprecations/pending-removal-in-3.15.rst
M Doc/library/typing.rst
M Doc/whatsnew/3.13.rst
M Doc/whatsnew/3.15.rst
M Lib/test/test_typing.py
M Lib/typing.py
M Misc/NEWS.d/3.13.0a1.rst
diff --git a/Doc/deprecations/pending-removal-in-3.15.rst
b/Doc/deprecations/pending-removal-in-3.15.rst
index 076346be621569..09cbd6f01a0580 100644
--- a/Doc/deprecations/pending-removal-in-3.15.rst
+++ b/Doc/deprecations/pending-removal-in-3.15.rst
@@ -92,7 +92,7 @@ Pending removal in Python 3.15
Use ``class TD(TypedDict): pass`` or ``TD = TypedDict("TD", {})``
to create a TypedDict with zero field.
- * The :func:`typing.no_type_check_decorator` decorator function
+ * The :func:`!typing.no_type_check_decorator` decorator function
has been deprecated since Python 3.13.
After eight years in the :mod:`typing` module,
it has yet to be supported by any major type checker.
diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
index e5d116c702ea2e..58f3a8ecd7c2e0 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -3258,17 +3258,6 @@ Functions and decorators
``@no_type_check`` mutates the decorated object in place.
-.. decorator:: no_type_check_decorator
-
- Decorator to give another decorator the :func:`no_type_check` effect.
-
- This wraps the decorator with something that wraps the decorated
- function in :func:`no_type_check`.
-
- .. deprecated-removed:: 3.13 3.15
- No type checker ever added support for ``@no_type_check_decorator``. It
- is therefore deprecated, and will be removed in Python 3.15.
-
.. decorator:: override
Decorator to indicate that a method in a subclass is intended to override a
@@ -4114,10 +4103,6 @@ convenience. This is subject to change, and not all
deprecations are listed.
- 3.12
- Undecided
- :pep:`695`
- * - :func:`@typing.no_type_check_decorator <no_type_check_decorator>`
- - 3.13
- - 3.15
- - :gh:`106309`
* - :data:`typing.AnyStr`
- 3.13
- 3.18
diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst
index 499f6f0ff4eaca..dc105156f33080 100644
--- a/Doc/whatsnew/3.13.rst
+++ b/Doc/whatsnew/3.13.rst
@@ -1993,7 +1993,7 @@ New Deprecations
use ``class TD(TypedDict): pass`` or ``TD = TypedDict("TD", {})``.
(Contributed by Alex Waygood in :gh:`105566` and :gh:`105570`.)
- * Deprecate the :func:`typing.no_type_check_decorator` decorator function,
+ * Deprecate the :func:`!typing.no_type_check_decorator` decorator function,
to be removed in Python 3.15.
After eight years in the :mod:`typing` module,
it has yet to be supported by any major type checker.
diff --git a/Doc/whatsnew/3.15.rst b/Doc/whatsnew/3.15.rst
index 231ae565192efe..d406b263f174e3 100644
--- a/Doc/whatsnew/3.15.rst
+++ b/Doc/whatsnew/3.15.rst
@@ -764,6 +764,9 @@ typing
:func:`issubclass`, but warnings were not previously emitted if it was merely
imported or accessed from the :mod:`!typing` module.
+* Deprecated :func:`!typing.no_type_check_decorator` has been removed.
+ (Contributed by Nikita Sobolev in :gh:`133601`.)
+
unicodedata
-----------
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index db0501d70e3442..4076004bc13c85 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -33,7 +33,7 @@
from typing import is_typeddict, is_protocol
from typing import reveal_type
from typing import dataclass_transform
-from typing import no_type_check, no_type_check_decorator
+from typing import no_type_check
from typing import Type
from typing import NamedTuple, NotRequired, Required, ReadOnly, TypedDict,
NoExtraItems
from typing import IO, TextIO, BinaryIO
@@ -6376,35 +6376,6 @@ class F:
for clazz in [C, D, E, F]:
self.assertEqual(get_type_hints(clazz), expected_result)
- def test_meta_no_type_check(self):
- depr_msg = (
- "'typing.no_type_check_decorator' is deprecated "
- "and slated for removal in Python 3.15"
- )
- with self.assertWarnsRegex(DeprecationWarning, depr_msg):
- @no_type_check_decorator
- def magic_decorator(func):
- return func
-
- self.assertEqual(magic_decorator.__name__, 'magic_decorator')
-
- @magic_decorator
- def foo(a: 'whatevers') -> {}:
- pass
-
- @magic_decorator
- class C:
- def foo(a: 'whatevers') -> {}:
- pass
-
- self.assertEqual(foo.__name__, 'foo')
- th = get_type_hints(foo)
- self.assertEqual(th, {})
- cth = get_type_hints(C.foo)
- self.assertEqual(cth, {})
- ith = get_type_hints(C().foo)
- self.assertEqual(ith, {})
-
class InternalsTests(BaseTestCase):
def test_collect_parameters(self):
diff --git a/Lib/typing.py b/Lib/typing.py
index 25234d2d707dd2..eb0519986a8952 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -139,7 +139,6 @@
'Never',
'NewType',
'no_type_check',
- 'no_type_check_decorator',
'NoDefault',
'NoExtraItems',
'NoReturn',
@@ -2623,23 +2622,6 @@ def no_type_check(arg):
return arg
-def no_type_check_decorator(decorator):
- """Decorator to give another decorator the @no_type_check effect.
-
- This wraps the decorator with something that wraps the decorated
- function in @no_type_check.
- """
- import warnings
- warnings._deprecated("typing.no_type_check_decorator", remove=(3, 15))
- @functools.wraps(decorator)
- def wrapped_decorator(*args, **kwds):
- func = decorator(*args, **kwds)
- func = no_type_check(func)
- return func
-
- return wrapped_decorator
-
-
def _overload_dummy(*args, **kwds):
"""Helper for @overload to raise when called."""
raise NotImplementedError(
diff --git a/Misc/NEWS.d/3.13.0a1.rst b/Misc/NEWS.d/3.13.0a1.rst
index a5f0161e8f591e..1391d670575746 100644
--- a/Misc/NEWS.d/3.13.0a1.rst
+++ b/Misc/NEWS.d/3.13.0a1.rst
@@ -3426,7 +3426,7 @@ This bug was introduced in Python 3.12.0 beta 1.
.. nonce: hSlB17
.. section: Library
-Deprecate :func:`typing.no_type_check_decorator`. No major type checker ever
+Deprecate :func:`!typing.no_type_check_decorator`. No major type checker ever
added support for this decorator. Patch by Alex Waygood.
..
diff --git
a/Misc/NEWS.d/next/Library/2025-05-07-22-09-28.gh-issue-133601.9kUL3P.rst
b/Misc/NEWS.d/next/Library/2025-05-07-22-09-28.gh-issue-133601.9kUL3P.rst
new file mode 100644
index 00000000000000..62f40aee7aaa4f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-05-07-22-09-28.gh-issue-133601.9kUL3P.rst
@@ -0,0 +1 @@
+Remove deprecated :func:`!typing.no_type_check_decorator`.
_______________________________________________
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]