forked from dask/dask-gateway
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathautodoc_traitlets.py
67 lines (51 loc) · 2.02 KB
/
autodoc_traitlets.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""autodoc extension for configurable traitlets
Borrowed and heavily modified from jupyterhub/kubespawner:
https://github.com/jupyterhub/kubespawner/blob/master/docs/sphinxext/autodoc_traits.py
"""
from traitlets import TraitType, Undefined
from sphinx.ext.autodoc import DataDocumenter, ModuleDocumenter
class ConfigurableDocumenter(ModuleDocumenter):
"""Specialized Documenter subclass for traits with config=True"""
objtype = "configurable"
directivetype = "class"
def get_object_members(self, want_all):
"""Add traits with .tag(config=True) to members list"""
get_traits = (
self.object.class_own_traits
if self.options.inherited_members
else self.object.class_traits
)
trait_members = []
for name, trait in sorted(get_traits(config=True).items()):
# put help in __doc__ where autodoc will look for it
trait.__doc__ = trait.help
trait_members.append((name, trait))
return False, trait_members
def add_directive_header(self, sig):
pass
def add_content(self, more_content):
pass
class TraitDocumenter(DataDocumenter):
objtype = "trait"
directivetype = "data"
member_order = 1
priority = 100
@classmethod
def can_document_member(cls, member, membername, isattr, parent):
return isinstance(member, TraitType)
def format_name(self):
name = ".".join(self.fullname.split(".")[-2:])
return "c.%s" % name
def add_directive_header(self, sig):
default = self.object.default_value
if default is Undefined:
default = ""
# Ensures escape sequences render properly
default_s = repr(repr(default))[1:-1]
val = "= {}({})".format(self.object.__class__.__name__, default_s)
self.options.annotation = val
self.modname = ""
return super().add_directive_header(sig)
def setup(app):
app.add_autodocumenter(ConfigurableDocumenter)
app.add_autodocumenter(TraitDocumenter)