From b6478accb03b3d4990f5858870c4ecb954525872 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 2 Feb 2019 01:04:13 +0900 Subject: [PATCH] Fix #5995: autodoc: autodoc_mock_imports conflict with metaclass --- CHANGES | 1 + sphinx/ext/autodoc/importer.py | 2 +- tests/test_ext_autodoc_importer.py | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 642f77db4..65d237fc6 100644 --- a/CHANGES +++ b/CHANGES @@ -33,6 +33,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 09f4be156..0bf0c279e 100644 --- a/sphinx/ext/autodoc/importer.py +++ b/sphinx/ext/autodoc/importer.py @@ -57,7 +57,7 @@ class _MockObject(object): 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 e0d9fb4ab..a5fd2eca7 100644 --- a/tests/test_ext_autodoc_importer.py +++ b/tests/test_ext_autodoc_importer.py @@ -9,6 +9,11 @@ :license: BSD, see LICENSE for details. """ +import abc +import sys + +import pytest + from sphinx.ext.autodoc.importer import _MockObject @@ -29,3 +34,21 @@ def test_MockObject(): assert isinstance(obj, SubClass) assert obj.method() == "string" assert isinstance(obj.other_method(), SubClass) + + +@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)