From 2f7d005ea408291b42d59714f94f97302f428093 Mon Sep 17 00:00:00 2001 From: Mo8it Date: Sun, 15 May 2022 20:59:57 +0200 Subject: [PATCH] Remove GroupExperiment.customInit --- advlabdb/adminModelViews.py | 4 ++-- advlabdb/database_import.py | 2 +- advlabdb/models.py | 32 ++++++++++++++------------ advlabdb/scripts/test/test_database.py | 4 ++-- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/advlabdb/adminModelViews.py b/advlabdb/adminModelViews.py index 0f8e850..ff323ca 100644 --- a/advlabdb/adminModelViews.py +++ b/advlabdb/adminModelViews.py @@ -571,7 +571,7 @@ class PartStudentView(SecureAdminModelView): return PartStudent.part.has(Part.semester == userActiveSemester()) def on_model_change(self, form, model, is_created): - PartStudent.check(model.group, model.part) + PartStudent.check(model.part, model.group) def partStudentQueryFactory(): @@ -1055,7 +1055,7 @@ class GroupExperimentView(SecureAdminModelView): return GroupExperiment.group.has(Group.semester == userActiveSemester()) def customCreateModel(self, form): - return GroupExperiment.customInit(semester_experiment=form.semester_experiment.data, group=form.group.data) + return GroupExperiment(semester_experiment=form.semester_experiment.data, group=form.group.data) def on_model_change(self, form, model, is_created): if is_created: diff --git a/advlabdb/database_import.py b/advlabdb/database_import.py index fd10ac4..586d731 100644 --- a/advlabdb/database_import.py +++ b/advlabdb/database_import.py @@ -243,7 +243,7 @@ def importFromFile(filePath): dbGroupExperiments = {} for i, id in enumerate(groupExperiments["id"]): id = int(id) - dbGroupExperiment = GroupExperiment.customInit( + dbGroupExperiment = GroupExperiment( semester_experiment=dbSemesterExperiments[int(groupExperiments["experiment_id"][i])], group=dbGroups[int(groupExperiments["group_id"][i])], ) diff --git a/advlabdb/models.py b/advlabdb/models.py index ec4dfa2..69198e7 100644 --- a/advlabdb/models.py +++ b/advlabdb/models.py @@ -73,16 +73,16 @@ class PartStudent(db.Model): db.UniqueConstraint(student_id, group_id), ) - def check(group, part): + def check(part, group): if group is not None and group.program != part.program: raise DataBaseException( f"Group's program {group.program} and student part's program {part.program} do not match!" ) - def __init__(self, *args, **kwargs): - PartStudent.check(kwargs.get("group"), kwargs["part"]) + def __init__(self, student, part, group=None): + PartStudent.check(part, group) - super().__init__(*args, **kwargs) + super().__init__(student=student, part=part, group=group) def customUpdate(self, group, final_part_mark): Part.check(group, self.part) @@ -176,11 +176,15 @@ class Group(db.Model): .order_by(Group.number.desc()) .first() ) - lastTakenGroupNumber = (groupWithHighestNumber and groupWithHighestNumber.number) or 0 + + if groupWithHighestNumber is not None: + number = groupWithHighestNumber.number + 1 + else: + number = 1 return Group( program=program, - number=lastTakenGroupNumber + 1, + number=number, part_students=part_students, semester=semester, ) @@ -209,22 +213,20 @@ class GroupExperiment(db.Model): __table_args__ = (db.UniqueConstraint(semester_experiment_id, group_id),) - def customInit(semester_experiment, group): + def __init__(self, semester_experiment, group): for partStudent in group.part_students: student = partStudent.student for partStudent in student.part_students: for experimentMark in partStudent.experiment_marks: if experimentMark.group_experiment.semester_experiment.experiment == semester_experiment.experiment: - raise Exception( + raise DataBaseException( f"{student} has already done {semester_experiment.experiment} in {partStudent.part} and had {experimentMark}!" ) - groupExperiment = GroupExperiment(semester_experiment=semester_experiment, group=group) + super().__init__(semester_experiment=semester_experiment, group=group) for partStudent in group.part_students: - db.session.add(ExperimentMark.customInit(part_student=partStudent, group_experiment=groupExperiment)) - - return groupExperiment + db.session.add(ExperimentMark.customInit(part_student=partStudent, group_experiment=self)) def repr(self): return f"SemExp {self.semester_experiment.repr()}; Gr {self.group.repr()}" @@ -372,16 +374,16 @@ class Appointment(db.Model): semesterExperimentAssistants = semesterExperiment.assistants if not semesterExperimentAssistants: - raise Exception(f"{semesterExperiment} does not have assistants yet!") + raise DataBaseException(f"{semesterExperiment} does not have assistants yet!") if assistant: if assistant not in semesterExperimentAssistants: - raise Exception(f"{assistant} not responsible for {semesterExperiment}!") + raise DataBaseException(f"{assistant} not responsible for {semesterExperiment}!") else: if len(semesterExperimentAssistants) == 1: assistant = semesterExperimentAssistants[0] else: - raise Exception( + raise DataBaseException( f"Experiment {semesterExperiment} has more than one assistant. You have to assign one of these assistants: {semesterExperimentAssistants}" ) diff --git a/advlabdb/scripts/test/test_database.py b/advlabdb/scripts/test/test_database.py index 0af700e..09dd477 100644 --- a/advlabdb/scripts/test/test_database.py +++ b/advlabdb/scripts/test/test_database.py @@ -92,8 +92,8 @@ def main(): db.session.add(sx1) db.session.add(sx2) - gx1 = GroupExperiment.customInit(semester_experiment=sx1, group=g1) - gx2 = GroupExperiment.customInit(semester_experiment=sx2, group=g2) + gx1 = GroupExperiment(semester_experiment=sx1, group=g1) + gx2 = GroupExperiment(semester_experiment=sx2, group=g2) db.session.add(gx1) db.session.add(gx2)