diff --git a/CHANGES b/CHANGES index c7d8e4786..83da02cc1 100644 --- a/CHANGES +++ b/CHANGES @@ -232,6 +232,7 @@ Bugs fixed * #5960: LaTeX: modified PDF layout since September 2018 TeXLive update of :file:`parskip.sty` * #5958: versionadded directive causes crash with Python 3.5.0 +* #5995: autodoc: autodoc_mock_imports conflict with metaclass on Python 3.7 Testing -------- diff --git a/sphinx/ext/autodoc/importer.py b/sphinx/ext/autodoc/importer.py index 309415e9f..55e4ce6cc 100644 --- a/sphinx/ext/autodoc/importer.py +++ b/sphinx/ext/autodoc/importer.py @@ -58,7 +58,7 @@ class _MockObject: def __mro_entries__(self, bases): # type: (Tuple) -> Tuple - return bases + return (self.__class__,) def __getitem__(self, key): # type: (str) -> _MockObject diff --git a/tests/test_ext_autodoc_importer.py b/tests/test_ext_autodoc_importer.py index 03a597ee0..ea40632ef 100644 --- a/tests/test_ext_autodoc_importer.py +++ b/tests/test_ext_autodoc_importer.py @@ -8,6 +8,7 @@ :license: BSD, see LICENSE for details. """ +import abc import sys import pytest @@ -60,3 +61,21 @@ def test_mock_does_not_follow_upper_modules(): with mock(['sphinx.unknown.module']): with pytest.raises(ImportError): __import__('sphinx.unknown') + + +@pytest.mark.skipif(sys.version_info < (3, 7), reason='Only for py37 or above') +def test_abc_MockObject(): + mock = _MockObject() + + class Base: + @abc.abstractmethod + def __init__(self): + pass + + class Derived(Base, mock.SubClass): + pass + + obj = Derived() + assert isinstance(obj, Base) + assert isinstance(obj, _MockObject) + assert isinstance(obj.some_method(), Derived)