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

1from flask import render_template, g, abort, request, redirect, url_for, send_file 

2 

3from app.models.user import User 

4 

5from app.controllers.admin import admin_bp 

6 

7from app.logic.minor import getDeclaredMinorStudents, getMinorInterest, getMinorProgress, toggleMinorInterest, getMinorSpreadsheet 

8 

9@admin_bp.route('/admin/cceMinor', methods=['GET','POST']) 

10def manageMinor(): 

11 if not g.current_user.isAdmin: 

12 abort(403) 

13 

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) 

20 

21 return redirect(url_for("admin.manageMinor")) 

22 

23 interestedStudentsList = getMinorInterest() 

24 interestedStudentEmailString = ';'.join([student['email'] for student in interestedStudentsList]) 

25 declaredStudentsDict = getDeclaredMinorStudents() 

26 declaredStudentEmailString = ';'.join([student['email'] for student in declaredStudentsDict]) 

27 

28 cceMinorStudents = declaredStudentsDict 

29 

30 

31 return render_template('/admin/cceMinor.html', 

32 cceMinorStudents = cceMinorStudents, 

33 interestedStudentsList = interestedStudentsList, 

34 interestedStudentEmailString = interestedStudentEmailString, 

35 declaredStudentEmailString = declaredStudentEmailString, 

36 ) 

37 

38@admin_bp.route("/admin/cceMinor/download") 

39def downloadSpreadsheet(): 

40 if not g.current_user.isCeltsAdmin: 

41 abort(403) 

42 

43 newfile = getMinorSpreadsheet() 

44 return send_file(open(newfile, 'rb'), download_name='minor_progress.xlsx', as_attachment=True) 

45 

46