diff --git a/validatie_samenwijzer/CLAUDE.md b/validatie_samenwijzer/CLAUDE.md index 163ff03..63ec54c 100644 --- a/validatie_samenwijzer/CLAUDE.md +++ b/validatie_samenwijzer/CLAUDE.md @@ -47,10 +47,12 @@ uv run python scripts/seed_bulk.py # ~1000 studenten over geïndexeerde OERs ( ./scripts/verwerk_oers.sh --preview # droge run ./scripts/verwerk_oers.sh # hernoem + indexeer -# Multi-machine setup: sync oeren vanuit Box + ingest + seed in één commando -./scripts/bootstrap.sh # volledige setup -./scripts/bootstrap.sh --skip-sync # alleen ingest + seed (oeren/ al lokaal) -./scripts/sync_oeren.sh # alleen rclone copy +# Multi-machine setup: sync oeren vanuit Box + ingest + bulk-seed in één commando +./scripts/bootstrap.sh # default = bulk-seed (~1000 studenten) +./scripts/bootstrap.sh --skip-sync # alleen ingest + seed (oeren/ al lokaal) +./scripts/bootstrap.sh --seed-minimal # 3+2 dev-demo i.p.v. bulk +./scripts/bootstrap.sh --skip-seed # geen testdata +./scripts/sync_oeren.sh # alleen rclone copy ``` ## Omgeving @@ -102,7 +104,7 @@ Tabs: - **Sync oeren** — wrapper rond `scripts/sync_oeren.sh`. - **Re-ingest** — scope-dropdown (alles/aeres/davinci/rijn_ijssel/talland/utrecht) + `--reset` checkbox. -- **Seed** — `seed.py` (basis-accounts) of `seed_bulk.py` (~1000 studenten). +- **Seed** — `seed_bulk.py` (~1000 studenten, default werkdata) of `seed.py` (3+2 dev-demo). ## Architectuur diff --git a/validatie_samenwijzer/app/pages/9_beheer.py b/validatie_samenwijzer/app/pages/9_beheer.py index 7210b87..a3e32af 100644 --- a/validatie_samenwijzer/app/pages/9_beheer.py +++ b/validatie_samenwijzer/app/pages/9_beheer.py @@ -147,25 +147,22 @@ def _run_in_placeholder(cmd: list[str], cwd: Path | None = None) -> None: "Tijdens de run is de app niet bruikbaar; subprocess-output verschijnt hieronder." ) - col_skip_sync, col_skip_seed, col_bulk = st.columns(3) - with col_skip_sync: - skip_sync = st.checkbox( - "Skip sync", - value=False, - help="Sla `rclone copy` over (oeren/ is al up-to-date).", - ) - with col_skip_seed: - skip_seed = st.checkbox( - "Skip seed", - value=False, - help="Geen testaccounts aanmaken.", - ) - with col_bulk: - seed_bulk = st.checkbox( - "Seed bulk (~1000 studenten)", - value=False, - help="Naast basis-accounts ook `seed_bulk.py` draaien.", - ) + seed_keuze = st.radio( + "Seed-data", + options=["bulk", "minimal", "geen"], + format_func=lambda v: { + "bulk": "Bulk (~1000 studenten over alle OERs) — default", + "minimal": "Minimaal (3 studenten + 2 mentoren, dev-demo)", + "geen": "Geen seed-data aanmaken", + }[v], + index=0, + horizontal=False, + ) + skip_sync = st.checkbox( + "Skip oeren-sync (oeren/ is al up-to-date)", + value=False, + help="Sla `rclone copy` over en gebruik wat lokaal staat.", + ) bevestig = st.checkbox( "Ja, ik weet dat dit de DB volledig herbouwt", @@ -177,10 +174,10 @@ def _run_in_placeholder(cmd: list[str], cwd: Path | None = None) -> None: cmd = ["bash", "scripts/bootstrap.sh"] if skip_sync: cmd.append("--skip-sync") - if skip_seed: + if seed_keuze == "minimal": + cmd.append("--seed-minimal") + elif seed_keuze == "geen": cmd.append("--skip-seed") - if seed_bulk: - cmd.append("--seed-bulk") _run_in_placeholder(cmd) @@ -231,13 +228,20 @@ def _run_in_placeholder(cmd: list[str], cwd: Path | None = None) -> None: col_a, col_b = st.columns(2) with col_a: - st.markdown("**Basis (3 studenten + 2 mentoren)**") + st.markdown("**Bulk (~1000 studenten)** — default werkdata") + st.caption( + "Verdeelt 1000 studenten over de top OERs van alle 5 instellingen " + "met deterministische seed (RNG=2026). Vereist dat OERs eerst zijn geïngest." + ) + if st.button("Run seed_bulk.py", type="primary"): + _run_in_placeholder(["uv", "run", "python", "scripts/seed_bulk.py"]) + with col_b: + st.markdown("**Minimaal (3 + 2)** — dev-demo") + st.caption( + "Hardcoded subset: 2 instellingen, 2 OERs, 3 studenten, 2 mentoren. " + "Bedoeld voor handmatige UI-tests. Geen vervanging voor bulk-seed." + ) if st.button("Run seed.py"): _run_in_placeholder(["uv", "run", "python", "scripts/seed.py"]) - with col_b: - st.markdown("**Bulk (~1000 studenten over alle OERs)**") - st.caption("Vereist dat OERs eerst zijn geïngest.") - if st.button("Run seed_bulk.py"): - _run_in_placeholder(["uv", "run", "python", "scripts/seed_bulk.py"]) render_footer() diff --git a/validatie_samenwijzer/scripts/bootstrap.sh b/validatie_samenwijzer/scripts/bootstrap.sh index ca68b0d..3eb81cd 100755 --- a/validatie_samenwijzer/scripts/bootstrap.sh +++ b/validatie_samenwijzer/scripts/bootstrap.sh @@ -1,23 +1,27 @@ #!/usr/bin/env bash # Volledige machine-setup voor validatie_samenwijzer: -# 1. Sync oeren/ vanuit Box (rclone) -# 2. uv sync (incl. dev deps) +# 1. uv sync (incl. dev deps) +# 2. Sync oeren/ vanuit Box (rclone) # 3. ingest --alles (bouw oeren.db op) -# 4. seed.py (basis-accounts) +# 4. seed_bulk.py (~1000 studenten over alle geïndexeerde OERs) # -# Gebruik: ./scripts/bootstrap.sh [--skip-sync] [--skip-seed] [--seed-bulk] +# Gebruik: +# ./scripts/bootstrap.sh # default +# ./scripts/bootstrap.sh --skip-sync # oeren/ al lokaal +# ./scripts/bootstrap.sh --skip-seed # geen testdata aanmaken +# ./scripts/bootstrap.sh --seed-minimal # i.p.v. bulk: alleen seed.py (dev-demo) set -euo pipefail SKIP_SYNC=false SKIP_SEED=false -SEED_BULK=false +SEED_MINIMAL=false for arg in "$@"; do case "$arg" in --skip-sync) SKIP_SYNC=true ;; --skip-seed) SKIP_SEED=true ;; - --seed-bulk) SEED_BULK=true ;; + --seed-minimal) SEED_MINIMAL=true ;; *) echo "Onbekende optie: $arg"; exit 1 ;; esac done @@ -44,15 +48,14 @@ uv run python -m validatie_samenwijzer.ingest --alles if $SKIP_SEED; then echo "" echo "=== 4. Seed-data (overgeslagen via --skip-seed) ===" -else +elif $SEED_MINIMAL; then echo "" - echo "=== 4. Basis-accounts ===" + echo "=== 4. Minimale dev-seed (3 studenten + 2 mentoren) ===" uv run python scripts/seed.py - if $SEED_BULK; then - echo "" - echo "=== 4b. Bulk-seed (~1000 studenten) ===" - uv run python scripts/seed_bulk.py - fi +else + echo "" + echo "=== 4. Bulk-seed (~1000 studenten over alle geïndexeerde OERs) ===" + uv run python scripts/seed_bulk.py fi echo ""