Coverage for app/controllers/minor/routes.py: 38%

58 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2025-04-03 22:28 +0000

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

2from peewee import DoesNotExist 

3 

4from app.controllers.minor import minor_bp 

5from app.models.user import User 

6from app.models.term import Term 

7from app.models.attachmentUpload import AttachmentUpload 

8 

9from app.logic.fileHandler import FileHandler 

10from app.logic.utils import selectSurroundingTerms, getFilesFromRequest 

11from app.logic.minor import getProgramEngagementHistory, getCourseInformation, getCommunityEngagementByTerm, removeSummerExperience 

12from app.logic.minor import saveOtherEngagementRequest, setCommunityEngagementForUser, saveSummerExperience, getSummerTerms, getSummerExperience, getEngagementTotal 

13 

14@minor_bp.route('/profile/<username>/cceMinor', methods=['GET']) 

15def viewCceMinor(username): 

16 """ 

17 Load minor management page with community engagements and summer experience 

18 """ 

19 if not (g.current_user.isAdmin): 

20 return abort(403) 

21 

22 sustainedEngagementByTerm = getCommunityEngagementByTerm(username) 

23 selectedSummerTerm, summerExperience = getSummerExperience(username) 

24 return render_template("minor/profile.html", 

25 user = User.get_by_id(username), 

26 sustainedEngagementByTerm = sustainedEngagementByTerm, 

27 summerExperience = summerExperience if summerExperience else "", 

28 selectedSummerTerm = selectedSummerTerm, 

29 totalSustainedEngagements = getEngagementTotal(sustainedEngagementByTerm), 

30 summerTerms = getSummerTerms()) 

31 

32@minor_bp.route('/cceMinor/<username>/getEngagementInformation/<type>/<term>/<id>', methods=['GET']) 

33def getEngagementInformation(username, type, id, term): 

34 """ 

35 For a particular engagement activity (program or course), get the participation history or course information respectively. 

36 """ 

37 if type == "program": 

38 information = getProgramEngagementHistory(id, username, term) 

39 else: 

40 information = getCourseInformation(id) 

41 

42 return information 

43 

44@minor_bp.route('/cceMinor/<username>/modifyCommunityEngagement', methods=['PUT','DELETE']) 

45def modifyCommunityEngagement(username): 

46 """ 

47 Saving a term participation/activities for sustained community engagement 

48 """ 

49 if not g.current_user.isCeltsAdmin: 

50 abort(403) 

51 

52 action = 'add' if request.method == 'PUT' else 'remove' 

53 try: 

54 setCommunityEngagementForUser(action, request.form, g.current_user) 

55 except DoesNotExist: 

56 return "There are already 4 Sustained Community Engagement records." 

57 

58 return "" 

59 

60@minor_bp.route('/cceMinor/<username>/requestOtherCommunityEngagement', methods=['GET', 'POST']) 

61def requestOtherEngagement(username): 

62 """ 

63 Load the "request other" form and submit it. 

64 """ 

65 user = User.get_by_id(username) 

66 terms = selectSurroundingTerms(g.current_term) 

67 

68 

69 if request.method == 'POST': 

70 filename = None 

71 attachment = request.files.get("attachmentObject") 

72 if attachment: 

73 addFile = FileHandler(getFilesFromRequest(request)) 

74 addFile.saveFiles() 

75 filename = attachment.filename 

76 formData = request.form.copy() 

77 formData["filename"] = filename 

78 saveOtherEngagementRequest(formData) 

79 flash("Other community engagement request submitted.", "success") 

80 return redirect(url_for("minor.viewCceMinor", username=user)) 

81 

82 

83 return render_template("/minor/requestOtherEngagement.html", 

84 user=user, 

85 terms=terms) 

86 

87@minor_bp.route('/cceMinor/<username>/addSummerExperience', methods=['POST']) 

88def addSummerExperience(username): 

89 saveSummerExperience(username, request.form, g.current_user) 

90 

91 return "" 

92 

93@minor_bp.route('/cceMinor/<username>/deleteSummerExperience', methods=['POST']) 

94def deleteSummerExperience(username): 

95 removeSummerExperience(username) 

96 

97 return ""