diff options
Diffstat (limited to 'docs/_ext')
| -rw-r--r-- | docs/_ext/testcoverage.py | 28 | ||||
| -rw-r--r-- | docs/_ext/vyos.py | 63 | 
2 files changed, 78 insertions, 13 deletions
| diff --git a/docs/_ext/testcoverage.py b/docs/_ext/testcoverage.py index 3d1461a9..c06cf301 100644 --- a/docs/_ext/testcoverage.py +++ b/docs/_ext/testcoverage.py @@ -1,14 +1,13 @@  '''  generate json with all commands from xml for vyos documentation coverage -  ''' -  import sys  import os  import json  import re  import logging +import datetime  from io import BytesIO  from lxml import etree as ET @@ -33,11 +32,32 @@ input_data = [      }  ] +vyos_commands_dir = "_include/coverage" +  node_data = {      'cfgcmd': {},      'opcmd': {},  } + +def get_vyos_commands(): +    return_data = None +    for (dirpath, dirnames, filenames) in os.walk(vyos_commands_dir): +        for file in filenames: +            with open(f"{vyos_commands_dir}/{file}") as f: +                data = json.load(f) +             +            if not return_data: +                return_data = data +             +            # find latestes export +            if datetime.datetime.fromisoformat(return_data['date']) < datetime.datetime.fromisoformat(data['date']): +                return_data = data +     +    return return_data + + +  def get_properties(p):      props = {}      props['valueless'] = False @@ -378,6 +398,4 @@ def override_element(l: list):          el.getparent().remove(el)  if __name__ == "__main__": -    res = get_working_commands() -    print(json.dumps(res)) -    #print(res['cfgcmd'][0]) +    get_vyos_commands() diff --git a/docs/_ext/vyos.py b/docs/_ext/vyos.py index caa51a90..cd8e561d 100644 --- a/docs/_ext/vyos.py +++ b/docs/_ext/vyos.py @@ -8,7 +8,7 @@ from docutils.parsers.rst import Directive, directives, states  from sphinx.util.docutils import SphinxDirective -from testcoverage import get_working_commands +from testcoverage import get_working_commands, get_vyos_commands  from sphinx.util import logging @@ -29,6 +29,11 @@ def setup(app):          'html'      )      app.add_config_value( +        'vyos_commands', +        get_vyos_commands(), +        'html' +    ) +    app.add_config_value(          'vyos_coverage',          {              'cfgcmd': [0,len(app.config.vyos_working_commands['cfgcmd'])], @@ -550,17 +555,20 @@ def build_row(app, fromdocname, rowdata): -def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type): +def process_coverage(app, fromdocname, doccmd, xmlcmd, vyoscmd, cli_type):      coverage_list = {}      strip_true_list = []      for cmd in doccmd:          coverage_item = {              'doccmd': None,              'xmlcmd': None, +            'vyoscmd': None,              'doccmd_item': None,              'xmlcmd_item': None, +            'vyoscmd_item': None,              'indocs': False,              'inxml': False, +            'invyos': False,              'xmlfilename': None          }          coverage_item['doccmd'] = cmd['cmd'] @@ -576,10 +584,13 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type):              coverage_item = {                  'doccmd': None,                  'xmlcmd': None, +                'vyoscmd': None,                  'doccmd_item': None,                  'xmlcmd_item': None, +                'vyoscmd_item': None,                  'indocs': False,                  'inxml': False, +                'invyos': False,                  'xmlfilename': None              }              coverage_item['xmlcmd'] = cmd['cmd'] @@ -592,7 +603,33 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type):              coverage_list[strip]['xmlcmd_item'] = cmd              coverage_list[strip]['inxml'] = True              coverage_list[strip]['xmlfilename'] = cmd['filename'] -            strip_true_list.append(strip) + +     +    for item in vyoscmd[cli_type]: +        cmd = ' '.join(item['cmd']) +        strip = strip_cmd(cmd) +        if strip not in coverage_list.keys(): +            coverage_item = { +                'doccmd': None, +                'xmlcmd': None, +                'vyoscmd': None, +                'doccmd_item': None, +                'xmlcmd_item': None, +                'vyoscmd_item': None, +                'indocs': False, +                'inxml': False, +                'invyos': False, +                'xmlfilename': None +            } +            coverage_item['vyoscmd'] = cmd +            coverage_item['invyos'] = True +            coverage_list[strip] = dict(coverage_item) +        else: +            coverage_list[strip]['vyoscmd'] = cmd +            coverage_list[strip]['invyos'] = True +            if coverage_list[strip]['indocs'] and coverage_list[strip]['inxml']: +                strip_true_list.append(strip) +      strip_true_list = list(set(strip_true_list)) @@ -605,11 +642,11 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type):      table = nodes.table() -    tgroup = nodes.tgroup(cols=3) +    tgroup = nodes.tgroup(cols=4)      table += tgroup -    header = (f'Status {len(strip_true_list)}/{len(coverage_list)}', 'Documentaion', 'XML') -    colwidths = (5, 50 , 50) +    header = (f'Status {len(strip_true_list)}/{len(coverage_list)}', 'Documentation', 'XML', f'in VyOS {vyoscmd["os"]}') +    colwidths = (5, 33 , 33, 33)      table = nodes.table()      tgroup = nodes.tgroup(cols=len(header))      table += tgroup @@ -623,6 +660,7 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type):      for entry in sorted(coverage_list):          doc_cmd_text = []          doc_xml_text = [] +        doc_vyos_text = []          if coverage_list[entry]['indocs']:              doc_cmd_text.append(coverage_list[entry]['doccmd_item'])          else: @@ -633,8 +671,14 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type):              doc_xml_text.append(coverage_list[entry]['xmlcmd'])          else:              doc_xml_text.append('Nothing found in XML Definitions') +         +        if coverage_list[entry]['invyos']: +            doc_vyos_text.append(coverage_list[entry]['vyoscmd']) +        else: +            doc_vyos_text.append('Nothing found in VyOS') + -        if not coverage_list[entry]['indocs'] or not coverage_list[entry]['inxml']: +        if not coverage_list[entry]['indocs'] or not coverage_list[entry]['inxml'] or not coverage_list[entry]['invyos']:              status = False          else:              status = True @@ -643,7 +687,8 @@ def process_coverage(app, fromdocname, doccmd, xmlcmd, cli_type):              (                  status,                  doc_cmd_text, -                doc_xml_text +                doc_xml_text, +                doc_vyos_text              )          ) @@ -678,6 +723,7 @@ def process_cmd_nodes(app, doctree, fromdocname):                          fromdocname,                          env.vyos_cfgcmd,                          app.config.vyos_working_commands['cfgcmd'], +                        app.config.vyos_commands,                          'cfgcmd'                          )                      ) @@ -695,6 +741,7 @@ def process_cmd_nodes(app, doctree, fromdocname):                          fromdocname,                          env.vyos_opcmd,                          app.config.vyos_working_commands['opcmd'], +                        app.config.vyos_commands,                          'opcmd'                          )                      ) | 
