Skip to content

gh-132064: Make annotationlib use __annotate__ if only it is present #132195

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 13, 2025

Conversation

JelleZijlstra
Copy link
Member

@JelleZijlstra JelleZijlstra commented Apr 7, 2025

Fixes #132064. Non-function objects for which update_wrapper() was used end up with only __annotate__, not __annotations__. It seems sensible for get_annotations() to support this case, and that also fixes the issue that was reported.

While implementing this I noticed a discrepancy between the docs and behavior of get_annotations(). The documentation said that the function would raise on unsupported objects; in fact it returned an empty dictionary, except if eval_str=True. I made it consistently raise a TypeError in this case instead, consistent with the docs.


📚 Documentation preview 📚: https://cpython-previews--132195.org.readthedocs.build/

Copy link
Member

@AlexWaygood AlexWaygood left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

haven't looked too deeply yet

Copy link
Member

@AlexWaygood AlexWaygood left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. Is it worth also adding an integration test to test_functools.py, covering the original way this issue was discovered?

@JelleZijlstra JelleZijlstra merged commit 4d3ad04 into python:main Apr 13, 2025
43 checks passed
@JelleZijlstra JelleZijlstra deleted the annolib-use-annotate branch April 13, 2025 23:32
@bedevere-bot
Copy link

⚠️⚠️⚠️ Buildbot failure ⚠️⚠️⚠️

Hi! The buildbot aarch64 Fedora Stable LTO 3.x (tier-2) has failed when building commit 4d3ad04.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/#/builders/336/builds/6676) and take a look at the build logs.
  4. Check if the failure is related to this commit (4d3ad04) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/#/builders/336/builds/6676

Failed tests:

  • test_perf_profiler

Failed subtests:

  • test_python_calls_appear_in_the_stack_if_perf_activated - test.test_perf_profiler.TestPerfProfilerWithDwarf.test_python_calls_appear_in_the_stack_if_perf_activated

Summary of the results of the build (if available):

==

Click to see traceback logs
Traceback (most recent call last):
  File "/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/Lib/test/test_perf_profiler.py", line 364, in test_python_calls_appear_in_the_stack_if_perf_activated
    self.assertIn(f"py::foo:{script}", stdout)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'py::foo:/tmp/test_python_9hvuddbi/tmpxgazzrtr/perftest.py' not found in 'python  747760 1746348.930320:          1 cycles:Pu: \n\t    ffff8bae1ac0 _start+0x0 (/usr/lib/ld-linux-aarch64.so.1)\n\npython  747760 1746348.930349:          1 cycles:Pu: \n\tffffaa282d37fc78 [unknown] ([unknown])\n\tffffaa282d38049c [unknown] ([unknown])\n\tffffaa282bf215e4 [unknown] ([unknown])\n\t    ffff8bae1ac0 _start+0x0 (/usr/lib/ld-linux-aarch64.so.1)\n\npython  747760 1746348.931109:          1 cycles:Pu: \n\t    ffff8bae0030 dl_main+0x2230 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8badc5ff _dl_sysdep_start+0x1df (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8baddb17 _dl_start_final+0x5ab (inlined)\n\t    ffff8baddb17 _dl_start+0x5ab (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8bae1ad3 _start+0x13 (/usr/lib/ld-linux-aarch64.so.1)\n\npython  747760 1746348.931134:        295 cycles:Pu: \n\t    ffff8bad0290 _dl_lookup_direct+0x0 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8bac7d83 _dl_call_libc_early_init+0x43 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8badf523 dl_main+0x1723 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8badc5ff _dl_sysdep_start+0x1df (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8baddb17 _dl_start_final+0x5ab (inlined)\n\t    ffff8baddb17 _dl_start+0x5ab (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8bae1ad3 _start+0x13 (/usr/lib/ld-linux-aarch64.so.1)\n\npython  747760 1746348.932284:        748 cycles:Pu: \n\t          64df28 _PyType_InitCache+0x288 (inlined)\n\t          64df28 init_interpreter+0x288 (inlined)\n\t          64df28 _PyInterpreterState_New+0x288 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          727c6b pycore_create_interpreter+0x87f (inlined)\n\t          727c6b pyinit_config+0x87f (inlined)\n\t       
