1
0
Fork 0
mirror of https://codeberg.org/Mo8it/AdvLabDB.git synced 2024-09-19 18:31:16 +00:00

Addded exceptions

This commit is contained in:
Mo 2021-07-13 17:22:15 +02:00
parent 3024d2661e
commit 91547a7487
4 changed files with 29 additions and 33 deletions

View file

@ -1,7 +1,9 @@
from flask_admin import AdminIndexView
from flask_admin.contrib.sqla import ModelView
from flask_security import current_user
from flask import redirect, request, url_for
from flask import redirect, request, url_for, flash
from advlabdb.exceptions import ModelViewValidatorException
def adminViewIsAccessible():
@ -49,3 +51,10 @@ class SecureModelView(ModelView):
return super().get_count_query().filter(self.queryFilter())
else:
return super().get_count_query()
def handle_view_exception(self, exc):
if type(exc) == ModelViewValidatorException:
flash(str(exc), "error")
return True
return super().handle_view_exception(exc)

2
advlabdb/exceptions.py Normal file
View file

@ -0,0 +1,2 @@
class ModelViewValidatorException(Exception):
pass

View file

@ -34,6 +34,7 @@ from advlabdb.utils import (
setUserActiveSemester,
userActiveSemester,
)
from advlabdb.exceptions import ModelViewValidatorException
class UserView(SecureModelView):
@ -49,9 +50,6 @@ class UserView(SecureModelView):
"roles": {"validators": [DataRequired(message="A role is required!")]},
}
deleteSelfException = "Tried to delete yourself as user!"
deactivateSelfException = "Tried to deactiavte yourself as user!"
def create_model(self, form):
password = randomPassword()
passwordHash = hash_password(password)
@ -81,17 +79,11 @@ class UserView(SecureModelView):
def on_model_delete(self, model):
if model == current_user:
raise Exception(self.deleteSelfException)
raise ModelViewValidatorException("Tried to delete yourself as user!")
def on_model_change(self, form, model, is_created):
if model == current_user and not form.active.data:
raise Exception(self.deactivateSelfException)
def handle_view_exception(self, exc):
if exc.args[0] in (self.deleteSelfException, self.deactivateSelfException):
pass
else:
return super().handle_view_exception(exc)
raise ModelViewValidatorException("Tried to deactiavte yourself as user!")
class RoleView(SecureModelView):
@ -261,8 +253,6 @@ class PartStudentView(SecureModelView):
column_filters = ["part", "student", "group"]
partGroupPartMismatchException = "Student's part and group's part do not match!"
def queryFilter(self):
return PartStudent.part_id.in_([part.id for part in userActiveSemester().parts])
@ -272,13 +262,7 @@ class PartStudentView(SecureModelView):
def on_model_change(self, form, model, is_created):
if model.group and model.part != model.group.part:
raise Exception(self.partGroupPartMismatchException)
def handle_view_exception(self, exc):
if exc.args[0] in (self.partGroupPartMismatchException):
pass
else:
return super().handle_view_exception(exc)
raise ModelViewValidatorException("Student's part and group's part do not match!")
def update_model(self, form, model):
if form.final_part_mark.data == -1:
@ -310,8 +294,6 @@ class GroupView(SecureModelView):
column_list = ["number", "part", "part_students", "group_experiments"]
column_filters = ["number", "part"]
partStudentPartPartMismatchException = "Group's part and student's part do not match!"
def queryFilter(self):
return Group.part_id.in_([part.id for part in userActiveSemester().parts])
@ -333,13 +315,7 @@ class GroupView(SecureModelView):
def on_model_change(self, form, model, is_created):
for partStudent in model.part_students:
if model.part != partStudent.part:
raise Exception(self.partStudentPartPartMismatchException)
def handle_view_exception(self, exc):
if exc.args[0] in (self.partStudentPartPartMismatchException):
pass
else:
return super().handle_view_exception(exc)
raise ModelViewValidatorException("Group's part and student's part do not match!")
def create_form(self, obj=None):
form = self.CreateForm

View file

@ -131,9 +131,18 @@ class Experiment(db.Model):
responsibility = db.Column(db.String(200), nullable=True)
duration_in_days = db.Column(db.Integer, db.CheckConstraint("duration_in_days > -1"), nullable=False)
active = db.Column(db.Boolean, default=True, nullable=False)
oral_weighting = db.Column(db.Float, nullable=False)
protocol_weighting = db.Column(db.Float, nullable=False)
final_weighting = db.Column(db.Float, nullable=False)
oral_weighting = db.Column(
db.Float, db.CheckConstraint("oral_weighting >= 0"), db.CheckConstraint("oral_weighting <= 1"), nullable=False
)
protocol_weighting = db.Column(
db.Float,
db.CheckConstraint("protocol_weighting >= 0"),
db.CheckConstraint("protocol_weighting <= 1"),
nullable=False,
)
final_weighting = db.Column(
db.Float, db.CheckConstraint("final_weighting >= 0"), db.CheckConstraint("final_weightin <= 1"), nullable=False
)
semester_experiments = db.relationship("SemesterExperiment", backref="experiment", lazy=True)
def repr(self):