Commit e92a5247 authored by Philipp Frank's avatar Philipp Frank


parent 39f865b2
Pipeline #12658 passed with stage
in 4 minutes and 14 seconds
from sphinx.ext.autosummary import Autosummary
from sphinx.ext.autosummary import get_documenter
from docutils.parsers.rst import directives
from sphinx.util.inspect import safe_getattr
import re
class AutoAutoSummary(Autosummary):
option_spec = {
'methods': directives.unchanged,
'attributes': directives.unchanged
required_arguments = 1
def get_members(obj, typ, include_public=None):
if not include_public:
include_public = []
items = []
for name in dir(obj):
documenter = get_documenter(safe_getattr(obj, name), obj)
except AttributeError:
if documenter.objtype == typ:
public = [x for x in items if x in include_public or not x.startswith('_')]
return public, items
def run(self):
clazz = self.arguments[0]
(module_name, class_name) = clazz.rsplit('.', 1)
m = __import__(module_name, globals(), locals(), [class_name])
c = getattr(m, class_name)
if 'methods' in self.options:
_, methods = self.get_members(c, 'method', ['__init__'])
self.content = ["~%s.%s" % (clazz, method) for method in methods if not method.startswith('_')]
if 'attributes' in self.options:
_, attribs = self.get_members(c, 'attribute')
self.content = ["~%s.%s" % (clazz, attrib) for attrib in attribs if not attrib.startswith('_')]
return super(AutoAutoSummary, self).run()
app.add_directive('autoautosummary', AutoAutoSummary)
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment