forked from michiari/piacere-mc-openapi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gen_domlr_reference.py
52 lines (44 loc) · 2.74 KB
/
gen_domlr_reference.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
from mc_openapi.doml_mc.intermediate_model.metamodel import DOMLVersion, MetaModels
from pprint import pprint
from itertools import groupby
DOCS_PATH = lambda version: f"docs/reference_{version}.rst"
DOML_VERSIONS = [v for v in DOMLVersion]
with open(DOCS_PATH('index'), 'w') as findex:
print("DOML Reference", file=findex)
print("==============\n", file=findex)
print("For a comprehensive list of all the classes, attributes and associations supported in the DOML Model Checker and DOMLR, please consult one of the following pages.\n", file=findex)
for version in DOML_VERSIONS:
v_name = f':doc:`Reference for DOML {version.value} <reference_{version.value}>`'
print(v_name, file=findex)
print('-'*len(v_name), file=findex)
with open(DOCS_PATH(version.value), 'w') as f:
print(f"DOML {version.value} Reference", file=f)
print("=============================\n", file=f)
MM = MetaModels[version]
# ITEM => (package, class, assoc, attrs)
ITEMS = [(*(k.split("_", 1)), v.superclass, v.associations, v.attributes) for k, v in MM.items()]
# PKG => CLASS => {ASSOC, ATTRS}
ITEMS = {k: [dict(zip(("name", "superclass", "assocs", "attrs"), (x[1], x[2], x[3], x[4]))) for x in v] for k, v in groupby(ITEMS, key=lambda x: x[0])}
for pkg, clss in ITEMS.items():
print(f'\n{pkg}', file=f)
print('^'*(len(pkg)), file=f)
for cls in sorted(clss, key=lambda x: x.get('name')):
name = cls.get('name')
supcls = cls.get('superclass')
print(f'\n.. _{version.value}_{pkg}_{name}:', file=f)
print(f'\n{name}', file=f)
print('"'*(len(name)), file=f)
if supcls:
supcls_name = supcls.split("_", 1)[1]
print(f'*Inherits from* :ref:`{supcls_name} <{version.value}_{supcls}>`\n', file=f)
if (cls.get('assocs')):
print(f'* Associations:', file=f)
for assoc_k, assoc_v in cls.get('assocs').items():
dest_cls = assoc_v.class_.split("_", 1)[1]
print(f'\t* ``{assoc_k}`` → {dest_cls} [{assoc_v.multiplicity[0]}..{assoc_v.multiplicity[1]}]', file=f)
if (cls.get('attrs')):
print(f'* Attributes:', file=f)
for attr_k, attr_v in cls.get('attrs').items():
print(f'\t* ``{attr_k}`` [{attr_v.type}]', file=f)
print("\n\n", file=f)
print(f"Generated new reference for DOML {version.value} in {DOCS_PATH(version.value)}")