diff options
author | Jelle Zijlstra <jelle.zijlstra@gmail.com> | 2024-11-26 15:40:13 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-26 15:40:13 (GMT) |
commit | dcf629213bc046318c862ec0af5db3dfd1fc473a (patch) | |
tree | 95b5742a1fc2b20f4348d10746f7e520d75cde0d /Lib/annotationlib.py | |
parent | 2b0e2b2893a821ca36cd65a204bed932741ac189 (diff) | |
download | cpython-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.py | 13 |
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}") |