From bebf4aca45d8223b92eecb3be5b0cf883fdb035b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Juh=C3=A1s?= <xjuhas@fi.muni.cz> Date: Fri, 16 Aug 2024 10:31:47 +0200 Subject: [PATCH] feat: prevent deleting definition with running exercises No API changes Closes #209 --- exercise_definition/lib/definition_manager.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/exercise_definition/lib/definition_manager.py b/exercise_definition/lib/definition_manager.py index bd21fe1c..d83ef500 100644 --- a/exercise_definition/lib/definition_manager.py +++ b/exercise_definition/lib/definition_manager.py @@ -2,6 +2,7 @@ import os from django.conf import settings +from common_lib.exceptions import ExerciseOperationException from common_lib.logger import logger from common_lib.utils import get_model from exercise.lib.exercise_manager import ExerciseManager @@ -12,7 +13,17 @@ class DefinitionManager: @staticmethod def delete_definition(definition_id: int): definition = get_model(Definition, id=definition_id) - for exercise in definition.exercises.all(): + exercises = definition.exercises.all() + running_exercise_ids = [ + exercise.id for exercise in exercises if exercise.running + ] + if len(running_exercise_ids) != 0: + raise ExerciseOperationException( + f"Cannot delete this definition because " + f"these running exercises depend on it {running_exercise_ids}" + ) + + for exercise in exercises: ExerciseManager.delete_exercise(exercise.id) for file_info in definition.files.all(): -- GitLab