Skip to content

GH-130614: pathlib ABCs: improve support for receiving path metadata - #131259

Merged
barneygale merged 3 commits into
python:mainfrom
barneygale:gh-130614-revise-copy
Mar 16, 2025
Merged

GH-130614: pathlib ABCs: improve support for receiving path metadata#131259
barneygale merged 3 commits into
python:mainfrom
barneygale:gh-130614-revise-copy

Conversation

@barneygale

@barneygalebarneygale commented Mar 14, 2025

Copy link
Copy Markdown
Contributor

In the private pathlib ABCs, replace _WritablePath._write_info() with _WritablePath._copy_from(). This provides the target path object with more control over the copying process, including support for querying and setting metadata before the path is created.

Adjust _ReadablePath.copy() so that it forwards its keyword arguments to _WritablePath._copy_from() of the target path object. This allows us to remove the unimplemented preserve_metadata argument in the ABC method, making it a Path exclusive.

…adata
In the private pathlib ABCs, replace `_WritablePath._write_info()` with
`_WritablePath._copy_from()`. This provides the target path object with
more control over the copying process, including support for querying and
setting metadata *before* the path is created.
Adjust `_ReadablePath.copy()` so that it forwards its keyword arguments to
`_WritablePath._copy_from()` of the target path object. This allows us to
remove the unimplemented *preserve_metadata* argument in the ABC method,
making it a `Path` exclusive.
@barneygale
barneygale merged commit 563ab5c into python:mainMar 16, 2025
@bedevere-bot

Copy link
Copy Markdown

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

