-
Notifications
You must be signed in to change notification settings - Fork 249
/
update_toc_no_implemetation.py
64 lines (57 loc) · 2.79 KB
/
update_toc_no_implemetation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# This script is intended for use in intermediate doc repos generated from docs.ms CI.
# Given a reference ToC and a set of namespaces, limit the reference to ToC entries that contain
# namespaces in our set.
import argparse
import os
# by default, yaml does not maintain insertion order of the dicts
# given that this is intended to generate TABLE OF CONTENTS values,
# maintaining this order is important.
# The drop-in replacement oyaml is a handy solution for us.
import oyaml as yaml
TARGET_SOURCE_FOLDER = "docs-ref-autogen"
PREVIEW_SOURCE_FOLDER = "preview/docs-ref-autogen"
LEGACY_SOURCE_FOLDER = "legacy/docs-ref-autogen"
root_dir = os.path.abspath(os.path.join(os.path.abspath(__file__), ".."))
def check_implementation(uid_path) :
if "implementation" in uid_path:
return True
return False
def grep_children_namespaces(autogenerated_toc_yml, toc_items):
for elem in autogenerated_toc_yml:
if check_implementation(elem['uid']):
continue
toc_map = {}
toc_map['uid'] = elem['uid']
toc_map['name'] = elem['name']
if 'items' in elem:
child_toc_items = []
toc_map['items'] = grep_children_namespaces(elem['items'], child_toc_items)
elif 'type' in elem:
toc_map['type'] = elem['type']
toc_items.append(toc_map)
return toc_items
if __name__ == "__main__":
try:
with open(os.path.join(root_dir, TARGET_SOURCE_FOLDER, "toc.yml"), "r") as latest_reference_yml:
origin_latest_toc = yaml.safe_load(latest_reference_yml)
with open(os.path.join(root_dir, PREVIEW_SOURCE_FOLDER, "toc.yml"), "r") as preview_reference_yml:
origin_preview_toc = yaml.safe_load(preview_reference_yml)
with open(os.path.join(root_dir, LEGACY_SOURCE_FOLDER, "toc.yml"), "r") as legacy_reference_yml:
origin_legacy_toc = yaml.safe_load(legacy_reference_yml)
except Exception as f:
print(
"Execution requires that both the known namespaces and reference yml be defined."
)
present_in_latest = grep_children_namespaces(origin_latest_toc, [])
present_in_preview = grep_children_namespaces(origin_preview_toc, [])
present_in_legacy = grep_children_namespaces(origin_legacy_toc, [])
update_latest_content = yaml.dump(present_in_latest, default_flow_style=False)
update_preview_content = yaml.dump(present_in_preview, default_flow_style=False)
update_legacy_content = yaml.dump(present_in_legacy, default_flow_style=False)
# write the toc
with open(os.path.join(root_dir, TARGET_SOURCE_FOLDER, "toc.yml"), "w", encoding="utf-8") as latest_toc:
latest_toc.write(update_latest_content)
with open(os.path.join(root_dir, PREVIEW_SOURCE_FOLDER, "toc.yml"), "w", encoding="utf-8") as preview_toc:
preview_toc.write(update_preview_content)
with open(os.path.join(root_dir, LEGACY_SOURCE_FOLDER, "toc.yml"), "w", encoding="utf-8") as legacy_toc:
legacy_toc.write(update_legacy_content)