Fix #7886: autodoc: TypeError is raised on mocking generic-typed classes

This commit is contained in:
Takeshi KOMIYA 2020-06-30 01:16:38 +09:00
parent ec9af606c6
commit d6ca2f97be
3 changed files with 15 additions and 2 deletions

View File

@ -19,6 +19,7 @@ Features added
Bugs fixed
----------
* #7886: autodoc: TypeError is raised on mocking generic-typed classes
* #7839: autosummary: cannot handle umlauts in function names
* #7865: autosummary: Failed to extract summary line when abbreviations found
* #7866: autosummary: Failed to extract correct summary line when docstring

View File

@ -52,8 +52,8 @@ class _MockObject:
def __mro_entries__(self, bases: Tuple) -> Tuple:
return (self.__class__,)
def __getitem__(self, key: str) -> "_MockObject":
return _make_subclass(key, self.__display_name__, self.__class__)()
def __getitem__(self, key: Any) -> "_MockObject":
return _make_subclass(str(key), self.__display_name__, self.__class__)()
def __getattr__(self, key: str) -> "_MockObject":
return _make_subclass(key, self.__display_name__, self.__class__)()

View File

@ -11,6 +11,7 @@
import abc
import sys
from importlib import import_module
from typing import TypeVar
import pytest
@ -39,6 +40,7 @@ def test_MockObject():
assert isinstance(mock.attr1.attr2, _MockObject)
assert isinstance(mock.attr1.attr2.meth(), _MockObject)
# subclassing
class SubClass(mock.SomeClass):
"""docstring of SubClass"""
@ -51,6 +53,16 @@ def test_MockObject():
assert obj.method() == "string"
assert isinstance(obj.other_method(), SubClass)
# parametrized type
T = TypeVar('T')
class SubClass2(mock.SomeClass[T]):
"""docstring of SubClass"""
obj2 = SubClass2()
assert SubClass2.__doc__ == "docstring of SubClass"
assert isinstance(obj2, SubClass2)
def test_mock():
modname = 'sphinx.unknown'