"""Developer script to generate markdown tables.""" from jinja2 import BaseLoader, Environment, select_autoescape from netutils import lib_mapper from netutils.config.compliance import parser_map from netutils.utils import _JINJA2_FUNCTION_MAPPINGS LIB_MAPPER_TEMPLATE = """| {{ header_src }} | | {{ header_dst }} | | ---------- | -- | ------ | {%- for key, val in _dict|dictsort %} | {{ key }} | → | {{ val|safe }} | {%- endfor %} """ PARSER_MAPPER_TEMPLATE = """| OS Name | Parser Class | | ---------- | ------ | {%- for key, val in _dict|dictsort %} | {{ key }} | netutils.config.parser.{{ val.__name__ }} | {%- endfor %} """ JINJA_MAPPER_TEMPLATE = """| Filter name | Function | | ---------- | ------ | {%- for key, val in _dict|dictsort(false, 'value') %} | {{ key }} | netutils.{{ val }} | {%- endfor %} """ TEMPLATE = { "LIB_MAPPER_TEMPLATE": LIB_MAPPER_TEMPLATE, "PARSER_MAPPER_TEMPLATE": PARSER_MAPPER_TEMPLATE, "JINJA_MAPPER_TEMPLATE": JINJA_MAPPER_TEMPLATE, } MAPPER = { "LIB_MAPPER_TEMPLATE": { "aerleon": { "header_src": "AERLEON", "header_dst": "NORMALIZED", "_dict": lib_mapper.AERLEON_LIB_MAPPER, "_file": "docs/user/lib_mapper/aerleon.md", }, "aerleon_reverse": { "header_src": "NORMALIZED", "header_dst": "AERLEON", "_dict": lib_mapper.AERLEON_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/aerleon_reverse.md", }, "ansible": { "header_src": "ANSIBLE", "header_dst": "NORMALIZED", "_dict": lib_mapper.ANSIBLE_LIB_MAPPER, "_file": "docs/user/lib_mapper/ansible.md", }, "ansible_reverse": { "header_src": "NORMALIZED", "header_dst": "ANSIBLE", "_dict": lib_mapper.ANSIBLE_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/ansible_reverse.md", }, "capirca": { "header_src": "CAPIRCA", "header_dst": "NORMALIZED", "_dict": lib_mapper.CAPIRCA_LIB_MAPPER, "_file": "docs/user/lib_mapper/capirca.md", }, "capirca_reverse": { "header_src": "NORMALIZED", "header_dst": "CAPIRCA", "_dict": lib_mapper.CAPIRCA_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/capirca_reverse.md", }, "dna_center": { "header_src": "DNA_CENTER", "header_dst": "NORMALIZED", "_dict": lib_mapper.DNA_CENTER_LIB_MAPPER, "_file": "docs/user/lib_mapper/dna_center.md", }, "dna_center_reverse": { "header_src": "NORMALIZED", "header_dst": "DNA_CENTER", "_dict": lib_mapper.DNA_CENTER_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/dna_center_reverse.md", }, "forwardnetworks": { "header_src": "FORWARDNETWORKS", "header_dst": "NORMALIZED", "_dict": lib_mapper.FORWARDNETWORKS_LIB_MAPPER, "_file": "docs/user/lib_mapper/forwardnetworks.md", }, "forwardnetworks_reverse": { "header_src": "NORMALIZED", "header_dst": "FORWARDNETWORKS", "_dict": lib_mapper.FORWARDNETWORKS_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/forwardnetworks_reverse.md", }, "hierconfig": { "header_src": "HIERCONFIG", "header_dst": "NORMALIZED", "_dict": lib_mapper.HIERCONFIG_LIB_MAPPER, "_file": "docs/user/lib_mapper/hierconfig.md", }, "hierconfig_reverse": { "header_src": "NORMALIZED", "header_dst": "HIERCONFIG", "_dict": lib_mapper.HIERCONFIG_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/hierconfig_reverse.md", }, "librenms": { "header_src": "LIBRENMS", "header_dst": "NORMALIZED", "_dict": lib_mapper.LIBRENMS_LIB_MAPPER, "_file": "docs/user/lib_mapper/librenms.md", }, "librenms_reverse": { "header_src": "NORMALIZED", "header_dst": "LIBRENMS", "_dict": lib_mapper.LIBRENMS_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/librenms_reverse.md", }, "napalm": { "header_src": "NAPALM", "header_dst": "NORMALIZED", "_dict": lib_mapper.NAPALM_LIB_MAPPER, "_file": "docs/user/lib_mapper/napalm.md", }, "napalm_reverse": { "header_src": "NORMALIZED", "header_dst": "NAPALM", "_dict": lib_mapper.NAPALM_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/napalm_reverse.md", }, "ncclient": { "header_src": "NCCLIENT", "header_dst": "NORMALIZED", "_dict": lib_mapper.NCCLIENT_LIB_MAPPER, "_file": "docs/user/lib_mapper/ncclient.md", }, "ncclient_reverse": { "header_src": "NORMALIZED", "header_dst": "NCCLIENT", "_dict": lib_mapper.NCCLIENT_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/ncclient_reverse.md", }, "netmiko": { "header_src": "NETMIKO", "header_dst": "NORMALIZED", "_dict": lib_mapper.NETMIKO_LIB_MAPPER, "_file": "docs/user/lib_mapper/netmiko.md", }, "netmiko_reverse": { "header_src": "NORMALIZED", "header_dst": "NETMIKO", "_dict": lib_mapper.NETMIKO_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/netmiko_reverse.md", }, "netutilsparser": { "header_src": "NETUTILSPARSER", "header_dst": "NORMALIZED", "_dict": lib_mapper.NETUTILSPARSER_LIB_MAPPER, "_file": "docs/user/lib_mapper/netutilsparser.md", }, "netutilsparser_reverse": { "header_src": "NORMALIZED", "header_dst": "NETUTILSPARSER", "_dict": lib_mapper.NETUTILSPARSER_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/netutilsparser_reverse.md", }, "nist": { "header_src": "NIST", "header_dst": "NORMALIZED", "_dict": lib_mapper.NIST_LIB_MAPPER, "_file": "docs/user/lib_mapper/nist.md", }, "nist_reverse": { "header_src": "NORMALIZED", "header_dst": "NIST", "_dict": lib_mapper.NIST_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/nist_reverse.md", }, "ntctemplates": { "header_src": "NTCTEMPLATES", "header_dst": "NORMALIZED", "_dict": lib_mapper.NTCTEMPLATES_LIB_MAPPER, "_file": "docs/user/lib_mapper/ntctemplates.md", }, "ntctemplates_reverse": { "header_src": "NORMALIZED", "header_dst": "NTCTEMPLATES", "_dict": lib_mapper.NTCTEMPLATES_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/ntctemplates_reverse.md", }, "pyats": { "header_src": "PYATS", "header_dst": "NORMALIZED", "_dict": lib_mapper.PYATS_LIB_MAPPER, "_file": "docs/user/lib_mapper/pyats.md", }, "pyats_reverse": { "header_src": "NORMALIZED", "header_dst": "PYATS", "_dict": lib_mapper.PYATS_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/pyats_reverse.md", }, "pyntc": { "header_src": "PYNTC", "header_dst": "NORMALIZED", "_dict": lib_mapper.PYNTC_LIB_MAPPER, "_file": "docs/user/lib_mapper/pyntc.md", }, "pyntc_reverse": { "header_src": "NORMALIZED", "header_dst": "PYNTC", "_dict": lib_mapper.PYNTC_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/pyntc_reverse.md", }, "running_config_mapper": { "header_src": "NORMALIZED", "header_dst": "RUNNING_CONFIG_COMMAND", "_dict": lib_mapper.RUNNING_CONFIG_MAPPER, "_file": "docs/user/lib_mapper/running_config.md", }, "scrapli": { "header_src": "SCRAPLI", "header_dst": "NORMALIZED", "_dict": lib_mapper.SCRAPLI_LIB_MAPPER, "_file": "docs/user/lib_mapper/scrapli.md", }, "scrapli_reverse": { "header_src": "NORMALIZED", "header_dst": "SCRAPLI", "_dict": lib_mapper.SCRAPLI_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/scrapli_reverse.md", }, }, "PARSER_MAPPER_TEMPLATE": { "default": { "_dict": parser_map, "_file": "docs/dev/include_parser_list.md", }, }, "JINJA_MAPPER_TEMPLATE": { "default": { "_dict": _JINJA2_FUNCTION_MAPPINGS, "_file": "docs/user/include_jinja_list.md", }, }, } def main(test=False): """Generate or test generation of standard files.""" env = Environment(loader=BaseLoader, autoescape=select_autoescape()) for template_name, value in MAPPER.items(): for data in value.values(): _file = data["_file"] output = env.from_string(TEMPLATE[template_name]).render(**data) if test: with open(_file, encoding="utf8") as file: actual = file.read() if output != actual: return False else: with open(_file, "w", encoding="utf8") as file: file.write(output) return True if __name__ == "__main__": main()