autosummary includes instance attributes

This commit is contained in:
Pawel Budzynski 2021-04-29 14:15:51 +02:00
parent af6e63ab70
commit 6f8d9390df
2 changed files with 14 additions and 7 deletions

View File

@ -662,8 +662,9 @@ def import_ivar_by_name(name: str, prefixes: List[str] = [None]) -> Tuple[str, A
name, attr = name.rsplit(".", 1) name, attr = name.rsplit(".", 1)
real_name, obj, parent, modname = import_by_name(name, prefixes) real_name, obj, parent, modname = import_by_name(name, prefixes)
qualname = real_name.replace(modname + ".", "") qualname = real_name.replace(modname + ".", "")
analyzer = ModuleAnalyzer.for_module(modname) analyzer = ModuleAnalyzer.for_module(getattr(obj, '__module__', modname))
if (qualname, attr) in analyzer.find_attr_docs(): analyzer.analyze()
if (qualname, attr) in analyzer.attr_docs or (qualname, attr) in analyzer.annotations:
return real_name + "." + attr, INSTANCEATTR, obj, modname return real_name + "." + attr, INSTANCEATTR, obj, modname
except (ImportError, ValueError, PycodeError): except (ImportError, ValueError, PycodeError):
pass pass

View File

@ -239,15 +239,21 @@ def generate_autosummary_content(name: str, obj: Any, parent: Any,
name, exc, type='autosummary') name, exc, type='autosummary')
return False return False
def attr_getter(obj, name, *defargs):
return sphinx.ext.autodoc.autodoc_attrgetter(app, obj, name, *defargs)
def get_all_members(obj):
all_members = sphinx.ext.autodoc.get_class_members(obj, [qualname], attr_getter)
return all_members
def get_members(obj: Any, types: Set[str], include_public: List[str] = [], def get_members(obj: Any, types: Set[str], include_public: List[str] = [],
imported: bool = True) -> Tuple[List[str], List[str]]: imported: bool = True) -> Tuple[List[str], List[str]]:
items: List[str] = [] items: List[str] = []
public: List[str] = [] public: List[str] = []
for name in dir(obj):
try: all_members = get_all_members(obj)
value = safe_getattr(obj, name) for name, member in all_members.items():
except AttributeError: value = member.object
continue
documenter = get_documenter(app, value, obj) documenter = get_documenter(app, value, obj)
if documenter.objtype in types: if documenter.objtype in types:
# skip imported members if expected # skip imported members if expected