Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
polakowo
GitHub Repository: polakowo/vectorbt
Path: blob/master/docs/update_api_nav.py
1147 views
1
from pathlib import Path
2
3
from ruamel.yaml import YAML
4
5
6
def generate_nav_from_api(nav, root_dir=".", curr_dir="api"):
7
root_dir = Path(root_dir)
8
curr_dir = Path(curr_dir)
9
full_path = root_dir / curr_dir
10
11
nav.append(str(curr_dir / "index.md"))
12
for p in sorted(full_path.iterdir()):
13
if p.is_dir():
14
sub_nav = []
15
generate_nav_from_api(sub_nav, root_dir=root_dir, curr_dir=curr_dir / p.name)
16
nav.append({p.name: sub_nav})
17
elif p.name != "index.md":
18
nav.append({p.stem: str(curr_dir / p.name)})
19
20
21
if __name__ == "__main__":
22
mkdocs_path = Path("mkdocs.yml")
23
24
yaml = YAML()
25
yaml.indent(mapping=2, sequence=4, offset=2)
26
yaml.width = 9999
27
yaml.explicit_start = False
28
yaml.explicit_end = False
29
yaml.preserve_quotes = True
30
31
data = yaml.load(mkdocs_path.read_text(encoding="utf-8"))
32
if "nav" not in data or not isinstance(data["nav"], list):
33
raise ValueError("mkdocs.yml has no top-level 'nav' list")
34
35
api_nav = []
36
generate_nav_from_api(api_nav, root_dir="docs")
37
38
for item in data["nav"]:
39
if isinstance(item, dict) and "API" in item:
40
item["API"] = api_nav
41
break
42
else:
43
raise ValueError("Couldn't find an 'API' section under nav")
44
45
yaml.dump(data, mkdocs_path.open("w", encoding="utf-8"))
46
47