Coverage for app/logic/courseManagement.py: 79%

47 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2024-03-18 17:14 +0000

1from flask import flash 

2from peewee import fn, JOIN 

3 

4from app.models import mainDB 

5from app.models.courseInstructor import CourseInstructor 

6from app.models.courseQuestion import CourseQuestion 

7from app.models.courseStatus import CourseStatus 

8from app.logic.createLogs import createAdminLog 

9from app.logic.fileHandler import FileHandler 

10from app.logic.utils import getFilesFromRequest 

11from app.models.course import Course 

12from app.models.term import Term 

13from app.models.user import User 

14 

15 

16def unapprovedCourses(termId): 

17 ''' 

18 Queries the database to get all the neccessary information for submitted courses. 

19 ''' 

20 

21 unapprovedCourses = (Course.select(Course, Term, CourseStatus, fn.GROUP_CONCAT(" " ,User.firstName, " ", User.lastName).alias('instructors')) 

22 .join(CourseInstructor, JOIN.LEFT_OUTER) 

23 .join(User, JOIN.LEFT_OUTER).switch(Course) 

24 .join(CourseStatus).switch(Course) 

25 .join(Term) 

26 .where(Term.id == termId, 

27 Course.status.in_([CourseStatus.SUBMITTED, CourseStatus.IN_PROGRESS])) 

28 .group_by(Course, Term, CourseStatus) 

29 .order_by(Course.status)) 

30 

31 return unapprovedCourses 

32def approvedCourses(termId): 

33 ''' 

34 Queries the database to get all the neccessary information for 

35 approved courses. 

36 ''' 

37 

38 approvedCourses = (Course.select(Course, Term, CourseStatus, fn.GROUP_CONCAT(" " ,User.firstName, " ", User.lastName).alias('instructors')) 

39 .join(CourseInstructor, JOIN.LEFT_OUTER) 

40 .join(User, JOIN.LEFT_OUTER).switch(Course) 

41 .join(CourseStatus).switch(Course) 

42 .join(Term) 

43 .where(Term.id == termId, Course.status == CourseStatus.APPROVED) 

44 .group_by(Course, Term, CourseStatus)) 

45 

46 return approvedCourses 

47 

48def createCourse(creator="No user provided"): 

49 """ Create an empty, in progress course """ 

50 course = Course.create(status=CourseStatus.IN_PROGRESS, createdBy=creator) 

51 for i in range(1, 7): 

52 CourseQuestion.create( course=course, questionNumber=i) 

53 

54 return course 

55 

56def updateCourse(courseData, attachments=None): 

57 """ 

58 This function will take in courseData for the SLC proposal page and a dictionary 

59 of instuctors assigned to the course and update the information in the db. 

60 """ 

61 with mainDB.atomic() as transaction: 

62 try: 

63 course = Course.get_by_id(courseData['courseID']) 

64 for toggler in ["slSectionsToggle", "permanentDesignation"]: 

65 courseData.setdefault(toggler, "off") 

66 (Course.update(courseName=courseData["courseName"], 

67 courseAbbreviation=courseData["courseAbbreviation"], 

68 sectionDesignation=courseData["sectionDesignation"], 

69 courseCredit=courseData["credit"], 

70 isRegularlyOccurring=int(courseData["isRegularlyOccurring"]), 

71 term=courseData['term'], 

72 status=CourseStatus.SUBMITTED, 

73 isPreviouslyApproved=int(courseData["isPreviouslyApproved"]), 

74 previouslyApprovedDescription = courseData["previouslyApprovedDescription"], 

75 isAllSectionsServiceLearning=("on" in courseData["slSectionsToggle"]), 

76 serviceLearningDesignatedSections=courseData["slDesignation"], 

77 isPermanentlyDesignated=("on" in courseData["permanentDesignation"]), 

78 hasSlcComponent = int(courseData["hasSlcComponent"])) 

79 .where(Course.id == course.id).execute()) 

80 for i in range(1, 7): 

81 (CourseQuestion.update(questionContent=courseData[f"{i}"]) 

82 .where((CourseQuestion.questionNumber == i) & 

83 (CourseQuestion.course==course)).execute()) 

84 instructorList = [] 

85 if 'instructor[]' in courseData: 

86 instructorList = courseData.getlist('instructor[]') 

87 CourseInstructor.delete().where(CourseInstructor.course == course).execute() 

88 for instructor in instructorList: 

89 CourseInstructor.create(course=course, user=instructor) 

90 createAdminLog(f"Saved SLC proposal: {courseData['courseName']}") 

91 if attachments: 

92 addFile= FileHandler(attachments, courseId=course.id) 

93 addFile.saveFiles() 

94 return Course.get_by_id(course.id) 

95 except Exception as e: 

96 print(e) 

97 transaction.rollback() 

98 return False