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

Remove GroupExperiment.customInit

This commit is contained in:
Mo 2022-05-15 20:59:57 +02:00
parent 86c7f6d915
commit 2f7d005ea4
4 changed files with 22 additions and 20 deletions

View file

@ -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:

View file

@ -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])],
)

View file

@ -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}"
)

View file

@ -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)