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: parts = file_.split('.') 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__": main()