88 lines · 3.0 KB · Python
RawDownload
#!/usr/bin/env python3"""Make backend documentation""" import sysimport osimport ioimport subprocessfrom pathlib import Path marker = "{{< rem autogenerated options"start = marker + " start"stop = marker + " stop"end = ">}}" def find_backends():    """Return a list of all backends"""    return [ x for x in os.listdir("backend") if x not in ("all",) ] def output_docs(backend, out, cwd):    """Output documentation for backend options to out"""    out.flush()    subprocess.check_call(["./rclone", "--config=/notfound", "help", "backend", backend], stdout=out) def output_backend_tool_docs(backend, out, cwd):    """Output documentation for backend tool to out"""    out.flush()    subprocess.call(["./rclone", "--config=/notfound", "backend", "help", backend], stdout=out, stderr=subprocess.DEVNULL)    def alter_doc(backend):    """Alter the documentation for backend"""    rclone_bin_dir = Path(sys.path[0]).parent.absolute()    doc_file = "docs/content/"+backend+".md"    doc_file2 = "docs/content/"+backend+"/_index.md"    if not os.path.exists(doc_file) and os.path.exists(doc_file2):        doc_file = doc_file2    if not os.path.exists(doc_file):        raise ValueError("Didn't find doc file %s" % (doc_file,))    new_file = doc_file+"~new~"    altered = False    with open(doc_file, "r", encoding="utf_8") as in_file, open(new_file, "w", encoding="utf_8") as out_file:        in_docs = False        for line in in_file:            if not in_docs:                if start in line:                    in_docs = True                    start_full = (start + "\" - DO NOT EDIT - instead edit fs.RegInfo in backend/%s/%s.go then run make backenddocs\" " + end + "\n") % (backend, backend)                    out_file.write(start_full)                    output_docs(backend, out_file, rclone_bin_dir)                    output_backend_tool_docs(backend, out_file, rclone_bin_dir)                    out_file.write(stop+" "+end+"\n")                    altered = True            if not in_docs:                out_file.write(line)            if in_docs:                if stop in line:                    in_docs = False    os.rename(doc_file, doc_file+"~")    os.rename(new_file, doc_file)    if not altered:        raise ValueError("Didn't find '%s' markers for in %s" % (start, doc_file))  def main(args):    # single backend    if (len(args) == 2):        try:            alter_doc(args[1])            print("Added docs for %s backend" % args[1])        except Exception as e:            print("Failed adding docs for %s backend: %s" % (args[1], e))        return     # all backends    failed, success = 0, 0    for backend in find_backends():        try:            alter_doc(backend)        except Exception as e:            print("Failed adding docs for %s backend: %s" % (backend, e))            failed += 1        else:            success += 1    print("Added docs for %d backends with %d failures" % (success, failed)) if __name__ == "__main__":    main(sys.argv)