Skip to content

Commit

Permalink
Fix sphinx-doc#8164: autodoc: Classes that inherit mocked class are n…
Browse files Browse the repository at this point in the history
…ot documented

Use ismock() to check a module member is a mocked or not. It allows not
to skip subclasses of mocked class.
  • Loading branch information
tk0miya committed Dec 28, 2020
1 parent 4761692 commit 59f0c07
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 2 deletions.
2 changes: 2 additions & 0 deletions CHANGES
Expand Up @@ -16,6 +16,8 @@ Features added
Bugs fixed
----------

* #8164: autodoc: Classes that inherit mocked class are not documented

Testing
--------

Expand Down
4 changes: 2 additions & 2 deletions sphinx/ext/autodoc/__init__.py
Expand Up @@ -28,7 +28,7 @@
from sphinx.environment import BuildEnvironment
from sphinx.ext.autodoc.importer import (get_class_members, get_module_members,
get_object_members, import_object)
from sphinx.ext.autodoc.mock import mock
from sphinx.ext.autodoc.mock import ismock, mock
from sphinx.locale import _, __
from sphinx.pycode import ModuleAnalyzer, PycodeError
from sphinx.util import inspect, logging
Expand Down Expand Up @@ -731,7 +731,7 @@ def is_filtered_inherited_member(name: str) -> bool:
isprivate = membername.startswith('_')

keep = False
if safe_getattr(member, '__sphinx_mock__', None) is not None:
if ismock(member):
# mocked module or object
pass
elif self.options.exclude_members and membername in self.options.exclude_members:
Expand Down
5 changes: 5 additions & 0 deletions tests/roots/test-ext-autodoc/target/need_mocks.py
Expand Up @@ -28,4 +28,9 @@ def decoratedMethod(self):
return None


class Inherited(missing_module.Class):
"""docstring"""
pass


sphinx.missing_module4.missing_function(len(missing_name2))
26 changes: 26 additions & 0 deletions tests/test_ext_autodoc_automodule.py
@@ -0,0 +1,26 @@
"""
test_ext_autodoc_autocmodule
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test the autodoc extension. This tests mainly the Documenters; the auto
directives are tested in a test source file translated by test_build.
:copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""

import pytest

from .test_ext_autodoc import do_autodoc


@pytest.mark.sphinx('html', testroot='ext-autodoc',
confoverrides={'autodoc_mock_imports': ['missing_module',
'missing_package1',
'missing_package2',
'missing_package3',
'sphinx.missing_module4']})
def test_subclass_of_mocked_object(app):
options = {'members': True}
actual = do_autodoc(app, 'module', 'target.need_mocks', options)
assert '.. py:class:: Inherited(*args: Any, **kwargs: Any)' in actual

0 comments on commit 59f0c07

Please sign in to comment.