Skip to content

Conversation

@sobolevn
Copy link
Member

@sobolevnsobolevn commented Sep 6, 2025

Basically, there are two use-cases why we used attr_exceptions:

  1. To block access to self.__origin__.ATTR
  2. To prefer self.ATTR over self.__origin__.ATTR

Now we have two arrays for just that.

Before:

>>>dir(list[int]) ['__add__', '__args__', '__bases__', '__class__', '__class_getitem__', '__contains__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mro_entries__', '__mul__', '__ne__', '__new__', '__origin__', '__parameters__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__typing_unpacked_tuple_args__', '__unpacked__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

After:

>>>dir(list[int]) ['__add__', '__args__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mro_entries__', '__mul__', '__ne__', '__new__', '__origin__', '__parameters__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__typing_unpacked_tuple_args__', '__unpacked__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

.symmetric_difference of two:

{'__deepcopy__', '__bases__', '__copy__'}

Reasoning:

>>>list[int].__copy__Traceback (mostrecentcalllast): File"<python-input-2>", line1, in<module>list[int].__copy__AttributeError: 'types.GenericAlias'objecthasnoattribute'__copy__'. Didyoumean: '__doc__'? >>>list[int].__deepcopy__Traceback (mostrecentcalllast): File"<python-input-4>", line1, in<module>list[int].__deepcopy__AttributeError: 'types.GenericAlias'objecthasnoattribute'__deepcopy__'>>>list[int].__bases__Traceback (mostrecentcalllast): File"<python-input-3>", line1, in<module>list[int].__bases__AttributeError: 'types.GenericAlias'objecthasnoattribute'__bases__'. Didyoumean: '__args__'?

Copy link
Member

@emmatypingemmatyping left a comment

Choose a reason for hiding this comment

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

One suggestion but otherwise I think this makes sense!

@emmatyping
Copy link
Member

Should we backport this to 3.14 and 3.13?

@sobolevnsobolevn added needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes labels Sep 7, 2025
@sobolevn
Copy link
MemberAuthor

Yes, we totally should! Thanks for the review :)

@sobolevnsobolevn merged commit b0420b5 into python:mainSep 7, 2025
85 of 87 checks passed
@miss-islington-app
Copy link

Thanks @sobolevn for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14.
🐍🍒⛏🤖

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Sep 7, 2025
…8578) (cherry picked from commit b0420b5) Co-authored-by: sobolevn <[email protected]> Co-authored-by: Emma Smith <[email protected]>
@miss-islington-app
Copy link

Sorry, @sobolevn, I could not cleanly backport this to 3.13 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker b0420b505e6c9bbc8418e0f6240835ea777137b5 3.13 

@bedevere-app
Copy link

GH-138629 is a backport of this pull request to the 3.14 branch.

@bedevere-appbedevere-appbot removed the needs backport to 3.14 bugs and security fixes label Sep 7, 2025
@sobolevn
Copy link
MemberAuthor

Will work on a 3.13 backport a bit later :)

@bedevere-bot
Copy link

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

Hi! The buildbot ARM Raspbian Linux Asan 3.x (no tier) has failed when building commit b0420b5.

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

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

