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
|
import inspect
import itertools
import os
import jinja2
import six
import sphinx
import sphinx.ext.napoleon as napoleon
from sphinx.ext.napoleon.docstring import GoogleDocstring
def classref(value, short=True):
return value
if not inspect.isclass(value):
return ':class:%s' % value
tilde = '~' if short else ''
string = '%s.%s' % (value.__module__, value.__name__)
return ':class:`%sgitlab.objects.%s`' % (tilde, value.__name__)
def setup(app):
app.connect('autodoc-process-docstring', _process_docstring)
app.connect('autodoc-skip-member', napoleon._skip_member)
conf = napoleon.Config._config_values
for name, (default, rebuild) in six.iteritems(conf):
app.add_config_value(name, default, rebuild)
return {'version': sphinx.__display_version__, 'parallel_read_safe': True}
def _process_docstring(app, what, name, obj, options, lines):
result_lines = lines
docstring = GitlabDocstring(result_lines, app.config, app, what, name, obj,
options)
result_lines = docstring.lines()
lines[:] = result_lines[:]
class GitlabDocstring(GoogleDocstring):
def _build_doc(self, tmpl, **kwargs):
env = jinja2.Environment(loader=jinja2.FileSystemLoader(
os.path.dirname(__file__)), trim_blocks=False)
env.filters['classref'] = classref
template = env.get_template(tmpl)
output = template.render(**kwargs)
return output.split('\n')
def __init__(self, docstring, config=None, app=None, what='', name='',
obj=None, options=None):
super(GitlabDocstring, self).__init__(docstring, config, app, what,
name, obj, options)
if name.startswith('gitlab.v4.objects') and name.endswith('Manager'):
self._parsed_lines.extend(self._build_doc('manager_tmpl.j2',
cls=self._obj))
|