MEGAINFRA-WEBAPP/scripts/site-model/model_keys.py

27 lines
1.5 KiB
Python

"""Progress keys of a model folder. MUST match src/lib/site-map/keys.ts (modelKeyIndex) —
both are tested against src/lib/site-map/__fixtures__/mini-model/expected-keys.json."""
import json
from pathlib import Path
def model_keys(folder):
folder = Path(folder)
load = lambda name: json.loads((folder / f"{name}.json").read_text())
road, services, earth, sched = load("bushveld"), load("services"), load("earthworks"), load("schedules")
keys = set()
for a in road["areas"]:
for layer in road["builds"].get(a["kind"], {}).get("layers", []):
keys.add(f"road:{a['section']}:{a['kind']}:{layer['id']}")
keys.update(f"kerb:{k['section']}" for k in road["kerbs"])
keys.update(f"peg:{p['name']}" for p in road["pegs"])
keys.update(f"swpipe:{p['from']}>{p['to']}" for p in services["stormwater"]["pipes"])
keys.update(f"sw:{s['name']}" for s in services["stormwater"]["structures"])
names = {m["id"]: m["name"] for m in services["sewer"]["manholes"]}
keys.update(f"srpipe:{names.get(p['from'], p['from'])}>{names.get(p['to'], p['to'])}" for p in services["sewer"]["pipes"])
keys.update(f"sr:{m['name']}" for m in services["sewer"]["manholes"])
keys.update(f"earth:{v['from']}-{v['to']}" for v in earth["volumes"])
keys.update(f"sign:{c}" for c in sched["signCounts"])
keys.update(f"stud:{t}" for t in sched["studCounts"])
keys.update(f"fit:{i}" for i in sched["waterFittings"])
keys.add("paint")
return sorted(keys)