Click to see traceback logs
remote: Enumerating objects: 12, done. remote: Counting objects: 10% (1/10) remote: Counting objects: 20% (2/10) remote: Counting objects: 30% (3/10) remote: Counting objects: 40% (4/10) remote: Counting objects: 50% (5/10) remote: Counting objects: 60% (6/10) remote: Counting objects: 70% (7/10) remote: Counting objects: 80% (8/10) remote: Counting objects: 90% (9/10) remote: Counting objects: 100% (10/10) remote: Counting objects: 100% (10/10), done. remote: Compressing objects: 12% (1/8) remote: Compressing objects: 25% (2/8) remote: Compressing objects: 37% (3/8) remote: Compressing objects: 50% (4/8) remote: Compressing objects: 62% (5/8) remote: Compressing objects: 75% (6/8) remote: Compressing objects: 87% (7/8) remote: Compressing objects: 100% (8/8) remote: Compressing objects: 100% (8/8), done. remote: Total 12 (delta 2), reused 3 (delta 2), pack-reused 2 (from 1)  From https://github.com/python/cpython * branch main -> FETCH_HEAD Note: switching to 'b0420b505e6c9bbc8418e0f6240835ea777137b5'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c <new-branch-name> Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at b0420b505e6 gh-105487: Fix `__dir__` entries of `GenericAlias` (#138578) Switched to and reset branch 'main' configure: WARNING: no system libmpdec found; falling back to pure-Python version for the decimal module In file included from ./Include/internal/pycore_dict.h:11, from Objects/typeobject.c:7: In function ‘Py_DECREF_MORTAL’, inlined from ‘PyStackRef_XCLOSE’ at ./Include/internal/pycore_stackref.h:730:9, inlined from ‘_PyThreadState_PopCStackRef’ at ./Include/internal/pycore_stackref.h:810:5, inlined from ‘vectorcall_maybe’ at Objects/typeobject.c:3108:9: ./Include/internal/pycore_object.h:481:8: warning: array subscript 0 is outside array bounds of ‘PyObject[0]’{aka ‘struct _object[]’} [-Warray-bounds] 481 | if (--op->ob_refcnt == 0){|^ Timeout (0:05:00)! Thread 0x0000007fb00ef100 [Thread-2] (most recent call first): File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/subprocess.py", line 2042 in _wait File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/subprocess.py", line 1277 in wait File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 194 in _run_process File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 299 in run_tmp_files File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 363 in _runtest File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 403 in run File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/threading.py", line 1074 in _bootstrap_inner File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/threading.py", line 1036 in _bootstrap Thread 0x0000007fb08ff100 [Thread-1] (most recent call first): File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/subprocess.py", line 2057 in _wait File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/subprocess.py", line 1277 in wait File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 194 in _run_process File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 299 in run_tmp_files File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 363 in _runtest File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 403 in run File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/threading.py", line 1074 in _bootstrap_inner File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/threading.py", line 1036 in _bootstrap Thread 0x0000007fbc6b76c0 [python] (most recent call first): File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/utils.py", line 74 in format_duration File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 464 in get_running File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 551 in _get_result File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/run_workers.py", line 610 in run File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/main.py", line 455 in _run_tests_mp File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/main.py", line 561 in _run_tests File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/main.py", line 598 in run_tests File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/main.py", line 767 in main File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/libregrtest/main.py", line 775 in main File "/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/Lib/test/__main__.py", line 2 in <module> File "<frozen runpy>", line 88 in _run_code File "<frozen runpy>", line 198 in _run_module_as_main make: *** [Makefile:2494: buildbottest] Error 1 Cannot open file '/home/buildbot/buildarea/3.x.pablogsal-rasp.asan/build/test-results.xml' for upload

sobolevn added a commit to sobolevn/cpython that referenced this pull request Sep 8, 2025
…onGH-138578) (cherry picked from commit b0420b5) Co-authored-by: sobolevn <[email protected]> Co-authored-by: Emma Smith <[email protected]>
@bedevere-app
Copy link

GH-138640 is a backport of this pull request to the 3.13 branch.

@bedevere-appbedevere-appbot removed the needs backport to 3.13 bugs and security fixes label Sep 8, 2025
sobolevn added a commit that referenced this pull request Sep 8, 2025
lkollar pushed a commit to lkollar/cpython that referenced this pull request Sep 9, 2025
encukou pushed a commit that referenced this pull request Oct 7, 2025
…GH-138629) (cherry picked from commit b0420b5) Co-authored-by: sobolevn <[email protected]> Co-authored-by: Emma Smith <[email protected]>
Sign up for freeto 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.

3 participants

@sobolevn@emmatyping@bedevere-bot