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
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-16 19:50 +0000
1"""Handles the routes for the Module module."""
3from html import escape
4import uuid
5from flask import redirect, render_template, request, send_file
6from core import handlers
7from .models import Module
10def add_module_routes(app):
11 """Module routes"""
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 )
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 }
28 return Module().add_module(module)
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
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 )
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)
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")
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 )
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 )
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
87 return Module().upload_course_modules(file)
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 )
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()
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()