https://github.com/python/cpython/commit/99d62f902e43c08ebec5a292fd3b30a9fc4cba69
commit: 99d62f902e43c08ebec5a292fd3b30a9fc4cba69
branch: main
author: Alex Waygood <[email protected]>
committer: AlexWaygood <[email protected]>
date: 2024-06-15T12:51:58Z
summary:
Add some more edge-case tests for `inspect.get_annotations` with
`eval_str=True` (#120550)
files:
M Lib/test/test_inspect/inspect_stringized_annotations_pep695.py
M Lib/test/test_inspect/test_inspect.py
diff --git a/Lib/test/test_inspect/inspect_stringized_annotations_pep695.py
b/Lib/test/test_inspect/inspect_stringized_annotations_pep695.py
index 723822f8eaa92d..39bfe2edb03f30 100644
--- a/Lib/test/test_inspect/inspect_stringized_annotations_pep695.py
+++ b/Lib/test/test_inspect/inspect_stringized_annotations_pep695.py
@@ -45,6 +45,13 @@ def generic_method[Foo, **Bar](
def generic_method_2[Eggs, **Spam](self, x: Eggs, y: Spam): pass
+# Eggs is `int` in globals, a TypeVar in type_params, and `str` in locals:
+class E[Eggs]:
+ Eggs = str
+ x: Eggs
+
+
+
def nested():
from types import SimpleNamespace
from inspect import get_annotations
@@ -53,7 +60,7 @@ def nested():
Spam = memoryview
- class E[Eggs, **Spam]:
+ class F[Eggs, **Spam]:
x: Eggs
y: Spam
@@ -63,10 +70,18 @@ def generic_method[Eggs, **Spam](self, x: Eggs, y: Spam):
pass
def generic_function[Eggs, **Spam](x: Eggs, y: Spam): pass
+ # Eggs is `int` in globals, `bytes` in the function scope,
+ # a TypeVar in the type_params, and `str` in locals:
+ class G[Eggs]:
+ Eggs = str
+ x: Eggs
+
+
return SimpleNamespace(
- E=E,
- E_annotations=get_annotations(E, eval_str=True),
- E_meth_annotations=get_annotations(E.generic_method, eval_str=True),
+ F=F,
+ F_annotations=get_annotations(F, eval_str=True),
+ F_meth_annotations=get_annotations(F.generic_method, eval_str=True),
+ G_annotations=get_annotations(G, eval_str=True),
generic_func=generic_function,
generic_func_annotations=get_annotations(generic_function,
eval_str=True)
)
diff --git a/Lib/test/test_inspect/test_inspect.py
b/Lib/test/test_inspect/test_inspect.py
index 140efac530afb2..ea8735d8f06459 100644
--- a/Lib/test/test_inspect/test_inspect.py
+++ b/Lib/test/test_inspect/test_inspect.py
@@ -1770,26 +1770,36 @@ def
test_pep_695_generic_method_with_future_annotations_name_clash_with_global_v
)
)
+ def
test_pep_695_generic_method_with_future_annotations_name_clash_with_global_and_local_vars(self):
+ self.assertEqual(
+ inspect.get_annotations(
+ inspect_stringized_annotations_pep695.E, eval_str=True
+ ),
+ {"x": str},
+ )
+
def test_pep_695_generics_with_future_annotations_nested_in_function(self):
results = inspect_stringized_annotations_pep695.nested()
self.assertEqual(
- set(results.E_annotations.values()),
- set(results.E.__type_params__)
+ set(results.F_annotations.values()),
+ set(results.F.__type_params__)
)
self.assertEqual(
- set(results.E_meth_annotations.values()),
- set(results.E.generic_method.__type_params__)
+ set(results.F_meth_annotations.values()),
+ set(results.F.generic_method.__type_params__)
)
self.assertNotEqual(
- set(results.E_meth_annotations.values()),
- set(results.E.__type_params__)
+ set(results.F_meth_annotations.values()),
+ set(results.F.__type_params__)
)
self.assertEqual(
-
set(results.E_meth_annotations.values()).intersection(results.E.__type_params__),
+
set(results.F_meth_annotations.values()).intersection(results.F.__type_params__),
set()
)
+ self.assertEqual(results.G_annotations, {"x": str})
+
self.assertEqual(
set(results.generic_func_annotations.values()),
set(results.generic_func.__type_params__)
_______________________________________________
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]