Hi! The buildbot aarch64 Fedora Stable Clang 3.x (tier-2) has failed when building commit 563ab5c.

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/234/builds/7222) and take a look at the build logs.
  4. Check if the failure is related to this commit (563ab5c) 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/234/builds/7222

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.clang/build/Lib/test/test_perf_profiler.py", line 364, in test_python_calls_appear_in_the_stack_if_perf_activatedself.assertIn(f"py::foo:{script}", stdout)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'py::foo:/tmp/test_python_20igw685/tmpdkk7w3la/perftest.py' not found in 'python 787369 966891.551482: 1 cycles:Pu: \n\t ffff8f089ac0 _start+0x0 (/usr/lib/ld-linux-aarch64.so.1)\n\npython 787369 966891.551529: 1 cycles:Pu: \n\t ffff8f089ac0 _start+0x0 (/usr/lib/ld-linux-aarch64.so.1)\n\npython 787369 966891.552155: 1 cycles:Pu: \n\t ffff8f075064 <invalid>+0x384 (inlined)\n\t ffff8f075064 _dl_map_object_from_fd+0x384 (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f076133 _dl_map_object+0x1e7 (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f0715bf openaux+0x3f (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f070303 _dl_catch_exception+0x63 (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f071b33 _dl_map_object_deps+0x553 (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f08719f dl_main+0x139f (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f0845ff _dl_sysdep_start+0x1df (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f085b17 _dl_start_final+0x5ab (inlined)\n\t ffff8f085b17 _dl_start+0x5ab (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f089ad3 _start+0x13 (/usr/lib/ld-linux-aarch64.so.1)\n\npython 787369 966891.552224: 409 cycles:Pu: \n\t ffff8f08cd14 __memset_generic+0x114 (inlined)\n\t ffff8f0750db <invalid>+0x3fb (inlined)\n\t ffff8f0750db _dl_map_object_from_fd+0x3fb (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f076133 _dl_map_object+0x1e7 (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f0715bf openaux+0x3f (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f070303 _dl_catch_exception+0x63 (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f071b33 _dl_map_object_deps+0x553 (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f08719f dl_main+0x139f (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f0845ff _dl_sysdep_start+0x1df (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f085b17 _dl_start_final+0x5ab (inlined)\n\t ffff8f085b17 _dl_start+0x5ab (/usr/lib/ld-linux-aarch64.so.1)\n\t ffff8f089ad3 _start+0x13 (/usr/lib/ld-linux-aarch64.so.1)\n\npython 787369 966891.
yinit_config+0x143 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b5147 pyinit_core+0x1c3 (inlined)\n\t 6b5147 Py_InitializeFromConfig+0x1c3 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 7043bb pymain_init+0xcb (inlined)\n\t 7043bb pymain_main+0xcb (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 70442f Py_BytesMain+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t ffff8ee1625b __libc_start_call_main+0x7b (/usr/lib64/libc.so.6)\n\t ffff8ee1633b __libc_start_main@GLIBC_2.17+0x9b (inlined)\n\t 41efef _start+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\npython 787369 966891.555178: 529927 cycles:Pu: \n\t 5bcc40 _Py_TYPE+0x8df0 (inlined)\n\t 5bcc40 PyUnicode_GET_LENGTH+0x8df0 (inlined)\n\t 5bcc40 _PyUnicode_InitStaticStrings+0x8df0 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 5a2dff init_global_interned_strings+0xdf (inlined)\n\t 5a2dff _PyUnicode_InitGlobalObjects+0xdf (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7c2f pycore_init_global_objects+0x37 (inlined)\n\t 6b7c2f pycore_interp_init+0x37 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7a93 pyinit_config+0x1b7 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b5147 pyinit_core+0x1c3 (inlined)\n\t 6b5147 Py_InitializeFromConfig+0x1c3 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 7043bb pymain_init+0xcb (inlined)\n\t 7043bb pymain_main+0xcb (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 70442f Py_BytesMain+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t ffff8ee1625b __libc_start_call_main+0x7b (/usr/lib64/libc.so.6)\n\t ffff8ee1633b __libc_start_main@GLIBC_2.17+0x9b (inlined)\n\t 41efef _start+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\npython 787369 966891.556392: 1378144 cycles:Pu: \n\t ffff8ee996c0 __GI_memcpy+0x0 (inlined)\n\t 587b43 unicode_decode_utf8+0x1c3 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 5a39af PyUnicode_DecodeUTF8Stateful+0x2f (inlined)\n\t 5a39af PyUnicode_FromString+0x2f (inlined)\n\t 5a39af PyUnicode_InternFromString+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 4bb63f descr_new+0x53 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 4bb7b3 PyDescr_NewWrapper+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 563d23 add_operators+0x65b (inlined)\n\t 563d23 type_ready_fill_dict+0x65b (inlined)\n\t 563d23 type_ready+0x65b (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 565c3f init_static_type+0x293 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 524d33 _PyTypes_InitTypes+0x53 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7eaf pycore_init_types+0x1f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7d2f pycore_interp_init+0x137 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7a93 pyinit_config+0x1b7 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b5147 pyinit_core+0x1c3 (inlined)\n\t 6b5147 Py_InitializeFromConfig+0x1c3 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 7043bb py
Traceback (most recent call last):
File "/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/Lib/test/test_perf_profiler.py", line 364, in test_python_calls_appear_in_the_stack_if_perf_activatedself.assertIn(f"py::foo:{script}", stdout)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'py::foo:/tmp/test_python_krxvznh5/tmpkdl4c1cy/perftest.py' not found in 'python 798954 967047.772229: 1 cycles:Pu: \n\t ffffb997eac0 _start+0x0 (/usr/lib/ld-linux-aarch64.so.1)\n\npython 798954 967047.772255: 1 cycles:Pu: \n\t ffffb997eac0 _start+0x0 (/usr/lib/ld-linux-aarch64.so.1)\n\npython 798954 967047.773123: 1 cycles:Pu: \n\t ffffb97de440 getrlimit+0x0 (inlined)\n\t ffffb98392d7 __pthread_early_init+0x57 (inlined)\n\t ffffb98392d7 __libc_early_init+0x57 (/usr/lib64/libc.so.6)\n\t ffffb997c523 dl_main+0x1723 (/usr/lib/ld-linux-aarch64.so.1)\n\t ffffb99795ff _dl_sysdep_start+0x1df (/usr/lib/ld-linux-aarch64.so.1)\n\t ffffb997ab17 _dl_start_final+0x5ab (inlined)\n\t ffffb997ab17 _dl_start+0x5ab (/usr/lib/ld-linux-aarch64.so.1)\n\t ffffb997ead3 _start+0x13 (/usr/lib/ld-linux-aarch64.so.1)\n\npython 798954 967047.773158: 421 cycles:Pu: \n\tffffc95efcdff654 [unknown] ([unknown])\n\tffffc95efce00484 [unknown] ([unknown])\n\tffffc95efb9a15e4 [unknown] ([unknown])\n\t ffffb9839310 __pthread_early_init+0x90 (inlined)\n\t ffffb9839310 __libc_early_init+0x90 (/usr/lib64/libc.so.6)\n\t ffffb997c523 dl_main+0x1723 (/usr/lib/ld-linux-aarch64.so.1)\n\t ffffb99795ff _dl_sysdep_start+0x1df (/usr/lib/ld-linux-aarch64.so.1)\n\t ffffb997ab17 _dl_start_final+0x5ab (inlined)\n\t ffffb997ab17 _dl_start+0x5ab (/usr/lib/ld-linux-aarch64.so.1)\n\t ffffb997ead3 _start+0x13 (/usr/lib/ld-linux-aarch64.so.1)\n\npython 798954 967047.774108: 981 cycles:Pu: \n\t 690cb8 init_builtin_modules_table+0x50 (inlined)\n\t 690cb8 _PyImport_Init+0x50 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7987 pycore_init_runtime+0xab (inlined)\n\t 6b7987 pyinit_config+0xab (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b5147 pyinit_core+0x1c3 (inlined)\n\t 6b5147 Py_InitializeFromConfig+0x1c3 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 7043bb pymain_init+0xcb (inlined)\n\t 7043bb pymain_main+0xcb (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 70442f Py_BytesMain+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t ffffb971625b __libc_start_call_main+0x7b (/usr/lib64/libc.so.6)\n\t ffffb971633b __libc_start_main@GLIBC_2.17+0x9b (inlined)\n\t 41efef _start+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\npython 798954 967047.774353: 32366 cycles:Pu: \n\t 55a358 _PyType_InitCache+0x20 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6d05c3 init_interpreter+0x213 (inlined)\n\t 6d05c3 _PyInterpreterState_New+0x213 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b79d7 ro_invoke+0x127 (inlined)\n\t 56cb2b mro_internal_unlocked+0x127 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 563ab3 type_ready_mro+0x3eb (inlined)\n\t 563ab3 type_ready+0x3eb (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 565c3f init_static_type+0x293 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 524d33 _PyTypes_InitTypes+0x53 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7eaf pycore_init_types+0x1f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7d2f pycore_interp_init+0x137 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7a93 pyinit_config+0x1b7 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b5147 pyinit_core+0x1c3 (inlined)\n\t 6b5147 Py_InitializeFromConfig+0x1c3 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 7043bb pymain_init+0xcb (inlined)\n\t 7043bb pymain_main+0xcb (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 70442f Py_BytesMain+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t ffffb971625b __libc_start_call_main+0x7b (/usr/lib64/libc.so.6)\n\t ffffb971633b __libc_start_main@GLIBC_2.17+0x9b (inlined)\n\t 41efef _start+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\npython 798954 967047.775464: 418605 cycles:Pu: \n\t 5633c4 type_add_method+0x10 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 563f2f type_add_methods+0x867 (inlined)\n\t 563f2f type_ready_fill_dict+0x867 (inlined)\n\t 563f2f type_ready+0x867 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 565c3f init_static_type+0x293 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 524d33 _PyTypes_InitTypes+0x53 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7eaf pycore_init_types+0x1f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7d2f pycore_interp_init+0x137 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b7a93 pyinit_config+0x1b7 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 6b5147 pyinit_core+0x1c3 (inlined)\n\t 6b5147 Py_InitializeFromConfig+0x1c3 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 7043bb pymain_init+0xcb (inlined)\n\t 7043bb pymain_main+0xcb (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 70442f Py_BytesMain+0x27 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t ffffb971625b __libc_start_call_main+0x7b (/usr/lib64/libc.so.6)\n\t ffffb971633b __libc_start_main@GLIBC_2.17+0x9b (inlined)\n\t 41efef _start+0x2f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\npython 798954 967047.776565: 988650 cycles:Pu: \n\t 53f75c pymalloc_alloc+0x6c (inlined)\n\t 53f75c _PyObject_Malloc+0x6c (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 53fe33 _PyMem_DebugRawAlloc+0x43 (inlined)\n\t 53fe33 _PyMem_DebugRawMalloc+0x43 (inlined)\n\t 53fe33 _PyMem_DebugMalloc+0x43 (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 55b697 _PyObject_MallocWithType+0x7f (inlined)\n\t 55b697 _PyType_AllocNoTrack+0x7f (/home/buildbot/buildarea/3.x.cstratak-fedora-stable-aarch64.clang/build/python)\n\t 55b5eb PyType_GenericAlloc+0x13 (/ho

plashchynski pushed a commit to plashchynski/cpython that referenced this pull request Mar 17, 2025
…adata (python#131259)
In the private pathlib ABCs, replace `_WritablePath._write_info()` with
`_WritablePath._copy_from()`. This provides the target path object with
more control over the copying process, including support for querying and
setting metadata *before* the path is created.
Adjust `_ReadablePath.copy()` so that it forwards its keyword arguments to
`_WritablePath._copy_from()` of the target path object. This allows us to
remove the unimplemented *preserve_metadata* argument in the ABC method,
making it a `Path` exclusive.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@barneygale@bedevere-bot