diff --git a/spec_parser/model.py b/spec_parser/model.py index 1e3b00d..6da6d73 100644 --- a/spec_parser/model.py +++ b/spec_parser/model.py @@ -113,11 +113,13 @@ def gen_all(self, dir, cfg): from .mkdocs import gen_mkdocs from .plantuml import gen_plantuml from .rdf import gen_rdf + from .redirects import gen_redirects gen_mkdocs(self, dir, cfg) gen_rdf(self, dir, cfg) gen_plantuml(self, dir, cfg) gen_jsondump(self, dir, cfg) + gen_redirects(self, dir + '/redirects', cfg) diff --git a/spec_parser/redirects.py b/spec_parser/redirects.py new file mode 100644 index 0000000..7db5170 --- /dev/null +++ b/spec_parser/redirects.py @@ -0,0 +1,54 @@ +# Creates redirects for the model references to the spec website + +# SPDX-License-Identifier: Apache-2.0 + +import logging +from pathlib import Path + + +def gen_redirects(model, dir, cfg): + p = Path(dir) + if p.exists(): + if not cfg.opt_force: + logging.error(f"Destination for redirects {dir} already exists, will not overwrite") + return + + p.mkdir() + + for ns in model.namespaces: + d = p / ns.name + d.mkdir() + + ''' The following does not work since it duplicates the name of the directory + f = p / ns.name + + redirect = f'https://spdx.github.io/spdx-spec/v3.0/model/{ns.name}/{ns.name}/index.html' + page = gen_html_redirect(redirect) + f.write_text(page) + ''' + + def _generate_in_dir(dirname, group, tmplfname): + for s in group.values(): + in_ns = s.ns + d = p / in_ns.name + d.mkdir(exist_ok=True) + f = d / s.name + redirect = f'https://spdx.github.io/spdx-spec/v3.0/model/{in_ns.name}/{dirname}/{s.name}/index.html' + page = gen_html_redirect(redirect) + f.write_text(page) + + _generate_in_dir("Classes", model.classes, "class.md.j2") + _generate_in_dir("Properties", model.properties, "property.md.j2") + _generate_in_dir("Vocabularies", model.vocabularies, "vocabulary.md.j2") + _generate_in_dir("Individuals", model.individuals, "individual.md.j2") + _generate_in_dir("Datatypes", model.datatypes, "datatype.md.j2") + +def gen_html_redirect(redirect): + retval = '\n' + retval = retval + '\n' + retval = retval + ' \n' + retval = retval + ' SPDX Model\n' + retval = retval + f' \n' + retval = retval + ' \n' + retval = retval + '' + return retval