From f70877e9bf3cbb32ed862cc7f1e87c6c756b6017 Mon Sep 17 00:00:00 2001
From: Jorrit Schaap <schaap@astron.nl>
Date: Thu, 22 Apr 2021 12:31:06 +0200
Subject: [PATCH] TMSS-666: added resursive methods to cancel all successor
 subtasks

---
 SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
index 59e0ec30306..b5a78c4074f 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
@@ -1889,6 +1889,19 @@ def cancel_subtask(subtask: Subtask) -> Subtask:
     return subtask
 
 
+def cancel_subtask_and_successors(subtask: Subtask) -> Subtask:
+    '''cancel this given subtask and all the downstream successor subtasks (recurses, following the successors of successors of successors of... etc'''
+    cancel_subtask(subtask)
+    cancel_subtask_successors(subtask)
+    return subtask
+
+
+def cancel_subtask_successors(subtask: Subtask):
+    '''cancel all the downstream successor subtasks (recurses, following the successors of successors of successors of... etc'''
+    for successor in subtask.successors:
+        cancel_subtask_and_successors(successor)
+
+
 def kill_observation_subtask(subtask: Subtask) -> bool:
     '''Kill the observation subtask. Return True if actually killed.'''
     if subtask.specifications_template.type.value == SubtaskType.Choices.OBSERVATION.value:
-- 
GitLab