Fix TypeError in autodoc mock _make_subclass for non-string name arguments#14379
Closed
piyushhhxyz wants to merge 1 commit intosphinx-doc:masterfrom
Closed
Fix TypeError in autodoc mock _make_subclass for non-string name arguments#14379piyushhhxyz wants to merge 1 commit intosphinx-doc:masterfrom
piyushhhxyz wants to merge 1 commit intosphinx-doc:masterfrom
Conversation
Add defensive str() conversion in _make_subclass to handle cases where name is not a string (e.g. TypeVar, tuple of types). While __getitem__ already converts to str, _make_subclass can also be called from __new__ where the name argument may not be a string. This prevents TypeError when building docs for generically-typed classes that use TypeVar subscripts on mocked objects.
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
Add defensive
str()conversion in_make_subclassto handle cases where thenameparameter is not a string (e.g.TypeVar, tuple of types). While__getitem__already converts tostr,_make_subclasscan also be called from__new__where the name argument may not be a string.This prevents
TypeErrorwhen building docs for generically-typed classes that useTypeVarsubscripts on mocked objects.Closes #7898
Changes
sphinx/ext/autodoc/_dynamic/_mock.py: Wrapnamewithstr()in_make_subclassfor__display_name__,__name__, and thetype()callTesting
test_MockObjectat line 57-64 already testsTypeVarsubscripting)ec9af606c) with the equivalent fix applied: