-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgraph.py
More file actions
60 lines (49 loc) · 2.23 KB
/
graph.py
File metadata and controls
60 lines (49 loc) · 2.23 KB
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
import html
from diagrams import Diagram, Cluster, Edge, Node
from diagrams.c4 import Person, Container, Database, System, SystemBoundary, Relationship
import json
def createCoupledCluster(atomics, name, instances, IC, EIC, EOC):
result = {}
flag = False
EIC_nodes = {}
EOC_nodes = {}
ACI = {}
ACO = {}
with Cluster(name):
for atomic in atomics:
if "Coupled" in atomic.keys():
ACI, ACO = createCoupledCluster(atomic['Atomics'], atomic['Coupled'].split('/')[-1].split('.')[0], atomic["Instance_names"], atomic['IC'], atomic['EIC'], atomic['EOC'])
else:
flag = True
atomic_name = atomic['Atomic'].split('/')[-1].split('.')[0]
instance_name = instances[atomic_name]
instance_name_escape = html.escape(instance_name)
atomic_name_escape = html.escape(atomic_name)
title = f'<<font point-size="12"><b>{instance_name_escape}</b></font><br/><font point-size="9">[{atomic_name_escape}]</font><br/><br/><br/>>'
atomic_node = Node(
label = title
)
result.update({instance_name : atomic_node})
if flag:
from_models = list(IC.keys())
for i in from_models:
if(i in EIC):
EIC_nodes.update({i : [IC[i], result[IC[i].split('->')[0]]]})
elif(IC[i] in EOC):
EOC_nodes.update({IC[i] : [i, result[i.split('->')[0]]]})
else:
if(IC[i].split('->')[-1].strip() in list(ACI.keys())):
result[i.split('->')[0]] >> Edge(label = i.split('->')[-1] + ':' + ACI[IC[i].split('->')[-1].strip()][0].split('->')[-1].strip()) >> ACI[IC[i].split('->')[-1].strip()][1]
elif(i.split('->')[-1].strip() in list(ACO.keys())):
ACO[i.split('->')[-1].strip()][1] >> Edge(label = (ACO[i.split('->')[-1].strip()][0].split('->')[-1].strip() + ":" + IC[i].split('->')[-1])) >> result[IC[i].split('->')[0]]
else:
result[i.split('->')[0]] >> Edge(label = (i.split('->')[-1] + ':' + IC[i].split('->')[-1])) >> result[IC[i].split('->')[0]]
return [EIC_nodes, EOC_nodes]
if __name__ == '__main__':
f = open('model_formalism.json')
data = json.load(f)
f.close()
with Diagram("Model Graph", show = True):
top = data['Top'][0]
top_name = top['Coupled'].split('/')[-1].split('.')[0]
createCoupledCluster(top["Atomics"], top_name, top['Instance_names'], top['IC'], top['EIC'], top['EOC'])