This repository now contains two implementations:
- Legacy scripts:
grade-analyzer.pygrade_analyzer_globals.pygrade_analyzer_plotter.py
- New rewrite scaffold (v2):
gradeplotter_v2/run_v2_generate.pyrun_v2_app.py
- Replace monolithic global-state script with modular services.
- Preserve behavior parity for graph generation (histograms and multiyear trends).
- Add run manifests and artifact indexing.
- Provide simple role-based local web app (Admin vs Viewer).
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-v2.txtsource .venv/bin/activate
python run_v2_generate.py \
-i 2020AUT-2021SUM.csv \
--dest gradeplotter_output \
--curriculum CSSOptional flags:
--instructor '.*'--sections '.*'--after 2024AUT--before 2025AUT--no-histograms--no-multiyear--multiyear-instructor--combosections(single histogram for all sections per course)--comboinstructor(single histogram for all sections per course per instructor)--dfwreport <course>(generate drop/fail/withdraw/repeat report for a course)
Artifacts and manifests are written to:
gradeplotter_output/runs/<RUN_ID>/...gradeplotter_output/runs/<RUN_ID>/manifest.jsongradeplotter_output/latest-manifest.json
source .venv/bin/activate
python run_v2_app.pyOpen http://127.0.0.1:5000.
Default credentials (override via env vars):
- Admin:
admin/admin - Viewer:
viewer/viewer
Supported environment variables:
GRADEPLOTTER_SECRET_KEYGRADEPLOTTER_OUTPUT_ROOTGRADEPLOTTER_ADMIN_USERGRADEPLOTTER_ADMIN_PASSWORDGRADEPLOTTER_VIEWER_USERGRADEPLOTTER_VIEWER_PASSWORD
Implemented:
- Header-based CSV loading and typed domain models.
- Filtering/query repository for curriculum/instructor/section/term bounds.
- Histogram and multiyear rendering pipeline with manifest output.
- Legacy-style graph output layout for parity: byYear, byInstructor, byCourse, and stats_per_course paths inside each run.
- Legacy-style section filename formatting and --sections matching against compact names.
- Quarter-aware date filtering parity for --after/--before semantics.
- Flask app with login, gallery, run history, and admin generation form.
- Decision/questions tracking in
Todo.md.
Not yet implemented:
- Full parity for every legacy report mode (
--func,--dfwreport, progression/workload outputs). - Legacy path-duplication compatibility layer.
- Production-ready auth backend and audit logging.