Coverage for courses/routes_courses.py: 80%

56 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-05-05 14:02 +0000

1"""Handles the routes for the course module.""" 

2 

3from html import escape 

4import uuid 

5from flask import render_template, request, send_file 

6from core import handlers 

7from .models import Course 

8 

9 

10def add_course_routes(app): 

11 """Courses routes""" 

12 

13 @app.route("/courses/add_course", methods=["POST", "GET"]) 

14 @handlers.login_required 

15 def add_course(): 

16 if request.method == "GET": 

17 return render_template( 

18 "/courses/adding_course.html", user_type="admin", page="courses" 

19 ) 

20 

21 course = { 

22 "_id": uuid.uuid1().hex, 

23 "course_id": escape(request.form.get("course_id")), 

24 "course_name": escape(request.form.get("course_name")), 

25 "course_description": escape(request.form.get("course_description")), 

26 } 

27 return Course().add_course(course) 

28 

29 @app.route("/courses/delete", methods=["DELETE"]) 

30 @handlers.login_required 

31 def delete_course(): 

32 uuid = request.args.get("uuid") 

33 return Course().delete_course_by_uuid(uuid) 

34 

35 @app.route("/courses/search", methods=["GET"]) 

36 @handlers.admin_or_employers_required 

37 def search_course(): 

38 courses = Course().get_courses() 

39 from app import DEADLINE_MANAGER 

40 

41 return render_template( 

42 "/courses/search.html", 

43 courses=courses, 

44 user_type=handlers.get_user_type(), 

45 deadline_type=DEADLINE_MANAGER.get_deadline_type(), 

46 ) 

47 

48 @app.route("/courses/update", methods=["GET", "POST"]) 

49 @handlers.login_required 

50 def update_course(): 

51 id_val = request.args.get("uuid") 

52 if request.method == "GET": 

53 course = Course().get_course_by_uuid(id_val) 

54 return render_template( 

55 "/courses/update.html", course=course, user_type="admin", page="courses" 

56 ) 

57 

58 course = { 

59 "course_id": escape(request.form.get("course_id").upper()), 

60 "course_name": escape(request.form.get("course_name")), 

61 "course_description": escape(request.form.get("course_description")), 

62 } 

63 return Course().update_course(id_val, course) 

64 

65 @app.route("/courses/upload", methods=["GET", "POST"]) 

66 @handlers.login_required 

67 def upload_courses(): 

68 if request.method == "GET": 

69 return render_template( 

70 "courses/upload.html", user_type="admin", page="courses" 

71 ) 

72 

73 file = request.files["file"] 

74 if not file: 

75 return {"error": "No file provided"}, 400 

76 if not handlers.allowed_file(file.filename, ["xlsx", "xls"]): 

77 return {"error": "Invalid file type"}, 400 

78 

79 return Course().upload_course_data(file) 

80 

81 @app.route("/courses/download_template", methods=["GET"]) 

82 @handlers.login_required 

83 def download_courses_template(): 

84 return send_file( 

85 "data_model_upload_template/courses_template.xlsx", 

86 as_attachment=True, 

87 ) 

88 

89 @app.route("/courses/delete_all", methods=["DELETE"]) 

90 @handlers.login_required 

91 def delete_all_courses(): 

92 return Course().delete_all_courses() 

93 

94 @app.route("/courses/download_all", methods=["GET"]) 

95 @handlers.login_required 

96 def download_all_courses(): 

97 return Course().download_all_courses()