diff options
Diffstat (limited to 'sphinx/ext/autodoc/importer.py')
-rw-r--r-- | sphinx/ext/autodoc/importer.py | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/sphinx/ext/autodoc/importer.py b/sphinx/ext/autodoc/importer.py index 89aab8f0e..ffcb27ecc 100644 --- a/sphinx/ext/autodoc/importer.py +++ b/sphinx/ext/autodoc/importer.py @@ -13,7 +13,8 @@ import traceback import warnings from typing import Any, Callable, Dict, List, Mapping, NamedTuple, Optional, Tuple -from sphinx.deprecation import RemovedInSphinx40Warning, deprecated_alias +from sphinx.deprecation import (RemovedInSphinx40Warning, RemovedInSphinx50Warning, + deprecated_alias) from sphinx.pycode import ModuleAnalyzer, PycodeError from sphinx.util import logging from sphinx.util.inspect import (getannotations, getmro, getslots, isclass, isenumclass, @@ -23,6 +24,8 @@ if False: # For type annotation from typing import Type # NOQA + from sphinx.ext.autodoc import ObjectMember + logger = logging.getLogger(__name__) @@ -141,6 +144,9 @@ def get_module_members(module: Any) -> List[Tuple[str, Any]]: """Get members of target module.""" from sphinx.ext.autodoc import INSTANCEATTR + warnings.warn('sphinx.ext.autodoc.importer.get_module_members() is deprecated.', + RemovedInSphinx50Warning) + members = {} # type: Dict[str, Tuple[str, Any]] for name in dir(module): try: @@ -241,37 +247,27 @@ def get_object_members(subject: Any, objpath: List[str], attrgetter: Callable, return members -class ClassAttribute: - """The attribute of the class.""" - - def __init__(self, cls: Any, name: str, value: Any, docstring: Optional[str] = None): - self.class_ = cls - self.name = name - self.value = value - self.docstring = docstring - - def get_class_members(subject: Any, objpath: List[str], attrgetter: Callable - ) -> Dict[str, ClassAttribute]: + ) -> Dict[str, "ObjectMember"]: """Get members and attributes of target class.""" - from sphinx.ext.autodoc import INSTANCEATTR + from sphinx.ext.autodoc import INSTANCEATTR, ObjectMember # the members directly defined in the class obj_dict = attrgetter(subject, '__dict__', {}) - members = {} # type: Dict[str, ClassAttribute] + members = {} # type: Dict[str, ObjectMember] # enum members if isenumclass(subject): for name, value in subject.__members__.items(): if name not in members: - members[name] = ClassAttribute(subject, name, value) + members[name] = ObjectMember(name, value, class_=subject) superclass = subject.__mro__[1] for name in obj_dict: if name not in superclass.__dict__: value = safe_getattr(subject, name) - members[name] = ClassAttribute(subject, name, value) + members[name] = ObjectMember(name, value, class_=subject) # members in __slots__ try: @@ -280,7 +276,8 @@ def get_class_members(subject: Any, objpath: List[str], attrgetter: Callable from sphinx.ext.autodoc import SLOTSATTR for name, docstring in __slots__.items(): - members[name] = ClassAttribute(subject, name, SLOTSATTR, docstring) + members[name] = ObjectMember(name, SLOTSATTR, class_=subject, + docstring=docstring) except (AttributeError, TypeError, ValueError): pass @@ -291,9 +288,9 @@ def get_class_members(subject: Any, objpath: List[str], attrgetter: Callable unmangled = unmangle(subject, name) if unmangled and unmangled not in members: if name in obj_dict: - members[unmangled] = ClassAttribute(subject, unmangled, value) + members[unmangled] = ObjectMember(unmangled, value, class_=subject) else: - members[unmangled] = ClassAttribute(None, unmangled, value) + members[unmangled] = ObjectMember(unmangled, value) except AttributeError: continue @@ -304,7 +301,7 @@ def get_class_members(subject: Any, objpath: List[str], attrgetter: Callable for name in getannotations(cls): name = unmangle(cls, name) if name and name not in members: - members[name] = ClassAttribute(cls, name, INSTANCEATTR) + members[name] = ObjectMember(name, INSTANCEATTR, class_=cls) except AttributeError: pass @@ -316,8 +313,8 @@ def get_class_members(subject: Any, objpath: List[str], attrgetter: Callable analyzer.analyze() for (ns, name), docstring in analyzer.attr_docs.items(): if ns == qualname and name not in members: - members[name] = ClassAttribute(cls, name, INSTANCEATTR, - '\n'.join(docstring)) + members[name] = ObjectMember(name, INSTANCEATTR, class_=cls, + docstring='\n'.join(docstring)) except (AttributeError, PycodeError): pass except AttributeError: |