add jinja2-based renderer for object diagrams
This commit is contained in:
parent
26d8655147
commit
200f2a3ede
4 changed files with 85 additions and 3 deletions
58
concrete_syntax/textual_od/renderer_jinja2.py
Normal file
58
concrete_syntax/textual_od/renderer_jinja2.py
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
import jinja2
|
||||
import os
|
||||
from uuid import UUID
|
||||
|
||||
THIS_DIR = os.path.dirname(__file__)
|
||||
|
||||
from api.od import ODAPI
|
||||
from concrete_syntax import common
|
||||
from services.bottom.V0 import Bottom
|
||||
from util.module_to_dict import module_to_dict
|
||||
|
||||
def render_od_jinja2(state, m, mm):
|
||||
bottom = Bottom(state)
|
||||
type_model_id = state.read_dict(state.read_root(), "SCD")
|
||||
scd_model = UUID(state.read_value(type_model_id))
|
||||
type_odapi = ODAPI(state, mm, scd_model)
|
||||
|
||||
objects = []
|
||||
links = []
|
||||
|
||||
to_add = bottom.read_keys(m)
|
||||
already_added = set()
|
||||
|
||||
while len(to_add) > 0:
|
||||
next_round = []
|
||||
for obj_name in to_add:
|
||||
obj = state.read_dict(m, obj_name)
|
||||
src, tgt = state.read_edge(obj)
|
||||
if src == None:
|
||||
# not a link
|
||||
objects.append((obj_name, obj))
|
||||
already_added.add(obj)
|
||||
else:
|
||||
# A link can only be written out after its source and target have been written out
|
||||
if src in already_added and tgt in already_added:
|
||||
links.append((obj_name, obj))
|
||||
else:
|
||||
# try again later
|
||||
next_round.append(obj_name)
|
||||
if len(next_round) == len(to_add):
|
||||
raise Exception("We got stuck!", next_round)
|
||||
to_add = next_round
|
||||
|
||||
loader = jinja2.FileSystemLoader(searchpath=THIS_DIR)
|
||||
environment = jinja2.Environment(
|
||||
loader=loader,
|
||||
# whitespace control:
|
||||
trim_blocks=True,
|
||||
lstrip_blocks=True,
|
||||
)
|
||||
template = environment.get_template("objectdiagrams.jinja2")
|
||||
return template.render({
|
||||
'objects': objects,
|
||||
'links': links,
|
||||
'odapi': ODAPI(state, m, mm),
|
||||
**globals()['__builtins__'],
|
||||
**module_to_dict(common),
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue