diff options
author | guibog <guibog@douban.com> | 2013-10-23 16:36:45 +0800 |
---|---|---|
committer | guibog <guibog@douban.com> | 2013-10-23 16:36:45 +0800 |
commit | a8f65e9d3c8b3ffb16b0ad5004b420a60d1c6a60 (patch) | |
tree | 635e995e667706102e8fdb039ba2d968f7471f60 /sphinx/ext/autodoc.py | |
parent | be2f01815079fb97c426fbec80da2d314873b879 (diff) | |
download | sphinx-git-a8f65e9d3c8b3ffb16b0ad5004b420a60d1c6a60.tar.gz |
autodoc extension: add autodoc_mock_imports config value
Diffstat (limited to 'sphinx/ext/autodoc.py')
-rw-r--r-- | sphinx/ext/autodoc.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 348c072c4..a556edc8f 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -70,6 +70,26 @@ class Options(dict): return None +class _MockModule(object): + def __init__(self, *args, **kwargs): + pass + + def __call__(self, *args, **kwargs): + return _MockModule() + + @classmethod + def __getattr__(cls, name): + if name in ('__file__', '__path__'): + return '/dev/null' + elif name[0] == name[0].upper(): + # Not very good, we assume Uppercase names are classes... + mocktype = type(name, (), {}) + mocktype.__module__ = __name__ + return mocktype + else: + return _MockModule() + + ALL = object() INSTANCEATTR = object() @@ -332,6 +352,8 @@ class Documenter(object): self.modname, '.'.join(self.objpath)) try: dbg('[autodoc] import %s', self.modname) + for modname in self.env.config.autodoc_mock_imports: + self._mock_import(modname) __import__(self.modname) parent = None obj = self.module = sys.modules[self.modname] @@ -361,6 +383,15 @@ class Documenter(object): self.env.note_reread() return False + def _mock_import(self, modname): + if '.' in modname: + pkg, _n, mods = modname.rpartition('.') + self._mock_import(pkg) + mod = _MockModule() + sys.modules[modname] = mod + return mod + + def get_real_modname(self): """Get the real module name of an object to document. @@ -1428,6 +1459,7 @@ def setup(app): app.add_config_value('autodoc_member_order', 'alphabetic', True) app.add_config_value('autodoc_default_flags', [], True) app.add_config_value('autodoc_docstring_signature', True, True) + app.add_config_value('autodoc_mock_imports', [], True) app.add_event('autodoc-process-docstring') app.add_event('autodoc-process-signature') app.add_event('autodoc-skip-member') |