]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-137706: make typing._is_unpacked_typevartuple check for `True` instead of truthy...
authorDavid Ellis <ducksual@gmail.com>
Sat, 6 Sep 2025 07:39:49 +0000 (08:39 +0100)
committerGitHub <noreply@github.com>
Sat, 6 Sep 2025 07:39:49 +0000 (07:39 +0000)
Lib/test/test_typing.py
Lib/typing.py
Misc/NEWS.d/next/Library/2025-09-05-21-10-24.gh-issue-137706.0EztiJ.rst [new file with mode: 0644]

index 6317d4657619f0df556a38c9d6274678a947730b..0fc5415c390145056ba4ea3bf5de3bb9bb87688a 100644 (file)
@@ -9788,6 +9788,19 @@ class AnnotatedTests(BaseTestCase):
         self.assertIs(type(field_c2.__metadata__[0]), float)
         self.assertIs(type(field_c3.__metadata__[0]), bool)
 
+    def test_forwardref_partial_evaluation(self):
+        # Test that Annotated partially evaluates if it contains a ForwardRef
+        # See: https://github.com/python/cpython/issues/137706
+        def f(x: Annotated[undefined, '']): pass
+
+        ann = annotationlib.get_annotations(f, format=annotationlib.Format.FORWARDREF)
+
+        # Test that the attributes are retrievable from the partially evaluated annotation
+        x_ann = ann['x']
+        self.assertIs(get_origin(x_ann), Annotated)
+        self.assertEqual(x_ann.__origin__, EqualToForwardRef('undefined', owner=f))
+        self.assertEqual(x_ann.__metadata__, ('',))
+
 
 class TypeAliasTests(BaseTestCase):
     def test_canonical_usage_with_variable_annotation(self):
index ea25e3832bd0bed6de3d2f8065757ee1983857ee..babe3c44d9dc552d24da7370b12a684ff410ae57 100644 (file)
@@ -1027,8 +1027,10 @@ def evaluate_forward_ref(
 
 
 def _is_unpacked_typevartuple(x: Any) -> bool:
+    # Need to check 'is True' here
+    # See: https://github.com/python/cpython/issues/137706
     return ((not isinstance(x, type)) and
-            getattr(x, '__typing_is_unpacked_typevartuple__', False))
+            getattr(x, '__typing_is_unpacked_typevartuple__', False) is True)
 
 
 def _is_typevar_like(x: Any) -> bool:
diff --git a/Misc/NEWS.d/next/Library/2025-09-05-21-10-24.gh-issue-137706.0EztiJ.rst b/Misc/NEWS.d/next/Library/2025-09-05-21-10-24.gh-issue-137706.0EztiJ.rst
new file mode 100644 (file)
index 0000000..9eed50e
--- /dev/null
@@ -0,0 +1 @@
+Fix the partial evaluation of annotations that use ``typing.Annotated[T, x]`` where ``T`` is a forward reference.