Files
OBE-Mapping/tools/extract_seed.py
T
Power BI Dev 9be6bd03e3 Gabungkan aplikasi RPS & Portofolio OBE (dashboard jadi bagian aplikasi)
Dashboard pemetaan statis kini dilayani aplikasi di /dashboard
(app/static/dashboard.html). Fitur lengkap Tahap 1-4 + dasbor monitoring,
menu global, filter semester, input nilai langsung, penggabungan nilai
team teaching, tabel bisa urut. Dockerfile berubah dari nginx statis ke
uvicorn/FastAPI: healthcheck, proxy-headers, volume /data (SQLite).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:05:28 +07:00

40 lines
1.2 KiB
Python

# -*- coding: utf-8 -*-
"""
Ekstrak data kurikulum (CPL, CPMK, MK, Sub-CPMK, matriks) yang ter-embed di
dashboard pemetaan, lalu simpan sebagai seed/kurikulum.json.
Jalankan ulang bila data dashboard diperbarui:
python tools/extract_seed.py [path_index_html]
"""
import json
import pathlib
import sys
BASE = pathlib.Path(__file__).resolve().parent.parent
DEFAULT_SRC = BASE.parent / "dashboard-deploy" / "index.html"
OUT = BASE / "seed" / "kurikulum.json"
def main() -> None:
src = pathlib.Path(sys.argv[1]) if len(sys.argv) > 1 else DEFAULT_SRC
html = src.read_text(encoding="utf-8")
i = html.find('{"cpl"')
if i < 0:
raise SystemExit(f"Blok JSON kurikulum tidak ditemukan di {src}")
data, _ = json.JSONDecoder().raw_decode(html[i:])
OUT.parent.mkdir(parents=True, exist_ok=True)
OUT.write_text(json.dumps(data, ensure_ascii=False, indent=1), encoding="utf-8")
n_sub = sum(
len(c["subs"]) for mk in data["sub"].values() for c in mk["cpmks"].values()
)
print(
f"[OK] {OUT.name}: {len(data['cpl'])} CPL, {len(data['cpmk'])} CPMK, "
f"{len(data['mk'])} MK, {n_sub} Sub-CPMK (sumber: {src})"
)
if __name__ == "__main__":
main()