mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merge pull request #8447 from tk0miya/refactor_getall
refactor autodoc: Add sphinx.util.inspect.getall()
This commit is contained in:
commit
90dad94452
@ -961,7 +961,7 @@ class ModuleDocumenter(Documenter):
|
||||
def __init__(self, *args: Any) -> None:
|
||||
super().__init__(*args)
|
||||
merge_members_option(self.options)
|
||||
self.__all__ = None
|
||||
self.__all__ = None # type: Optional[Sequence[str]]
|
||||
|
||||
@classmethod
|
||||
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
||||
@ -985,26 +985,16 @@ class ModuleDocumenter(Documenter):
|
||||
return ret
|
||||
|
||||
def import_object(self, raiseerror: bool = False) -> bool:
|
||||
def is_valid_module_all(__all__: Any) -> bool:
|
||||
"""Check the given *__all__* is valid for a module."""
|
||||
if (isinstance(__all__, (list, tuple)) and
|
||||
all(isinstance(e, str) for e in __all__)):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
ret = super().import_object(raiseerror)
|
||||
|
||||
if not self.options.ignore_module_all:
|
||||
__all__ = getattr(self.object, '__all__', None)
|
||||
if is_valid_module_all(__all__):
|
||||
# valid __all__ found. copy it to self.__all__
|
||||
self.__all__ = __all__
|
||||
elif __all__:
|
||||
# invalid __all__ found.
|
||||
logger.warning(__('__all__ should be a list of strings, not %r '
|
||||
'(in module %s) -- ignoring __all__') %
|
||||
(__all__, self.fullname), type='autodoc')
|
||||
try:
|
||||
if not self.options.ignore_module_all:
|
||||
self.__all__ = inspect.getall(self.object)
|
||||
except ValueError as exc:
|
||||
# invalid __all__ found.
|
||||
logger.warning(__('__all__ should be a list of strings, not %r '
|
||||
'(in module %s) -- ignoring __all__') %
|
||||
(exc.args[0], self.fullname), type='autodoc')
|
||||
|
||||
return ret
|
||||
|
||||
|
@ -20,7 +20,7 @@ import warnings
|
||||
from functools import partial, partialmethod
|
||||
from inspect import Parameter, isclass, ismethod, ismethoddescriptor, ismodule # NOQA
|
||||
from io import StringIO
|
||||
from typing import Any, Callable, Dict, List, Mapping, Optional, Tuple, cast
|
||||
from typing import Any, Callable, Dict, List, Mapping, Optional, Sequence, Tuple, cast
|
||||
|
||||
from sphinx.deprecation import RemovedInSphinx40Warning, RemovedInSphinx50Warning
|
||||
from sphinx.pycode.ast import ast # for py35-37
|
||||
@ -137,6 +137,22 @@ def unwrap_all(obj: Any, *, stop: Callable = None) -> Any:
|
||||
return obj
|
||||
|
||||
|
||||
def getall(obj: Any) -> Optional[Sequence[str]]:
|
||||
"""Get __all__ attribute of the module as dict.
|
||||
|
||||
Return None if given *obj* does not have __all__.
|
||||
Raises ValueError if given *obj* have invalid __all__.
|
||||
"""
|
||||
__all__ = safe_getattr(obj, '__all__', None)
|
||||
if __all__ is None:
|
||||
return None
|
||||
else:
|
||||
if (isinstance(__all__, (list, tuple)) and all(isinstance(e, str) for e in __all__)):
|
||||
return __all__
|
||||
else:
|
||||
raise ValueError(__all__)
|
||||
|
||||
|
||||
def getslots(obj: Any) -> Optional[Dict]:
|
||||
"""Get __slots__ attribute of the class as dict.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user