summaryrefslogtreecommitdiffstats
path: root/Lib/annotationlib.py
diff options
context:
space:
mode:
authorJelle Zijlstra <jelle.zijlstra@gmail.com>2024-11-26 15:40:13 (GMT)
committerGitHub <noreply@github.com>2024-11-26 15:40:13 (GMT)
commitdcf629213bc046318c862ec0af5db3dfd1fc473a (patch)
tree95b5742a1fc2b20f4348d10746f7e520d75cde0d /Lib/annotationlib.py
parent2b0e2b2893a821ca36cd65a204bed932741ac189 (diff)
downloadcpython-dcf629213bc046318c862ec0af5db3dfd1fc473a.zip
cpython-dcf629213bc046318c862ec0af5db3dfd1fc473a.tar.gz
cpython-dcf629213bc046318c862ec0af5db3dfd1fc473a.tar.bz2
gh-119180: Add VALUE_WITH_FAKE_GLOBALS format to annotationlib (#124415)
Diffstat (limited to 'Lib/annotationlib.py')
-rw-r--r--Lib/annotationlib.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/Lib/annotationlib.py b/Lib/annotationlib.py
index 732fbfa..42f1f38 100644
--- a/Lib/annotationlib.py
+++ b/Lib/annotationlib.py
@@ -22,8 +22,9 @@ __all__ = [
class Format(enum.IntEnum):
VALUE = 1
- FORWARDREF = 2
- STRING = 3
+ VALUE_WITH_FAKE_GLOBALS = 2
+ FORWARDREF = 3
+ STRING = 4
_Union = None
@@ -513,6 +514,8 @@ def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False):
on the generated ForwardRef objects.
"""
+ if format == Format.VALUE_WITH_FAKE_GLOBALS:
+ raise ValueError("The VALUE_WITH_FAKE_GLOBALS format is for internal use only")
try:
return annotate(format)
except NotImplementedError:
@@ -546,7 +549,7 @@ def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False):
argdefs=annotate.__defaults__,
kwdefaults=annotate.__kwdefaults__,
)
- annos = func(Format.VALUE)
+ annos = func(Format.VALUE_WITH_FAKE_GLOBALS)
if _is_evaluate:
return annos if isinstance(annos, str) else repr(annos)
return {
@@ -607,7 +610,7 @@ def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False):
argdefs=annotate.__defaults__,
kwdefaults=annotate.__kwdefaults__,
)
- result = func(Format.VALUE)
+ result = func(Format.VALUE_WITH_FAKE_GLOBALS)
for obj in globals.stringifiers:
obj.__class__ = ForwardRef
obj.__stringifier_dict__ = None # not needed for ForwardRef
@@ -726,6 +729,8 @@ def get_annotations(
# But if we didn't get it, we use __annotations__ instead.
ann = _get_dunder_annotations(obj)
return annotations_to_string(ann)
+ case Format.VALUE_WITH_FAKE_GLOBALS:
+ raise ValueError("The VALUE_WITH_FAKE_GLOBALS format is for internal use only")
case _:
raise ValueError(f"Unsupported format {format!r}")