diff options
-rw-r--r-- | docs/Makefile | 4 | ||||
-rw-r--r-- | docs/_ext/testcoverage.py | 15 | ||||
-rw-r--r-- | docs/_ext/vyos.py | 53 | ||||
-rw-r--r-- | docs/_static/css/custom.css | 6 | ||||
-rw-r--r-- | docs/documentation.rst | 15 |
5 files changed, 82 insertions, 11 deletions
diff --git a/docs/Makefile b/docs/Makefile index 7bc0c5ab..cb6226af 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -27,3 +27,7 @@ livehtml: sphinx-autobuild --host $(AUTOHOST) --port $(AUTOPORT) $(AUTOOPTS) \ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +defaultvalue: export VYOS_DEFAULT=True +defaultvalue: + @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file diff --git a/docs/_ext/testcoverage.py b/docs/_ext/testcoverage.py index c06cf301..efe6e01d 100644 --- a/docs/_ext/testcoverage.py +++ b/docs/_ext/testcoverage.py @@ -175,12 +175,18 @@ def get_properties(p): def process_node(n, f): + props_elem = n.find("properties") children = n.find("children") command = n.find("command") children_nodes = [] owner = n.get("owner") node_type = n.tag + defaultvalue = n.find("defaultValue") + + if defaultvalue is not None: + defaultvalue = defaultvalue.text + name = n.get("name") props = get_properties(props_elem) @@ -218,7 +224,9 @@ def process_node(n, f): 'children': children_nodes, 'props': props, 'command': test_command, - 'filename': f + 'filename': f, + 'defaultvalue': defaultvalue + } return node @@ -232,9 +240,11 @@ def create_commands(data, parent_list=[], level=0): 'tag_help': [], 'level': level, 'no_childs': False, - 'filename': None + 'filename': None, + 'defaultvalue': None, } command['filename'] = data['filename'] + command['defaultvalue'] = data['defaultvalue'] command['name'].extend(parent_list) command['name'].append(data['name']) @@ -348,6 +358,7 @@ def get_working_commands(): 'children': [], 'command': node_data[kind][entry]['command'], 'filename': node_data[kind][entry]['filename'], + 'defaultvalue': node_data[kind][entry]['defaultvalue'] } config_tree_new[kind][node_0]['children'].extend(node_data[kind][entry]['children']) diff --git a/docs/_ext/vyos.py b/docs/_ext/vyos.py index e4f49da0..52364fc1 100644 --- a/docs/_ext/vyos.py +++ b/docs/_ext/vyos.py @@ -2,6 +2,7 @@ import re import json import os from datetime import datetime +from unittest import defaultTestLoader from docutils import io, nodes, utils, statemachine from docutils.parsers.rst.roles import set_classes from docutils.parsers.rst import Directive, directives, states @@ -356,6 +357,21 @@ class OpcmdlistDirective(Directive): return [oplist] +def get_default_value(title_text, config, cfgmode): + title_text = strip_cmd(title_text) + for cmd in config.vyos_working_commands[cfgmode]: + cmd_joined = ' '.join(cmd['name']) + cmd_striped = strip_cmd(cmd_joined) + if "table-size" in cmd['name']: + pass + #print(cmd) + #print(cmd_striped) + #print(title_text) + #print() + if cmd_striped == title_text: + if cmd['defaultvalue']: + return cmd['defaultvalue'] + return None class CmdDirective(SphinxDirective): @@ -368,19 +384,31 @@ class CmdDirective(SphinxDirective): content_list = [] title_text = '' content_text = '' + defaultvalue = None has_body = False cfgmode = self.custom_class + "cmd" + try: + if '' in self.content: + index = self.content.index('') + title_list = self.content[0:index] + content_list = self.content[index + 1:] + + title_text = ' '.join(title_list) + content_text = content_text + '\n'.join(content_list) + has_body = True + else: + title_list = self.content + title_text = ' '.join(title_list) + except Exception as e: + print("error", e) - if '' in self.content: - index = self.content.index('') - title_list = self.content[0:index] - content_list = self.content[index + 1:] - title_text = ' '.join(title_list) - content_text = '\n'.join(content_list) - has_body = True - else: - title_text = ' '.join(self.content) + # render defaultvalue + if os.getenv('VYOS_DEFAULT') or ':defaultvalue:' in title_text: + value = get_default_value(title_list, self.config, cfgmode) + title_text = title_text.replace(":defaultvalue:", '') + if value: + defaultvalue = f"default: {value}\n" anchor_id = nodes.make_id(self.custom_class + "cmd-" + title_text) target = nodes.target(ids=[anchor_id]) @@ -402,6 +430,11 @@ class CmdDirective(SphinxDirective): heading_element['classes'] += [self.custom_class + 'cmd-heading'] panel_element.append(heading_element) + if defaultvalue: + defaultvalue_element = nodes.paragraph(text=defaultvalue) + defaultvalue_element['classes'] = ["defaultvalue"] + panel_element.append(defaultvalue_element) + append_list = { 'docname': self.env.docname, @@ -484,9 +517,11 @@ def strip_cmd(cmd, debug=False): if debug: print(cmd) cmd = re.sub('\s+','',cmd) + cmd = cmd.replace(':defaultvalue:','') if debug: print(cmd) print("") + return cmd def build_row(app, fromdocname, rowdata): diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index 331a7720..7498b44d 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -87,6 +87,12 @@ span.opcmd:before { display: none; } +.defaultvalue{ + font-size: 90%; + color: gray; + margin-bottom: 5px; + +} a.cmdlink { font-size: 80%; diff --git a/docs/documentation.rst b/docs/documentation.rst index a89b6079..2a1b390f 100644 --- a/docs/documentation.rst +++ b/docs/documentation.rst @@ -244,6 +244,21 @@ For a inline configuration level command use ``:cfgcmd:`` :cfgcmd:`set interface ethernet eth0` + +To extract a defaultvalue from the XML definitions add a ``:defaultvalue:`` +to ``.. cfgcmd::`` directive. +To have this feature locally, the vyos-1x submodule must be initialized before. +Please be aware to not update the submodule in your PR. + +.. code-block:: none + + .. cfgcmd:: set system conntrack table-size <1-50000000> + :defaultvalue: + + The connection tracking table contains one entry for each connection being + tracked by the system. + + opcmd """"" |