From 6f22253a4974fce46233fec90f34db0816f5e7f3 Mon Sep 17 00:00:00 2001 From: Mo8it Date: Sun, 29 May 2022 21:47:23 +0200 Subject: [PATCH] Move Semester functions --- advlabdb/adminModelViews.py | 12 ++++-------- advlabdb/model_dependent_funs.py | 19 ++----------------- advlabdb/models.py | 13 +++++++++++++ advlabdb/routes.py | 2 +- 4 files changed, 20 insertions(+), 26 deletions(-) diff --git a/advlabdb/adminModelViews.py b/advlabdb/adminModelViews.py index c55f6a2..f318ba5 100644 --- a/advlabdb/adminModelViews.py +++ b/advlabdb/adminModelViews.py @@ -39,11 +39,7 @@ from .customClasses import ( ) from .database_import import importFromFile from .exceptions import DataBaseException, ModelViewException -from .model_dependent_funs import ( - initActiveSemesterMenuLinks, - lastSemester, - sortedSemestersStartingWithNewest, -) +from .model_dependent_funs import initActiveSemesterMenuLinks from .model_independent_funs import randomPassword from .models import ( MAX_MARK, @@ -77,7 +73,7 @@ class SemesterRowFilter(FilterEqual): if not has_request_context(): return tuple() - semesters = sortedSemestersStartingWithNewest() + semesters = Semester.sortedSemestersStartingWithNewest() return tuple((semester.id, semester.repr()) for semester in semesters) @@ -148,7 +144,7 @@ class UserView(SecureAdminModelView): "Active Semester", query_factory=semesterQueryFactory, validators=[DataRequired()], - default=lastSemester, + default=Semester.lastSemester, description="Not fixed and users (including assistants) can change it.", ) @@ -1519,7 +1515,7 @@ class AnalysisView(SecureAdminBaseView): for part in parts ] - semesters = sortedSemestersStartingWithNewest() + semesters = Semester.sortedSemestersStartingWithNewest() semesterLabels = [semester.repr() for semester in semesters] meanFinalPartMarks = np.flip( [ diff --git a/advlabdb/model_dependent_funs.py b/advlabdb/model_dependent_funs.py index e134dca..790049f 100644 --- a/advlabdb/model_dependent_funs.py +++ b/advlabdb/model_dependent_funs.py @@ -9,25 +9,10 @@ from . import app, db from .models import Semester -def sortedSemestersStartingWithNewest(limit=0): - # Inserting an older semester is not allowed! - # Therefore, the id is enough. - stmt = select(Semester).order_by(Semester.id.desc()) - - if limit > 0: - stmt = stmt.limit(limit) - - return db.session.execute(stmt).scalars() - - -def lastSemester(): - return sortedSemestersStartingWithNewest(limit=1).first() - - def initActiveSemesterMenuLinks(space): with app.app_context(): try: - semesters = sortedSemestersStartingWithNewest() + semesters = Semester.sortedSemestersStartingWithNewest() for semester in semesters: space.add_link( MenuLink( @@ -55,7 +40,7 @@ def get_count(table): def active_semester_repr(): active_semester = current_user.active_semester repr = active_semester.repr() - if active_semester != lastSemester(): + if active_semester != Semester.lastSemester(): flash(f"You are in the old semester {repr}!", "warning") return repr diff --git a/advlabdb/models.py b/advlabdb/models.py index c3c4e45..c88e592 100644 --- a/advlabdb/models.py +++ b/advlabdb/models.py @@ -479,6 +479,19 @@ class Semester(db.Model): for part in oldSemester.parts: db.session.add(Part(program=part.program, number=part.number, semester=self)) + def sortedSemestersStartingWithNewest(limit=0): + # Inserting an older semester is not allowed! + # Therefore, the id is enough. + stmt = select(Semester).order_by(Semester.id.desc()) + + if limit > 0: + stmt = stmt.limit(limit) + + return db.session.execute(stmt).scalars() + + def lastSemester(): + return Semester.sortedSemestersStartingWithNewest(limit=1).first() + def repr(self): return f"{self.label}{self.year}" diff --git a/advlabdb/routes.py b/advlabdb/routes.py index fbbb404..53ef7f6 100644 --- a/advlabdb/routes.py +++ b/advlabdb/routes.py @@ -2,7 +2,7 @@ from flask import flash, redirect, render_template, request, url_for from flask_security import auth_required, current_user, roles_accepted, roles_required from . import app, db -from .model_dependent_funs import active_semester_repr, lastSemester +from .model_dependent_funs import active_semester_repr from .models import Semester