le-aarch64.lto/build/python)\n\t          644f67 init_static_type+0xa7 (inlined)\n\t          644f67 _PyStaticType_InitBuiltin+0xa7 (inlined)\n\t          644f67 _PyTypes_InitTypes+0xa7 (inlined)\n\t          644f67 pycore_init_types+0xa7 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          646503 pycore_interp_init.lto_priv.0+0x103 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          727f1f pyinit_config+0xb33 (inlined)\n\t          727f1f pyinit_core.constprop.0+0xb33 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          64bcdf Py_InitializeFromConfig+0x37 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          685287 pymain_init+0x13f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          6869ef pymain_main+0x27 (inlined)\n\t          6869ef Py_BytesMain+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t    ffff8b87625b __libc_start_call_main+0x7b (/usr/lib64/libc.so.6)\n\t    ffff8b87633b __libc_start_main@@GLIBC_2.34+0x9b (/usr/lib64/libc.so.6)\n\t          41f5af _start+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\npython  747760 1746348.933586:     625658 cycles:Pu: \n\t          525944 slotptr+0x184 (inlined)\n\t          525944 add_operators+0x184 (inlined)\n\t          525944 type_ready_fill_dict+0x184 (inlined)\n\t          525944 type_ready.lto_priv.0+0x184 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          644f67 init_static_type+0xa7 (inlined)\n\t          644f67 _PyStaticType_InitBuiltin+0xa7 (inlined)\n\t          644f67 _PyTypes_InitTypes+0xa7 (inlined)\n\t          644f67 pycore_init_types+0xa7 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          646503 pycore_interp_init.lto_priv.0+0x103 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          727f1f pyinit_config+0xb33 (inlined)\n\t          727f1f pyinit_core.constprop.0+0xb33 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          64bcdf Py_InitializeFromConfig+0x37 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          685287 pymain_init+0x13f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          6869ef pymain_main+0x27 (inlined)\n\t          6869ef Py_BytesMain+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t    ffff8b87625b __libc_start_call_main+0x7b (/usr/lib64/libc.so.6)\n\t    ffff8b87633b __libc_start_main@@GLIBC_2.34+0x9b (/usr/lib64/libc.so.6)\n\t          41f5af _start+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\npython  747760 1746348.935109:    1663357 cycles:Pu: \n\t          5667a0 unicode_hash.lto_priv.0+0x0 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          50b0ef _PyObject_HashFast+0x5f (inlined)\n\t          50b0ef set_add_key+0x5f (inlined)\n\t          50b0ef set_update_iterable_lock_held.lto_priv.0+0x5f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          50c907 set_update_local+0x103 (inlined)\n\t          50c907 set_update_local+0x103 (inlined)\n\t          50c907 make_new_set.lto_priv.0+0x103 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          4865cb _PyObject_VectorcallTstate.lto_priv.0+0x3f (inlined)\n\t          486b93 _PyObject_CallFunctionVa.lto_priv.0+0xd3 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          486dab PyObject_CallFunction+0x6b (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          671153 list_stdlib_module_names+0xfd3 (inlined)\n\t          671153 _PySys_InitCore+0xfd3 (inlined)\n\t          671153 _PySys_Create+0xfd3 (/home/buildbot/buildarea/3.x.


Traceback (most recent call last):
  File "/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/Lib/test/test_perf_profiler.py", line 364, in test_python_calls_appear_in_the_stack_if_perf_activated
    self.assertIn(f"py::foo:{script}", stdout)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'py::foo:/tmp/test_python_grpd5h_o/tmpjd5sb3w6/perftest.py' not found in 'python  772807 1746459.318676:          1 cycles:Pu: \n\tffffaa282d37fc78 [unknown] ([unknown])\n\tffffaa282d38049c [unknown] ([unknown])\n\tffffaa282bf215e4 [unknown] ([unknown])\n\t    ffff84009ac0 _start+0x0 (/usr/lib/ld-linux-aarch64.so.1)\n\npython  772807 1746459.318730:          1 cycles:Pu: \n\t    ffff84009ac0 _start+0x0 (/usr/lib/ld-linux-aarch64.so.1)\n\npython  772807 1746459.319150:          1 cycles:Pu: \n\t    ffff8400b380 __open64_nocancel+0x40 (inlined)\n\t    ffff83ff86e3 _dl_sysdep_read_whole_file+0x23 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff84000a0f _dl_load_cache_lookup+0x127 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff83ff62c3 _dl_map_object+0x377 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff83ff15bf openaux+0x3f (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff83ff0303 _dl_catch_exception+0x63 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff83ff1b33 _dl_map_object_deps+0x553 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8400719f dl_main+0x139f (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff840045ff _dl_sysdep_start+0x1df (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff84005b17 _dl_start_final+0x5ab (inlined)\n\t    ffff84005b17 _dl_start+0x5ab (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff84009ad3 _start+0x13 (/usr/lib/ld-linux-aarch64.so.1)\n\npython  772807 1746459.319178:        382 cycles:Pu: \n\t    ffff8400af40 __fstat+0x0 (inlined)\n\t    ffff83ff870f _dl_sysdep_read_whole_file+0x4f (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff84000a0f _dl_load_cache_lookup+0x127 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff83ff62c3 _dl_map_object+0x377 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff83ff15bf openaux+0x3f (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff83ff0303 _dl_catch_exception+0x63 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff83ff1b33 _dl_map_object_deps+0x553 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff8400719f dl_main+0x139f (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff840045ff _dl_sysdep_start+0x1df (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff84005b17 _dl_start_final+0x5ab (inlined)\n\t    ffff84005b17 _dl_start+0x5ab (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff84009ad3 _start+0x13 (/usr/lib/ld-linux-aarch64.so.1)\n\npython  772807 1746459.320173:       1483 cycles:Pu: \n\t    ffff83fefd80 _dl_call_libc_early_init+0x40 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff84007523 dl_main+0x1723 (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff840045ff _dl_sysdep_start+0x1df (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff84005b17 _dl_start_final+0x5ab (inlined)\n\t    ffff84005b17 _dl_start+0x5ab (/usr/lib/ld-linux-aarch64.so.1)\n\t    ffff84009ad3 _start+0x13 (/usr/lib/ld-linux-aarch64.so.1)\n\npython  772807 1746459.320342:      60851 cycles:Pu: \n\t    ffff83dad790 __cxa_atexit+0x0 (/usr/lib64/libc.so.6)\n\t    ffff83d962e3 __libc_start_main@@GLIBC_2.34+0x43 (/usr/lib64
able-aarch64.lto/build/python)\n\npython  772807 1746459.322581:    1030066 cycles:Pu: \n\t          525dc4 slotptr+0x604 (inlined)\n\t          525dc4 slot_inherited+0x604 (inlined)\n\t          525dc4 add_operators+0x604 (inlined)\n\t          525dc4 type_ready_fill_dict+0x604 (inlined)\n\t          525dc4 type_ready.lto_priv.0+0x604 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          644f67 init_static_type+0xa7 (inlined)\n\t          644f67 _PyStaticType_InitBuiltin+0xa7 (inlined)\n\t          644f67 _PyTypes_InitTypes+0xa7 (inlined)\n\t          644f67 pycore_init_types+0xa7 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          646503 pycore_interp_init.lto_priv.0+0x103 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          727f1f pyinit_config+0xb33 (inlined)\n\t          727f1f pyinit_core.constprop.0+0xb33 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          64bcdf Py_InitializeFromConfig+0x37 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          685287 pymain_init+0x13f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          6869ef pymain_main+0x27 (inlined)\n\t          6869ef Py_BytesMain+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t    ffff83d9625b __libc_start_call_main+0x7b (/usr/lib64/libc.so.6)\n\t    ffff83d9633b __libc_start_main@@GLIBC_2.34+0x9b (/usr/lib64/libc.so.6)\n\t          41f5af _start+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\npython  772807 1746459.324747:    2951478 cycles:Pu: \n\t          518e84 lookup_tp_dict+0x4 (inlined)\n\t          518e84 _PyType_GetDict+0x4 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          645fef _PyContext_Init+0x112f (inlined)\n\t          645fef pycore_init_types+0x112f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          646503 pycore_interp_init.lto_priv.0+0x103 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          727f1f pyinit_config+0xb33 (inlined)\n\t          727f1f pyinit_core.constprop.0+0xb33 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          64bcdf Py_InitializeFromConfig+0x37 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          685287 pymain_init+0x13f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          6869ef pymain_main+0x27 (inlined)\n\t          6869ef Py_BytesMain+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t    ffff83d9625b __libc_start_call_main+0x7b (/usr/lib64/libc.so.6)\n\t    ffff83d9633b __libc_start_main@@GLIBC_2.34+0x9b (/usr/lib64/libc.so.6)\n\t          41f5af _start+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\npython  772807 1746459.328905:    7152442 cycles:Pu: \n\t    ffff83e1ac38 __strlen_asimd+0x38 (/usr/lib64/libc.so.6)\n\t          61ed53 _PyUnicode_EqualToASCIIString+0x73 (inlined)\n\t          61ed53 is_builtin+0x73 (inlined)\n\t          61ed53 _imp_is_builtin_impl+0x73 (inlined)\n\t          61ed53 _imp_is_builtin.lto_priv.0+0x73 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          5d74fb _PyEval_EvalFrameDefault+0x665b (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          5e02cb _PyEval_EvalFrame+0x22b (inlined)\n\t          5e02cb _PyEval_Vector+0x22b (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          486c73 _PyObject_VectorcallTstate+0x1b3 (inlined)\n\t          486c73 _PyObject_CallFunctionVa.lto_priv.0+0x1b3 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.lto/build/python)\n\t          4870d3 callmethod+0xb3 (inlined)\n\t          4870d3 PyObject_CallMethod+0xb3 (/h

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

singledispatch.register fails for lru_cache decorated functions
3 participants