27 lines
1.5 KiB
Python
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)
|