Merge pull request #3071 from mleinart/autodoc/pass_through_decorators

Autodoc: Allow mocked module decorators to pass-through functions unchanged
This commit is contained in:
Takeshi KOMIYA 2016-11-02 23:01:16 +09:00 committed by GitHub
commit b32d9a9bc7
3 changed files with 23 additions and 0 deletions

View File

@ -93,6 +93,9 @@ class _MockModule(object):
self.__all__ = [] self.__all__ = []
def __call__(self, *args, **kwargs): def __call__(self, *args, **kwargs):
if args and type(args[0]) in [FunctionType, MethodType]:
# Appears to be a decorator, pass through unchanged
return args[0]
return _MockModule() return _MockModule()
def _append_submodule(self, submod): def _append_submodule(self, submod):

View File

@ -5,5 +5,14 @@ import missing_package1.missing_module1
from missing_package2 import missing_module2 from missing_package2 import missing_module2
from missing_package3.missing_module3 import missing_name from missing_package3.missing_module3 import missing_name
@missing_name
def decoratedFunction():
"""decoratedFunction docstring"""
return None
class TestAutodoc(object): class TestAutodoc(object):
"""TestAutodoc docstring.""" """TestAutodoc docstring."""
@missing_name
def decoratedMethod(self):
"""TestAutodoc::decoratedMethod docstring"""
return None

View File

@ -853,6 +853,17 @@ def test_generate():
assert_result_contains(' .. py:method:: CustomDataDescriptor.meth()', assert_result_contains(' .. py:method:: CustomDataDescriptor.meth()',
'module', 'test_autodoc') 'module', 'test_autodoc')
# test mocked module imports
options.members = ['TestAutodoc']
options.undoc_members = False
assert_result_contains('.. py:class:: TestAutodoc',
'module', 'autodoc_missing_imports')
assert_result_contains(' .. py:method:: TestAutodoc.decoratedMethod()',
'module', 'autodoc_missing_imports')
options.members = ['decoratedFunction']
assert_result_contains('.. py:function:: decoratedFunction()',
'module', 'autodoc_missing_imports')
# --- generate fodder ------------ # --- generate fodder ------------
__all__ = ['Class'] __all__ = ['Class']