https://github.com/python/cpython/commit/b725297cee9e5608b709f3c7291d974c97f68fff
commit: b725297cee9e5608b709f3c7291d974c97f68fff
branch: main
author: sobolevn <[email protected]>
committer: sobolevn <[email protected]>
date: 2025-01-09T18:15:13+03:00
summary:
gh-128661: Fix `typing.evaluate_forward_ref` not showing deprecation (#128663)
gh-128661: Fix `typing.evaluate_forward_ref` not showing deprecataion
files:
A Misc/NEWS.d/next/Library/2025-01-09-12-06-52.gh-issue-128661.ixx_0z.rst
M Lib/test/test_typing.py
M Lib/typing.py
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 1c86b95e8e5c29..c51ee763890af2 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -45,6 +45,7 @@
import textwrap
import typing
import weakref
+import warnings
import types
from test.support import captured_stderr, cpython_only, infinite_recursion,
requires_docstrings, import_helper, run_code
@@ -7273,6 +7274,51 @@ class C(Generic[T]): pass
self.assertEqual(get_args(Unpack[tuple[Unpack[Ts]]]),
(tuple[Unpack[Ts]],))
+class EvaluateForwardRefTests(BaseTestCase):
+ def test_evaluate_forward_ref(self):
+ int_ref = ForwardRef('int')
+ missing = ForwardRef('missing')
+ self.assertIs(
+ typing.evaluate_forward_ref(int_ref, type_params=()),
+ int,
+ )
+ self.assertIs(
+ typing.evaluate_forward_ref(
+ int_ref, type_params=(),
format=annotationlib.Format.FORWARDREF,
+ ),
+ int,
+ )
+ self.assertIs(
+ typing.evaluate_forward_ref(
+ missing, type_params=(),
format=annotationlib.Format.FORWARDREF,
+ ),
+ missing,
+ )
+ self.assertEqual(
+ typing.evaluate_forward_ref(
+ int_ref, type_params=(), format=annotationlib.Format.STRING,
+ ),
+ 'int',
+ )
+
+ def test_evaluate_forward_ref_no_type_params(self):
+ ref = ForwardRef('int')
+ with self.assertWarnsRegex(
+ DeprecationWarning,
+ (
+ "Failing to pass a value to the 'type_params' parameter "
+ "of 'typing.evaluate_forward_ref' is deprecated, "
+ "as it leads to incorrect behaviour"
+ ),
+ ):
+ typing.evaluate_forward_ref(ref)
+
+ # No warnings when `type_params` is passed:
+ with warnings.catch_warnings(record=True) as w:
+ typing.evaluate_forward_ref(ref, type_params=())
+ self.assertEqual(w, [])
+
+
class CollectionsAbcTests(BaseTestCase):
def test_hashable(self):
diff --git a/Lib/typing.py b/Lib/typing.py
index e69b485422cbd2..66570db7a5bd74 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -1024,7 +1024,7 @@ def evaluate_forward_ref(
owner=None,
globals=None,
locals=None,
- type_params=None,
+ type_params=_sentinel,
format=annotationlib.Format.VALUE,
_recursive_guard=frozenset(),
):
diff --git
a/Misc/NEWS.d/next/Library/2025-01-09-12-06-52.gh-issue-128661.ixx_0z.rst
b/Misc/NEWS.d/next/Library/2025-01-09-12-06-52.gh-issue-128661.ixx_0z.rst
new file mode 100644
index 00000000000000..6c52b3dcc0ed00
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-01-09-12-06-52.gh-issue-128661.ixx_0z.rst
@@ -0,0 +1,2 @@
+Fixes :func:`typing.evaluate_forward_ref` not showing deprecation when
+``type_params`` arg is not passed.
_______________________________________________
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]