fix: preserve explicitly declared slots - #1638
Open
anshurajbisoyi98-ctrl wants to merge 3 commits into
Open
anshurajbisoyi98-ctrl wants to merge 3 commits into
anshurajbisoyi98-ctrl wants to merge 3 commits into
Conversation
Signed-off-by: Anshu Raj Bisoyi <anshurajbisoyi98@gmail.com>
Signed-off-by: Anshu Raj Bisoyi <anshurajbisoyi98@gmail.com>
Signed-off-by: Anshu Raj Bisoyi <anshurajbisoyi98@gmail.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #1637.
Problem
When attrs rebuilds a slotted class, explicitly declared slots are omitted from the new class layout, but their descriptors still reference the original class.
Assigning to those slots then raises
TypeError.What I changed
The fix collects the class's own slot names, removes the original descriptors, and includes those names in the rebuilt layout.
Explicit slots stay outside the attrs data model unless they also correspond to fields.
The documentation now explains that values in unmanaged slots are not included in generated serialization.
It includes a version-change note for 26.2.0.
Tests
I added 11 regression cases covering:
__dict__and weak-reference slots.All 11 cases failed before the fix and passed afterward.
Validation
AI assistance
Codex assisted with investigation, implementation, tests, verification and documentation.
Pull Request Checklist
mainbranch..pyi).typing_tests/baseline.pyor, if necessary,typing_tests/mypy.py.attr/__init__.pyi, they've also been re-imported inattrs/__init__.pyi.docs/api.rstby hand.@attr.s()and@attrs.define()have to be added by hand too.versionadded,versionchanged, ordeprecateddirectives.The next version is the second number in the current release + 1.
The first number represents the current year.
So if the current version on PyPI is 26.2.0, the next version is gonna be 26.3.0.
If the next version is the first in the new year, it'll be 27.1.0.
.rstand.mdfiles is written using semantic newlines.changelog.d.Type-stub, API-listing, and signature checklist items are not applicable because no public API signatures or exports changed.