Coverage for app/controllers/admin/minor.py: 30%
27 statements
« prev ^ index » next coverage.py v7.10.2, created at 2026-03-11 19:39 +0000
« prev ^ index » next coverage.py v7.10.2, created at 2026-03-11 19:39 +0000
1from flask import render_template, g, abort, request, redirect, url_for, send_file
3from app.models.user import User
5from app.controllers.admin import admin_bp
7from app.logic.minor import getDeclaredMinorStudents, getMinorInterest, getMinorProgress, toggleMinorInterest, getMinorSpreadsheet
9@admin_bp.route('/admin/cceMinor', methods=['GET','POST'])
10def manageMinor():
11 if not g.current_user.isAdmin:
12 abort(403)
14 if request.method == 'POST':
15 interestedStudents = request.form.getlist('interestedStudents[]')
16 for student in interestedStudents:
17 user = User.get(username=student)
18 if not user.minorInterest:
19 toggleMinorInterest(student, True)
21 return redirect(url_for("admin.manageMinor"))
23 interestedStudentsList = getMinorInterest()
24 interestedStudentEmailString = ';'.join([student['email'] for student in interestedStudentsList])
25 declaredStudentsDict = getDeclaredMinorStudents()
26 declaredStudentEmailString = ';'.join([student['email'] for student in declaredStudentsDict])
28 cceMinorStudents = declaredStudentsDict
31 return render_template('/admin/cceMinor.html',
32 cceMinorStudents = cceMinorStudents,
33 interestedStudentsList = interestedStudentsList,
34 interestedStudentEmailString = interestedStudentEmailString,
35 declaredStudentEmailString = declaredStudentEmailString,
36 )
38@admin_bp.route("/admin/cceMinor/download")
39def downloadSpreadsheet():
40 if not g.current_user.isCeltsAdmin:
41 abort(403)
43 newfile = getMinorSpreadsheet()
44 return send_file(open(newfile, 'rb'), download_name='minor_progress.xlsx', as_attachment=True)