Repository navigation
Preserve astuple filters for dictionary keys and values - #1641
Open
skyon0522-ai wants to merge 3 commits into
Open
skyon0522-ai wants to merge 3 commits into
skyon0522-ai wants to merge 3 commits into
Conversation
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
When
astuple()converts attrs instances stored in dictionary keys or values, it drops the supplied filter during recursion.For example, excluding
yleaves{(1, 2): (3, 4)}inside the output tuple instead of{(1,): (3,)}.Directly nested instances and instances in sequences already receive the filter.
Forward the filter to both dictionary recursion calls.
The regression covers keys and values,
dictandOrderedDict, and both collection-retention settings.The docstring describes the behavior and includes a
versionchanged:: 26.2.0directive; a news fragment is included.The same two missing
filter=filterarguments appeared in #1577 (closed).This PR isolates mapping filter propagation in a three-file change, with key/value and retention coverage and documentation, without the unrelated converter changes present in that proposal.
Validation
644b4e165bfbeee7e127de6fcbda08b64014316f.tests/test_funcs.py: 57 passed.pytest tests -qon source-and-tests revision3eb74883d6a04ee3a9198cef3291f86b94f97efc: 1405 passed, 10 skipped, 1 xfailed.The first full-suite attempts exposed missing package metadata and incomplete Git history in the local environment.
Installing the checkout in editable mode with complete history and tags resolved those failures; the full-suite result above is from the corrected environment.
After the PR number was assigned, the news fragment was renamed to
changelog.d/1641.change.md.Current head
9dbbede1f14c1f60ad155b75a208d53fbce55f98has identical source and tests to the full-suite revision above; only the fragment filename changed.OpenAI Codex assisted with the investigation, implementation, tests, and this description.
I have reviewed and understand the full diff and accept responsibility under the project's AI policy.
The type-stub, typing-fixture, re-export, and new API-index checklist items are not applicable: this change adds no public symbol and changes no signature.
They are checked as permitted by the template.
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.