Skip to content
Snippets Groups Projects
make_html_headings_proppa.py 1.99 KiB
Newer Older
import os
import click
import re
import pickle


@click.command()
@click.option(
    "-b",
    "--buildpath",
    type=str,
    required=True,
    default="sphinx-doc/_build/html/_api",
    help="Relative path to the html api files to be manipulated (relative to sphinx root).",
)
@click.option(
    "-sr",
    "--sphinxroot",
    type=str,
    required=True,
    default="..",
    help="Relative path to the sphinx root.",
)
@click.option(
    "-p",
    "--pckpath",
    type=str,
    required=True,
    default="docs/doc_modules/func_modules",
    help="Relative path to the documented package (relative to sphinx root).",
)
def main(buildpath, sphinxroot, pckpath):
    root_path = os.path.abspath(sphinxroot)
    buildpath = os.path.join(root_path, buildpath)
    pckpath = os.path.join(root_path, pckpath)
    files = os.listdir(buildpath)
    # gather all files from the doc module
    files = [f for f in files if re.search("^docs\.", f)]
    with open(os.path.join(pckpath, "module_dict.pkl"), "rb") as file_:
        doc_mod_structure = pickle.load(file_)

    for key in doc_mod_structure.keys():
        # search for all function files assigned to the module
        mod_f = [f for f in files if re.search(f"(^|[.]){key}\.[^.]*\.html", f)]
        for file_ in mod_f:
            func = parts[-2]
            module_domain = ".".join(parts[:-2])
            with open(os.path.join(buildpath, file_), "r") as wf:
                code = wf.read()

            old_domain_str = f'<code class="sig-prename descclassname">{module_domain}'
            new_domain = [
                f.split(".")[0]
                for f in doc_mod_structure[key]
                if f.split(".")[1] == func
            ][0]
            new_domain_str = f'<code class="sig-prename descclassname">{new_domain}'
            code = code.replace(old_domain_str, new_domain_str)
            with open(os.path.join(buildpath, file_), "w+") as wf:
                wf.write(code)

if __name__ == "__main__":