"""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)