Skip to content

Commit

Permalink
Merge pull request #9491 from tk0miya/9489_NewType
Browse files Browse the repository at this point in the history
Bugfix for HEAD of python-3.10
  • Loading branch information
tk0miya authored Jul 22, 2021
2 parents 9ebdc98 + 68fb548 commit 9218ad4
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 11 deletions.
4 changes: 4 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ Features added
Bugs fixed
----------

* #9489: autodoc: Custom types using ``typing.NewType`` are not displayed well
with the HEAD of 3.10
* #9490: autodoc: Some objects under ``typing`` module are not displayed well
with the HEAD of 3.10
* #9435: linkcheck: Failed to check anchors in github.com

Testing
Expand Down
13 changes: 8 additions & 5 deletions sphinx/util/inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,12 +211,15 @@ def getslots(obj: Any) -> Optional[Dict]:

def isNewType(obj: Any) -> bool:
"""Check the if object is a kind of NewType."""
__module__ = safe_getattr(obj, '__module__', None)
__qualname__ = safe_getattr(obj, '__qualname__', None)
if __module__ == 'typing' and __qualname__ == 'NewType.<locals>.new_type':
return True
if sys.version_info >= (3, 10):
return isinstance(obj, typing.NewType)
else:
return False
__module__ = safe_getattr(obj, '__module__', None)
__qualname__ = safe_getattr(obj, '__qualname__', None)
if __module__ == 'typing' and __qualname__ == 'NewType.<locals>.new_type':
return True
else:
return False


def isenumclass(x: Any) -> bool:
Expand Down
12 changes: 6 additions & 6 deletions sphinx/util/typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,17 +171,17 @@ def _restify_py37(cls: Optional[Type]) -> str:
text += r"\ [%s]" % ", ".join(restify(a) for a in cls.__args__)

return text
elif hasattr(cls, '__qualname__'):
if cls.__module__ == 'typing':
return ':class:`~%s.%s`' % (cls.__module__, cls.__qualname__)
else:
return ':class:`%s.%s`' % (cls.__module__, cls.__qualname__)
elif hasattr(cls, '_name'):
# SpecialForm
if cls.__module__ == 'typing':
return ':obj:`~%s.%s`' % (cls.__module__, cls._name)
else:
return ':obj:`%s.%s`' % (cls.__module__, cls._name)
elif hasattr(cls, '__qualname__'):
if cls.__module__ == 'typing':
return ':class:`~%s.%s`' % (cls.__module__, cls.__qualname__)
else:
return ':class:`%s.%s`' % (cls.__module__, cls.__qualname__)
elif isinstance(cls, ForwardRef):
return ':class:`%s`' % cls.__forward_arg__
else:
Expand Down Expand Up @@ -309,7 +309,7 @@ def stringify(annotation: Any) -> str:
elif annotation in INVALID_BUILTIN_CLASSES:
return INVALID_BUILTIN_CLASSES[annotation]
elif (getattr(annotation, '__module__', None) == 'builtins' and
hasattr(annotation, '__qualname__')):
getattr(annotation, '__qualname__', None)):
return annotation.__qualname__
elif annotation is Ellipsis:
return '...'
Expand Down

0 comments on commit 9218ad4

Please sign in to comment.