Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork34.2k
gh-145688: Fix _get_protocol_attrs matching user classes named "Protocol" or "Generic"#145724
Open
mvanhorn wants to merge 1 commit intopython:mainfrom
Open
gh-145688: Fix _get_protocol_attrs matching user classes named "Protocol" or "Generic"#145724mvanhorn wants to merge 1 commit intopython:mainfrom
mvanhorn wants to merge 1 commit intopython:mainfrom
Conversation
…"Protocol" or "Generic"The `_get_protocol_attrs` function used `base.__name__ in {'Protocol', 'Generic'}`to skip the base typing classes, which also skipped user-defined Protocolsubclasses that happened to be named "Protocol" or "Generic". This caused`get_protocol_members()` and `__protocol_attrs__` to return empty resultsfor such classes.Changed to check both `__name__` and `__module__` to ensure only the actual`typing.Protocol` and `typing.Generic` classes are skipped.Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> 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 freeto 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.
Uh oh!
There was an error while loading.Please reload this page.
Fixes#145688
Summary
_get_protocol_attrs()usedbase.__name__ in {'Protocol', 'Generic'}to skip the basetypingclasses when collecting protocol members. This also matched user-defined Protocol subclasses that happened to share those names, causingget_protocol_members()and__protocol_attrs__to return empty results.Fix: Changed the check to also verify
base.__module__ == 'typing', so only the actualtyping.Protocolandtyping.Genericare skipped.Note: A pure identity check (
base is Protocol) was considered but doesn't work because_get_protocol_attrsis called during module initialization beforeProtocolis defined.Test plan
test_get_protocol_members_named_protocol_or_genericcovering both "Protocol" and "Generic" named subclassestest_typingtests passThis contribution was developed with AI assistance (Claude Code).