Coverage for course_modules/routes_modules.py: 87%

61 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-09-16 19:50 +0000

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

2 

3from html import escape 

4import uuid 

5from flask import redirect, render_template, request, send_file 

6from core import handlers 

7from .models import Module 

8 

9 

10def add_module_routes(app): 

11 """Module routes""" 

12 

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

14 @handlers.login_required 

15 def add_course_module(): 

16 if request.method == "GET": 

17 return render_template( 

18 "course_modules/adding_modules.html", user_type="admin", page="modules" 

19 ) 

20 

21 module = { 

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

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

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

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

26 } 

27 

28 return Module().add_module(module) 

29 

30 @app.route("/course_modules/search", methods=["GET"]) 

31 @handlers.admin_or_employers_required 

32 def search_modules(): 

33 """Search modules page""" 

34 modules = Module().get_modules() 

35 from app import DEADLINE_MANAGER 

36 

37 return render_template( 

38 "course_modules/search.html", 

39 modules=modules, 

40 user_type=handlers.get_user_type(), 

41 deadline_type=DEADLINE_MANAGER.get_deadline_type(), 

42 ) 

43 

44 @app.route("/course_modules/delete", methods=["DELETE"]) 

45 @handlers.login_required 

46 def delete_module(): 

47 module_id = request.args.get("uuid") 

48 return Module().delete_module_by_uuid(module_id) 

49 

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

51 @handlers.login_required 

52 def update_module(): 

53 if request.method == "GET": 

54 module_id = request.args.get("uuid") 

55 module = Module().get_module_by_uuid(module_id) 

56 if not module: 

57 return redirect("/404") 

58 return render_template( 

59 "course_modules/update.html", 

60 module=module, 

61 user_type="admin", 

62 page="modules", 

63 ) 

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

65 

66 module_id = escape(request.form.get("module_id")) 

67 module_name = escape(request.form.get("module_name")) 

68 module_description = escape(request.form.get("module_description")) 

69 return Module().update_module_by_uuid( 

70 uuid, module_id, module_name, module_description 

71 ) 

72 

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

74 @handlers.login_required 

75 def upload_course_modules(): 

76 if request.method == "GET": 

77 return render_template( 

78 "course_modules/upload.html", user_type="admin", page="modules" 

79 ) 

80 

81 file = request.files["file"] 

82 if not file: 

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

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

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

86 

87 return Module().upload_course_modules(file) 

88 

89 @app.route("/course_modules/download_template", methods=["GET"]) 

90 @handlers.login_required 

91 def download_course_modules_template(): 

92 return send_file( 

93 "data_model_upload_template/course_modules_template.xlsx", 

94 as_attachment=True, 

95 ) 

96 

97 @app.route("/course_modules/delete_all", methods=["DELETE"]) 

98 @handlers.login_required 

99 def delete_all_course_modules(): 

100 return Module().delete_all_modules() 

101 

102 @app.route("/course_modules/download_all", methods=["GET"]) 

103 @handlers.login_required 

104 def download_all_course_modules(): 

105 return Module().download_all_modules()