from flask import abort from ...examination_schedule.models import ExaminationSchedule, TermOfDefence from ...students.models import Group def get_term_of_defence_by_id_and_examination_schedule_id(examination_schedule_id: int, term_of_defence_id: int) -> ExaminationSchedule: td = TermOfDefence.query.filter(TermOfDefence.id == term_of_defence_id, TermOfDefence.examination_schedule_id == examination_schedule_id).first() if td is None: abort(404, "Not found examination schedule or term of defence!") return td def get_group_by_id(group_id: int) -> Group: group = Group.query.filter(Group.id == group_id).first() if group is None: abort(404, "Not found group!") return group def check_the_group_has_assigned_to_term_of_defence(group_id: int) -> TermOfDefence: td = TermOfDefence.query.filter(TermOfDefence.group_id == group_id).first() if td is not None: abort(400, "Group has already assigned to term of defence!") return td def set_new_group_to_term_of_defence(examination_schedule_id: int, term_of_defence_id: int, group_id: int) -> TermOfDefence: td = get_term_of_defence_by_id_and_examination_schedule_id(examination_schedule_id, term_of_defence_id) get_group_by_id(group_id) check_the_group_has_assigned_to_term_of_defence(group_id) td.group_id = group_id return td def get_examination_schedule_by_id(examination_schedule_id: int) -> ExaminationSchedule: ex = ExaminationSchedule.query.filter(ExaminationSchedule.id == examination_schedule_id).first() if ex is None: abort(404, "Not found examination schedule!") return ex