aboutsummaryrefslogtreecommitdiff
path: root/_exts/httpdomain/autohttp/flaskqref.py
diff options
context:
space:
mode:
Diffstat (limited to '_exts/httpdomain/autohttp/flaskqref.py')
-rw-r--r--_exts/httpdomain/autohttp/flaskqref.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/_exts/httpdomain/autohttp/flaskqref.py b/_exts/httpdomain/autohttp/flaskqref.py
new file mode 100644
index 0000000..c28bb15
--- /dev/null
+++ b/_exts/httpdomain/autohttp/flaskqref.py
@@ -0,0 +1,80 @@
1"""
2 sphinxcontrib.autohttp.flaskqref
3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5 The sphinx.ext.autodoc-style HTTP API quick reference
6 builder (from Flask)
7 for sphinxcontrib.httpdomain.
8
9 :copyright: Copyright 2011 by Hong Minhee
10 :license: BSD, see LICENSE for details.
11
12"""
13
14from docutils import nodes
15from docutils.statemachine import ViewList
16
17from sphinxcontrib import httpdomain
18from sphinx.util.nodes import nested_parse_with_titles
19
20from .flask import AutoflaskBase
21
22
23class QuickReferenceFlaskDirective(AutoflaskBase):
24
25
26 header = [ '',
27 '.. list-table::',
28 ' :widths: 20 45 35',
29 ' :header-rows: 1',
30 '',
31 ' * - Resource',
32 ' - Operation',
33 ' - Description'
34 ]
35
36 def run(self):
37 node = nodes.section()
38 node.document = self.state.document
39 result = ViewList()
40 for line in QuickReferenceFlaskDirective.header:
41 result.append(line, '<qrefflask>')
42 table={}
43 table_sorted_names=[]
44
45 for table_row in self.make_rst(qref=True):
46 name = table_row['name']
47 if table.get(name) is None:
48 table[name]=[]
49 table[name].append(table_row)
50 if name not in table_sorted_names:
51 table_sorted_names.append(name)
52
53 table_sorted_names.sort()
54
55 for name in table_sorted_names:
56 # Keep table display clean by not repeating duplicate
57 # resource names and descriptions
58 display_name = name
59 previous_description=None
60 for row in table[name]:
61 result.append(' * - %s' % display_name, '<qrefflask>')
62 display_name =""
63 result.append(row['operation'], '<qrefflask>')
64 description = row['description']
65 if previous_description is not None and previous_description == description:
66 description =""
67 else:
68 previous_description = description
69
70 result.append(' - %s' % description, '<qrefflask>')
71
72 result.append('', '<qrefflask>')
73 nested_parse_with_titles(self.state, result, node)
74 return node.children
75
76def setup(app):
77 if 'http' not in app.domains:
78 httpdomain.setup(app)
79 app.add_directive('qrefflask', QuickReferenceFlaskDirective)
80