René's URL Explorer Experiment


Title: gh-83714: Implement os.statx by jbosboom · Pull Request #139178 · python/cpython · GitHub

Open Graph Title: gh-83714: Implement os.statx by jbosboom · Pull Request #139178 · python/cpython

X Title: gh-83714: Implement os.statx by jbosboom · Pull Request #139178 · python/cpython

Description: This PR implements os.statx, an interface to the Linux statx(2) system call introduced in kernel version 4.11 (April 2017) and first available in glibc version 2.28 (August 2018). This is derived from my earlier PR #136334 with the changes to os.stat removed, plus other changes (see below). This PR implements the return value of os.statx with a custom C type statx_result, which contains a struct statx and uses member and getset descriptors to lazily create Python objects on attribute access. In a comment on the previous PR, @vstinner suggested using types.SimpleNamespace as the return value. I implemented that on the statx-simplenamespace branch in my fork. Using the benchmarks from this script (note they are not all fair comparisons): Benchmark statx-nocache namespace statx-sizemtime-mask-size-mtimens 1.86 us 3.07 us: 1.65x slower statx-basic-all 2.29 us 4.57 us: 1.99x slower statx-everything-all 2.61 us 6.34 us: 2.43x slower It's slower than this PR when only size and mtime are requested, because it creates objects for the unconditionally valid members and both the float-seconds and int-nanoseconds timestamps. We could get some of this back by defining our own mask bits (bit 32 and above). As more bits are set in the mask and attributes are accessed, the gap widens. I'm not sure if that's due to dict resizing or slower attribute access or both, and I don't see how to improve either. The advantage of the namespace implementation is its simplicity, and any speed hacks would dilute that. (Also, because it doesn't create unrequested members, it's not a perfect wrapper around the system call. For "real" use it doesn't matter, but for testing the syscall, you'll miss some quirks. For example, btrfs seems to always return atime and btime, but returns mtime and ctime (always together) only if mtime and/or ctime were requested.) In this PR, most attributes are implemented with member descriptors pointing into the struct statx or a member in statx_result, so each attribute access on statx_result creates a new int or float object. My previous PR cached the created objects in the statx_result for the commonly-used attributes to avoid creating them more than once, which requires getset descriptors. Obviously, creating objects has a cost, but getset descriptors are slower than member descriptors. The crossover point turns out to be about two accesses (per attribute). If an attribute is only used once, this PR is faster; twice, slightly faster or even; three or more times, the previous PR is faster. I decided the complexity of the cache wasn't worth it. There's a cleaned-up version of the caching implementation on my fork if you want to take your own measurements. (I also didn't test the cache in the free-threaded build; I think the atomics/locking is correct, but I don't really understand how critical sections that can be "suspended" can possibly be safe.) Issue: gh-83714 📚 Documentation preview 📚: https://cpython-previews--139178.org.readthedocs.build/

Open Graph Description: This PR implements os.statx, an interface to the Linux statx(2) system call introduced in kernel version 4.11 (April 2017) and first available in glibc version 2.28 (August 2018). This is derived ...

X Description: This PR implements os.statx, an interface to the Linux statx(2) system call introduced in kernel version 4.11 (April 2017) and first available in glibc version 2.28 (August 2018). This is derived ...

