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

Remove Appointment.customInit

This commit is contained in:
Mo 2022-05-15 22:24:49 +02:00
parent 2e6151d05f
commit 9ff2405947
4 changed files with 36 additions and 63 deletions

View file

@ -224,6 +224,7 @@ class UserView(SecureAdminModelView):
self.on_model_change(form, model, True)
self.session.commit()
except Exception as ex:
if not self.handle_view_exception(ex):
flash(str(ex), "error")
self.session.rollback()
@ -1059,15 +1060,12 @@ class GroupExperimentView(SecureAdminModelView):
def on_model_change(self, form, model, is_created):
if is_created:
for date, special, assistant in zip(
(form.appointment1_date.data, form.appointment2_date.data),
(form.appointment1_special.data, form.appointment2_special.data),
(form.appointment1_assistant.data, form.appointment2_assistant.data),
for date, special, assistant in (
(form.appointment1_date.data, form.appointment1_special.data, form.appointment1_assistant.data),
(form.appointment2_date.data, form.appointment2_special.data, form.appointment2_assistant.data),
):
if date:
appointment = Appointment.customInit(
date=date, special=special, group_experiment=model, assistant=assistant
)
if date is not None:
appointment = Appointment(date=date, special=special, group_experiment=model, assistant=assistant)
self.session.add(appointment)
@ -1180,30 +1178,17 @@ class AppointmentView(SecureAdminModelView):
)
def customCreateModel(self, form):
return Appointment.customInit(
return Appointment(
date=form.date.data,
special=form.special.data,
group_experiment=form.group_experiment.data,
assistant=form.assistant.data,
)
def update_model(self, form, model):
if None in (form.date, form.special): # For editables
return super().update_model(form, model)
try:
model.customUpdate(form.date.data, form.special.data, form.assistant.data, form.group_experiment.data)
self.on_model_change(form, model, False)
self.session.commit()
except Exception as ex:
flash(str(ex), "error")
self.session.rollback()
return False
else:
self.after_model_change(form, model, False)
return True
def on_model_change(self, form, model, is_created):
if None not in (form.date, form.special): # No need to check or adjust assistant for editables
if not is_created:
model.assistant = Appointment.checkAndGetAssistant(model.group_experiment, model.assistant)
class ExperimentMarkView(SecureAdminModelView):
@ -1362,16 +1347,16 @@ class ExperimentMarkView(SecureAdminModelView):
return ExperimentMark(part_student=form.part_student.data, group_experiment=form.group_experiment.data)
def update_model(self, form, model):
if (form.oral_mark and form.oral_mark.data != model.oral_mark) or (
form.protocol_mark and form.protocol_mark.data != model.protocol_mark
if (form.oral_mark is not None and form.oral_mark.data != model.oral_mark) or (
form.protocol_mark is not None and form.protocol_mark.data != model.protocol_mark
):
model.admin = current_user.admin
ret = super().update_model(form, model)
updateSuccessful = super().update_model(form, model)
model.part_student.checkThenSetFinalPartMark()
return ret
return updateSuccessful
# Nothing changed
return True
@ -1421,8 +1406,9 @@ class ImportView(SecureAdminBaseView):
try:
importFromFile(filePath)
except Exception as exc:
flash(str(exc), "error")
except Exception as ex:
if not self.handle_view_exception(ex):
flash(str(ex), "error")
return redirect(url_for("index"))

View file

@ -257,12 +257,12 @@ def importFromFile(filePath):
assistantEmail = appointments["assistant_email"][i]
assistant = Assistant.query.filter(Assistant.user.has(User.email == assistantEmail)).first()
if not assistant:
if assistant is None:
raise DataBaseImportException(
f"Assistant with email {email} does not exist in the database! Please make sure that you create assistants in the web interface."
)
dbAppointment = Appointment.customInit(
dbAppointment = Appointment(
date=datetime.strptime(date, "%d.%m.%Y").date(),
special=bool(int(appointments["special"][i])),
group_experiment=dbGroupExperiments[int(appointments["group_experiment_id"][i])],

View file

@ -84,12 +84,6 @@ class PartStudent(db.Model):
super().__init__(student=student, part=part, group=group)
def customUpdate(self, group, final_part_mark):
Part.check(group, self.part)
self.group = group
self.final_part_mark = final_part_mark
def checkThenSetFinalPartMark(self):
finalWeightingSum = 0
finalMark = 0
@ -189,11 +183,6 @@ class Group(db.Model):
semester=semester,
)
def customUpdate(self, part_students):
Group.check(part_students, self.program)
self.part_students = part_students
def repr(self):
return f"{self.number} {self.program.repr()} {self.semester.repr()}"
@ -213,7 +202,7 @@ class GroupExperiment(db.Model):
__table_args__ = (db.UniqueConstraint(semester_experiment_id, group_id),)
def __init__(self, semester_experiment, group):
def check(semester_experiment, group):
for partStudent in group.part_students:
student = partStudent.student
for partStudent in student.part_students:
@ -223,6 +212,9 @@ class GroupExperiment(db.Model):
f"{student} has already done {semester_experiment.experiment} in {partStudent.part} and had {experimentMark}!"
)
def __init__(self, semester_experiment, group):
GroupExperiment.check(semester_experiment, group)
super().__init__(semester_experiment=semester_experiment, group=group)
for partStudent in group.part_students:
@ -369,14 +361,14 @@ class Appointment(db.Model):
group_experiment_id = db.Column(db.Integer, db.ForeignKey("group_experiment.id"), nullable=False)
assistant_id = db.Column(db.Integer, db.ForeignKey("assistant.id"), nullable=False)
def checkAndGetAssistant(assistant, groupExperiment):
def checkAndGetAssistant(groupExperiment, assistant=None):
semesterExperiment = groupExperiment.semester_experiment
semesterExperimentAssistants = semesterExperiment.assistants
if not semesterExperimentAssistants:
raise DataBaseException(f"{semesterExperiment} does not have assistants yet!")
if assistant:
if assistant is not None:
if assistant not in semesterExperimentAssistants:
raise DataBaseException(f"{assistant} not responsible for {semesterExperiment}!")
else:
@ -389,24 +381,16 @@ class Appointment(db.Model):
return assistant
def customInit(date, special, group_experiment, assistant):
assistant = Appointment.checkAndGetAssistant(assistant, group_experiment)
def __init__(self, date, special, group_experiment, assistant=None):
assistant = Appointment.checkAndGetAssistant(group_experiment, assistant)
return Appointment(
super().__init__(
date=date,
special=special,
group_experiment=group_experiment,
assistant=assistant,
)
def customUpdate(self, date, special, assistant, group_experiment):
assistant = Appointment.checkAndGetAssistant(assistant, group_experiment)
self.date = date
self.special = special
self.assistant = assistant
self.group_experiment = group_experiment
def repr(self):
return f"{self.date} {self.group_experiment.repr()}"
@ -528,13 +512,16 @@ class ExperimentMark(db.Model):
__table_args__ = (db.UniqueConstraint(part_student_id, group_experiment_id),)
def __init__(self, part_student, group_experiment):
def check(part_student, group_experiment):
if not part_student.group:
raise DataBaseException("The part student does not have a group yet!")
else:
if group_experiment not in part_student.group.group_experiments:
raise DataBaseException("The group of the part student does not have the given group experiment!")
def __init__(self, part_student, group_experiment):
ExperimentMark(part_student, group_experiment)
super().__init__(part_student=part_student, group_experiment=group_experiment)
def updateFinalExperimentMark(self):

View file

@ -139,8 +139,8 @@ def main():
db.session.add(as1)
db.session.add(as2)
ap1 = Appointment.customInit(date=date(2021, 3, 21), special=True, group_experiment=gx1, assistant=as1)
ap2 = Appointment.customInit(date=date(2021, 3, 22), special=True, group_experiment=gx2, assistant=as2)
ap1 = Appointment(date=date(2021, 3, 21), special=True, group_experiment=gx1, assistant=as1)
ap2 = Appointment(date=date(2021, 3, 22), special=True, group_experiment=gx2, assistant=as2)
db.session.add(ap1)
db.session.add(ap2)