tmp
/
pip-install-ghxuqwgs
/numpy_78e94bf2b6094bf9a1f3d92042f9bf46
/doc
/sphinxext
/numpydoc
/traitsdoc.py
""" | |
========= | |
traitsdoc | |
========= | |
Sphinx extension that handles docstrings in the Numpy standard format, [1] | |
and support Traits [2]. | |
This extension can be used as a replacement for ``numpydoc`` when support | |
for Traits is required. | |
.. [1] http://projects.scipy.org/numpy/wiki/CodingStyleGuidelines#docstring-standard | |
.. [2] http://code.enthought.com/projects/traits/ | |
""" | |
from __future__ import division, absolute_import, print_function | |
import inspect | |
import os | |
import pydoc | |
import collections | |
from . import docscrape | |
from . import docscrape_sphinx | |
from .docscrape_sphinx import SphinxClassDoc, SphinxFunctionDoc, SphinxDocString | |
from . import numpydoc | |
from . import comment_eater | |
class SphinxTraitsDoc(SphinxClassDoc): | |
def __init__(self, cls, modulename='', func_doc=SphinxFunctionDoc): | |
if not inspect.isclass(cls): | |
raise ValueError("Initialise using a class. Got %r" % cls) | |
self._cls = cls | |
if modulename and not modulename.endswith('.'): | |
modulename += '.' | |
self._mod = modulename | |
self._name = cls.__name__ | |
self._func_doc = func_doc | |
docstring = pydoc.getdoc(cls) | |
docstring = docstring.split('\n') | |
# De-indent paragraph | |
try: | |
indent = min(len(s) - len(s.lstrip()) for s in docstring | |
if s.strip()) | |
except ValueError: | |
indent = 0 | |
for n,line in enumerate(docstring): | |
docstring[n] = docstring[n][indent:] | |
self._doc = docscrape.Reader(docstring) | |
self._parsed_data = { | |
'Signature': '', | |
'Summary': '', | |
'Description': [], | |
'Extended Summary': [], | |
'Parameters': [], | |
'Returns': [], | |
'Raises': [], | |
'Warns': [], | |
'Other Parameters': [], | |
'Traits': [], | |
'Methods': [], | |
'See Also': [], | |
'Notes': [], | |
'References': '', | |
'Example': '', | |
'Examples': '', | |
'index': {} | |
} | |
self._parse() | |
def _str_summary(self): | |
return self['Summary'] + [''] | |
def _str_extended_summary(self): | |
return self['Description'] + self['Extended Summary'] + [''] | |
def __str__(self, indent=0, func_role="func"): | |
out = [] | |
out += self._str_signature() | |
out += self._str_index() + [''] | |
out += self._str_summary() | |
out += self._str_extended_summary() | |
for param_list in ('Parameters', 'Traits', 'Methods', | |
'Returns','Raises'): | |
out += self._str_param_list(param_list) | |
out += self._str_see_also("obj") | |
out += self._str_section('Notes') | |
out += self._str_references() | |
out += self._str_section('Example') | |
out += self._str_section('Examples') | |
out = self._str_indent(out,indent) | |
return '\n'.join(out) | |
def looks_like_issubclass(obj, classname): | |
""" Return True if the object has a class or superclass with the given class | |
name. | |
Ignores old-style classes. | |
""" | |
t = obj | |
if t.__name__ == classname: | |
return True | |
for klass in t.__mro__: | |
if klass.__name__ == classname: | |
return True | |
return False | |
def get_doc_object(obj, what=None, config=None): | |
if what is None: | |
if inspect.isclass(obj): | |
what = 'class' | |
elif inspect.ismodule(obj): | |
what = 'module' | |
elif isinstance(obj, collections.Callable): | |
what = 'function' | |
else: | |
what = 'object' | |
if what == 'class': | |
doc = SphinxTraitsDoc(obj, '', func_doc=SphinxFunctionDoc, config=config) | |
if looks_like_issubclass(obj, 'HasTraits'): | |
for name, trait, comment in comment_eater.get_class_traits(obj): | |
# Exclude private traits. | |
if not name.startswith('_'): | |
doc['Traits'].append((name, trait, comment.splitlines())) | |
return doc | |
elif what in ('function', 'method'): | |
return SphinxFunctionDoc(obj, '', config=config) | |
else: | |
return SphinxDocString(pydoc.getdoc(obj), config=config) | |
def setup(app): | |
# init numpydoc | |
numpydoc.setup(app, get_doc_object) | |