Opengraph URL: https://github.com/python/cpython/pull/139178

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:45aaf9b1-8d7e-5d64-de65-74cb8b81b500
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id8E48:1BB425:305A040:41BD973:6A53DCF2
html-safe-nonceda3de0077e436fba95f64cb9443be45ae3af901a02ec093af9ad1cd76bbb851f
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4RTQ4OjFCQjQyNTozMDVBMDQwOjQxQkQ5NzM6NkE1M0RDRjIiLCJ2aXNpdG9yX2lkIjoiMzU4NDYxMjkyNDMwMjU0ODIxMCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac9f9755ef1bdf9c9a488da2a1e7c5111c7e14d42ef1f751aebb7fe21e9e439fef
hovercard-subject-tagpull_request:2846126326
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/python/cpython/pull/139178/files
twitter:imagehttps://avatars.githubusercontent.com/u/7757340?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/7757340?s=400&v=4
og:image:altThis PR implements os.statx, an interface to the Linux statx(2) system call introduced in kernel version 4.11 (April 2017) and first available in glibc version 2.28 (August 2018). This is derived ...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Noneb9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/python/cpython git https://github.com/python/cpython.git
octolytics-dimension-user_id1525981
octolytics-dimension-user_loginpython
octolytics-dimension-repository_id81598961
octolytics-dimension-repository_nwopython/cpython
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id81598961
octolytics-dimension-repository_network_root_nwopython/cpython
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release07a982c1d40157c619b364352b704c3ce66bb332
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/python/cpython/pull/139178/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython%2Fcpython%2Fpull%2F139178%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython%2Fcpython%2Fpull%2F139178%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=python%2Fcpython
Reloadhttps://github.com/python/cpython/pull/139178/files
Reloadhttps://github.com/python/cpython/pull/139178/files
Reloadhttps://github.com/python/cpython/pull/139178/files
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
python https://github.com/python
cpythonhttps://github.com/python/cpython
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
Notifications https://github.com/login?return_to=%2Fpython%2Fcpython
Fork 35k https://github.com/login?return_to=%2Fpython%2Fcpython
Star 73.8k https://github.com/login?return_to=%2Fpython%2Fcpython
Code https://github.com/python/cpython
Issues 5k+ https://github.com/python/cpython/issues
Pull requests 2.3k https://github.com/python/cpython/pulls
Actions https://github.com/python/cpython/actions
Projects https://github.com/python/cpython/projects
Security and quality 0 https://github.com/python/cpython/security
Insights https://github.com/python/cpython/pulse
Code https://github.com/python/cpython
Issues https://github.com/python/cpython/issues
Pull requests https://github.com/python/cpython/pulls
Actions https://github.com/python/cpython/actions
Projects https://github.com/python/cpython/projects
Security and quality https://github.com/python/cpython/security
Insights https://github.com/python/cpython/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fpython%2Fcpython%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fpython%2Fcpython%2Fissues%2Fnew%2Fchoose
vstinnerhttps://github.com/vstinner
python:mainhttps://github.com/python/cpython/tree/main
jbosboom:statx-nocachehttps://github.com/jbosboom/cpython/tree/statx-nocache
Conversation 97 https://github.com/python/cpython/pull/139178
Commits 14 https://github.com/python/cpython/pull/139178/commits
Checks 43 https://github.com/python/cpython/pull/139178/checks
Files changed https://github.com/python/cpython/pull/139178/files
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
gh-83714: Implement os.statx https://github.com/python/cpython/pull/139178/files#top
Show all changes 14 commits https://github.com/python/cpython/pull/139178/files
c2e6f81 Implement os.statx jbosboom Sep 20, 2025 https://github.com/python/cpython/pull/139178/commits/c2e6f81e4ab2a2cf2127ddb1c875278e862b13ff
a1110f3 Apply suggestions from code review jbosboom Sep 23, 2025 https://github.com/python/cpython/pull/139178/commits/a1110f39ab7f6716ae744031faa1c890dbeeb45d
51ef6cc Apply suggestions from code review jbosboom Sep 24, 2025 https://github.com/python/cpython/pull/139178/commits/51ef6cc044582c5a2af7cdb2a926224e506e784d
4bd9a9e Merge remote-tracking branch 'origin/main' into statx-nocache jbosboom Oct 9, 2025 https://github.com/python/cpython/pull/139178/commits/4bd9a9ebc5b34452e44e5dd861cb98ff69c5cfbc
76206ec Apply suggestions from code review jbosboom Oct 9, 2025 https://github.com/python/cpython/pull/139178/commits/76206ec94ee830781d3c7189ce565701d6749cb1
08af0a1 Make os.statx flags parameter keyword-only jbosboom Oct 12, 2025 https://github.com/python/cpython/pull/139178/commits/08af0a154702906af5eeeb24cc5a59a5c8a8a245
93cdcb4 Apply suggestions from code review jbosboom Oct 12, 2025 https://github.com/python/cpython/pull/139178/commits/93cdcb48a0af8a8df377a1746b894cbff7820727
7394c5e Assert os.stat_result members are in bounds at module creation time jbosboom Oct 12, 2025 https://github.com/python/cpython/pull/139178/commits/7394c5ea40263b16a77995528cdf8ba683238637
de38430 Merge remote-tracking branch 'upstream/main' into statx-nocache jbosboom Oct 12, 2025 https://github.com/python/cpython/pull/139178/commits/de38430fc4c51eb8cb5d9ffc322e1d9e2ac75835
d530ab9 Only expose named members of struct statx in os.statx_result jbosboom Oct 14, 2025 https://github.com/python/cpython/pull/139178/commits/d530ab920e467bb2c44be1d4373c0696a7d41f92
25f2348 Set statx_result's module-qualified name in spec jbosboom Oct 15, 2025 https://github.com/python/cpython/pull/139178/commits/25f23483aab7e0f0fb01c0311e77c09f1746c011
aedc98e Add What's New entry for os.statx jbosboom Oct 15, 2025 https://github.com/python/cpython/pull/139178/commits/aedc98ee2e045227cbd2384c11461f02cda0f2ef
b6f5ffd Apply suggestions from code review jbosboom Oct 15, 2025 https://github.com/python/cpython/pull/139178/commits/b6f5ffdac548df9c2f48695d4168da9794550f3a
24e607d Apply suggestions from code review vstinner Oct 15, 2025 https://github.com/python/cpython/pull/139178/commits/24e607d6ede8857541e07c4744e55ae9ee52fece
Clear filters https://github.com/python/cpython/pull/139178/files
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
os.rst https://github.com/python/cpython/pull/139178/files#diff-cd9132e5234678864807ae34a75c5d4d6b894b31c327a4d3620fbd0c37eec16e
stat.rst https://github.com/python/cpython/pull/139178/files#diff-a846c814cfe6049b067eaa91121471f0ccef065c74459411e594d824fec89eb3
3.15.rst https://github.com/python/cpython/pull/139178/files#diff-bd7a9c5b54eeb2b40e6db5e48e8d79d309d8738e776a40918773c6840189edf9
pycore_global_objects_fini_generated.h https://github.com/python/cpython/pull/139178/files#diff-31f682b2a04cda997f449a9816ee5fae305e3bfa7357afcb794615921c6a88d2
pycore_global_strings.h https://github.com/python/cpython/pull/139178/files#diff-7656e411eccd63ff8aab3e11de3f45035665f6b639206d3f440727dfb5e0ebcf
pycore_runtime_init_generated.h https://github.com/python/cpython/pull/139178/files#diff-69a1fc720f0b1e9005cf7717dd81c823399da81dd2f6480664b51238c1ef93f0
pycore_unicodeobject_generated.h https://github.com/python/cpython/pull/139178/files#diff-510f6084b63d39305481b719ae0a29475ba759e259a8e4cee4f07c451ffbb2d6
os.py https://github.com/python/cpython/pull/139178/files#diff-d2e8ad2f4746ac5fb230fa5a7345fd4332c56818489a2246472d38893aa82431
stat.py https://github.com/python/cpython/pull/139178/files#diff-d6066a653272efcb3d963675bd82184b90876648055d662b10089c9e4a545f0c
test_os.py https://github.com/python/cpython/pull/139178/files#diff-0c3c0e7d77a166e9089c5ddcc9d2db7c4fab9528044dec1fda4b3a6be569f784
test_posix.py https://github.com/python/cpython/pull/139178/files#diff-c2ffce99c501f7f4b6bde21947391671e95f592edcdf8bddbe4706a5c59d4417
ACKS https://github.com/python/cpython/pull/139178/files#diff-d1243956feb505c5459fc05387e194609efb5c350cee202942be47ed30d7d7d0
2025-09-18-21-25-41.gh-issue-83714.TQjDWZ.rst https://github.com/python/cpython/pull/139178/files#diff-f44afe1d09dcdcf9c90e269d05de4eb712feaf2a368f54b1860c2be2756b6c6e
posixmodule.c.h https://github.com/python/cpython/pull/139178/files#diff-f4ec448d9bc73d373452e97931de916ca83058ae93bce4a5853b8ac18c9d2cfa
posixmodule.c https://github.com/python/cpython/pull/139178/files#diff-b5b7e4f5599916b2018e911ef423f9d3fd46cb71268e1a73c74a1c9ae2cb6791
configure https://github.com/python/cpython/pull/139178/files#diff-90d08e583c4c9c6f391b2ae90f819f600a6326928ea9512c9e0c6d98e9f29ac2
configure.ac https://github.com/python/cpython/pull/139178/files#diff-49473dca262eeab3b4a43002adb08b4db31020d190caaad1594b47f1d5daa810
pyconfig.h.in https://github.com/python/cpython/pull/139178/files#diff-f67052280dd3a53f0e713339632a8c10bc2e420e24a70852d83aeb50d495835f
Doc/library/os.rsthttps://github.com/python/cpython/pull/139178/files#diff-cd9132e5234678864807ae34a75c5d4d6b894b31c327a4d3620fbd0c37eec16e
View file https://github.com/jbosboom/cpython/blob/24e607d6ede8857541e07c4744e55ae9ee52fece/Doc/library/os.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/139178/{{ revealButtonHref }}
https://github.com/python/cpython/pull/139178/files#diff-cd9132e5234678864807ae34a75c5d4d6b894b31c327a4d3620fbd0c37eec16e
https://github.com/python/cpython/pull/139178/files#diff-cd9132e5234678864807ae34a75c5d4d6b894b31c327a4d3620fbd0c37eec16e
Doc/library/stat.rsthttps://github.com/python/cpython/pull/139178/files#diff-a846c814cfe6049b067eaa91121471f0ccef065c74459411e594d824fec89eb3
View file https://github.com/jbosboom/cpython/blob/24e607d6ede8857541e07c4744e55ae9ee52fece/Doc/library/stat.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/139178/{{ revealButtonHref }}
https://github.com/python/cpython/pull/139178/files#diff-a846c814cfe6049b067eaa91121471f0ccef065c74459411e594d824fec89eb3
https://github.com/python/cpython/blob/main/.github/CODEOWNERS#L116
Doc/whatsnew/3.15.rsthttps://github.com/python/cpython/pull/139178/files#diff-bd7a9c5b54eeb2b40e6db5e48e8d79d309d8738e776a40918773c6840189edf9
View file https://github.com/jbosboom/cpython/blob/24e607d6ede8857541e07c4744e55ae9ee52fece/Doc/whatsnew/3.15.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/139178/{{ revealButtonHref }}
https://github.com/python/cpython/pull/139178/files#diff-bd7a9c5b54eeb2b40e6db5e48e8d79d309d8738e776a40918773c6840189edf9
https://github.com/python/cpython/pull/139178/files#diff-bd7a9c5b54eeb2b40e6db5e48e8d79d309d8738e776a40918773c6840189edf9
Include/internal/pycore_global_objects_fini_generated.hhttps://github.com/python/cpython/pull/139178/files#diff-31f682b2a04cda997f449a9816ee5fae305e3bfa7357afcb794615921c6a88d2
View file https://github.com/jbosboom/cpython/blob/24e607d6ede8857541e07c4744e55ae9ee52fece/Include/internal/pycore_global_objects_fini_generated.h
Open in desktop https://desktop.github.com
how customized files appear on GitHubhttps://docs.github.com/github/administering-a-repository/customizing-how-changed-files-appear-on-github
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
Include/internal/pycore_global_strings.hhttps://github.com/python/cpython/pull/139178/files#diff-7656e411eccd63ff8aab3e11de3f45035665f6b639206d3f440727dfb5e0ebcf
View file https://github.com/jbosboom/cpython/blob/24e607d6ede8857541e07c4744e55ae9ee52fece/Include/internal/pycore_global_strings.h
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/139178/{{ revealButtonHref }}
https://github.com/python/cpython/pull/139178/files#diff-7656e411eccd63ff8aab3e11de3f45035665f6b639206d3f440727dfb5e0ebcf
https://github.com/python/cpython/pull/139178/files#diff-7656e411eccd63ff8aab3e11de3f45035665f6b639206d3f440727dfb5e0ebcf
Include/internal/pycore_runtime_init_generated.hhttps://github.com/python/cpython/pull/139178/files#diff-69a1fc720f0b1e9005cf7717dd81c823399da81dd2f6480664b51238c1ef93f0
View file https://github.com/jbosboom/cpython/blob/24e607d6ede8857541e07c4744e55ae9ee52fece/Include/internal/pycore_runtime_init_generated.h
Open in desktop https://desktop.github.com
how customized files appear on GitHubhttps://docs.github.com/github/administering-a-repository/customizing-how-changed-files-appear-on-github
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
Include/internal/pycore_unicodeobject_generated.hhttps://github.com/python/cpython/pull/139178/files#diff-510f6084b63d39305481b719ae0a29475ba759e259a8e4cee4f07c451ffbb2d6
View file https://github.com/jbosboom/cpython/blob/24e607d6ede8857541e07c4744e55ae9ee52fece/Include/internal/pycore_unicodeobject_generated.h
Open in desktop https://desktop.github.com
how customized files appear on GitHubhttps://docs.github.com/github/administering-a-repository/customizing-how-changed-files-appear-on-github
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
Lib/os.pyhttps://github.com/python/cpython/pull/139178/files#diff-d2e8ad2f4746ac5fb230fa5a7345fd4332c56818489a2246472d38893aa82431
View file https://github.com/jbosboom/cpython/blob/24e607d6ede8857541e07c4744e55ae9ee52fece/Lib/os.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/139178/{{ revealButtonHref }}
https://github.com/python/cpython/pull/139178/files#diff-d2e8ad2f4746ac5fb230fa5a7345fd4332c56818489a2246472d38893aa82431
https://github.com/python/cpython/pull/139178/files#diff-d2e8ad2f4746ac5fb230fa5a7345fd4332c56818489a2246472d38893aa82431
https://github.com/python/cpython/pull/139178/files#diff-d2e8ad2f4746ac5fb230fa5a7345fd4332c56818489a2246472d38893aa82431
https://github.com/python/cpython/pull/139178/files#diff-d2e8ad2f4746ac5fb230fa5a7345fd4332c56818489a2246472d38893aa82431
https://github.com/python/cpython/pull/139178/files#diff-d2e8ad2f4746ac5fb230fa5a7345fd4332c56818489a2246472d38893aa82431
Lib/stat.pyhttps://github.com/python/cpython/pull/139178/files#diff-d6066a653272efcb3d963675bd82184b90876648055d662b10089c9e4a545f0c
View file https://github.com/jbosboom/cpython/blob/24e607d6ede8857541e07c4744e55ae9ee52fece/Lib/stat.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/139178/{{ revealButtonHref }}
https://github.com/python/cpython/pull/139178/files#diff-d6066a653272efcb3d963675bd82184b90876648055d662b10089c9e4a545f0c
https://github.com/python/cpython/pull/139178/files#diff-d6066a653272efcb3d963675bd82184b90876648055d662b10089c9e4a545f0c
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
Please reload this pagehttps://github.com/python/cpython/pull/139178/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.