diff options
author | Rob Ruana <rob@relentlessidiot.com> | 2014-04-19 03:58:11 -0400 |
---|---|---|
committer | Rob Ruana <rob@relentlessidiot.com> | 2014-04-19 03:58:11 -0400 |
commit | bbfd0d058aecf85bd3b711a846c83e2fe00fa136 (patch) | |
tree | bedcdd921908edabe9d2c639ff80f720ab7b8158 | |
parent | 397e3773c1e7190deb8e45e32a69d542d62add3b (diff) | |
download | sphinx-git-bbfd0d058aecf85bd3b711a846c83e2fe00fa136.tar.gz |
Closes 1455: Adds better handling of namedtuples in napoleon's skipmember function
-rw-r--r-- | sphinx/ext/napoleon/__init__.py | 22 | ||||
-rw-r--r-- | tests/test_napoleon.py | 8 |
2 files changed, 23 insertions, 7 deletions
diff --git a/sphinx/ext/napoleon/__init__.py b/sphinx/ext/napoleon/__init__.py index bceabd235..96ca81a56 100644 --- a/sphinx/ext/napoleon/__init__.py +++ b/sphinx/ext/napoleon/__init__.py @@ -355,13 +355,21 @@ def _skip_member(app, what, name, obj, skip, options): qualname = getattr(obj, '__qualname__', '') cls_path, _, _ = qualname.rpartition('.') if cls_path: - import importlib - import functools - - mod = importlib.import_module(obj.__module__) - cls = functools.reduce(getattr, cls_path.split('.'), mod) - cls_is_owner = (cls and hasattr(cls, name) and - name in cls.__dict__) + try: + if '.' in cls_path: + import importlib + import functools + + mod = importlib.import_module(obj.__module__) + mod_path = cls_path.split('.') + cls = functools.reduce(getattr, mod_path, mod) + else: + cls = obj.__globals__[cls_path] + except: + cls_is_owner = False + else: + cls_is_owner = (cls and hasattr(cls, name) and + name in cls.__dict__) else: cls_is_owner = False else: diff --git a/tests/test_napoleon.py b/tests/test_napoleon.py index e16c02b63..78d455a0c 100644 --- a/tests/test_napoleon.py +++ b/tests/test_napoleon.py @@ -15,6 +15,7 @@ try: from unittest.mock import Mock except ImportError: from mock import Mock +from collections import namedtuple from sphinx.application import Sphinx from sphinx.ext.napoleon import (_process_docstring, _skip_member, Config, setup) @@ -70,6 +71,8 @@ class SampleError(Exception): def __special_undoc__(self): pass +SampleNamedTuple = namedtuple('SampleNamedTuple', 'user_id block_type def_id') + class ProcessDocstringTest(TestCase): def test_modify_in_place(self): @@ -137,6 +140,11 @@ class SkipMemberTest(TestCase): self.assertEqual(skip, _skip_member(app, what, member, obj, skip, Mock())) + def test_namedtuple(self): + self.assertSkip('class', '_asdict', + SampleNamedTuple._asdict, False, + 'napoleon_include_private_with_doc') + def test_class_private_doc(self): self.assertSkip('class', '_private_doc', SampleClass._private_doc, False, |