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
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-05 14:02 +0000
1"""Handles the routes for the course module."""
3from html import escape
4import uuid
5from flask import render_template, request, send_file
6from core import handlers
7from .models import Course
10def add_course_routes(app):
11 """Courses routes"""
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 )
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)
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)
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
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 )
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 )
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)
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 )
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
79 return Course().upload_course_data(file)
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 )
89 @app.route("/courses/delete_all", methods=["DELETE"])
90 @handlers.login_required
91 def delete_all_courses():
92 return Course().delete_all_courses()
94 @app.route("/courses/download_all", methods=["GET"])
95 @handlers.login_required
96 def download_all_courses():
97 return Course().download_all_courses()