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 | 708a9ecbb0e0e7caf94a617a77efc3e7b01d64de (patch) | |
| tree | bedcdd921908edabe9d2c639ff80f720ab7b8158 | |
| parent | f69b8eae1e93c3f6c92d589ba583c2ea33233907 (diff) | |
| download | sphinx-708a9ecbb0e0e7caf94a617a77efc3e7b01d64de.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 bceabd23..96ca81a5 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 e16c02b6..78d455a0 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, |
