X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;ds=inline;f=plomtask%2Fprocesses.py;h=375a0bee622081fd8690cc0e6c1a8ae5241685e1;hb=f19823e9e77ae0017022dbfe63f66d2b065ba33a;hp=c0b13b551862b0c8a00c927c4cc0665ae178daeb;hpb=8570f4ce4d44b813a1f02b72c5c45a57d2003bae;p=plomtask
diff --git a/plomtask/processes.py b/plomtask/processes.py
index c0b13b5..375a0be 100644
--- a/plomtask/processes.py
+++ b/plomtask/processes.py
@@ -6,7 +6,8 @@ from sqlite3 import Row
from plomtask.db import DatabaseConnection, BaseModel
from plomtask.misc import VersionedAttribute
from plomtask.conditions import Condition, ConditionsRelations
-from plomtask.exceptions import NotFoundException, BadFormatException
+from plomtask.exceptions import (NotFoundException, BadFormatException,
+ HandledException)
@dataclass
@@ -169,6 +170,23 @@ class Process(BaseModel[int], ConditionsRelations):
for step in self.explicit_steps:
step.save(db_conn)
+ def remove(self, db_conn: DatabaseConnection) -> None:
+ """Remove from DB, with dependencies."""
+ assert isinstance(self.id_, int)
+ for _ in db_conn.row_where('process_steps', 'step_process', self.id_):
+ raise HandledException('cannot remove Process in use')
+ for _ in db_conn.row_where('todos', 'process', self.id_):
+ raise HandledException('cannot remove Process in use')
+ db_conn.delete_where('process_conditions', 'process', self.id_)
+ db_conn.delete_where('process_enables', 'process', self.id_)
+ db_conn.delete_where('process_disables', 'process', self.id_)
+ for step in self.explicit_steps:
+ step.remove(db_conn)
+ db_conn.delete_where('process_titles', 'parent', self.id_)
+ db_conn.delete_where('process_descriptions', 'parent', self.id_)
+ db_conn.delete_where('process_efforts', 'parent', self.id_)
+ super().remove(db_conn)
+
class ProcessStep(BaseModel[int]):
"""Sub-unit of Processes."""
@@ -185,3 +203,9 @@ class ProcessStep(BaseModel[int]):
def save(self, db_conn: DatabaseConnection) -> None:
"""Default to simply calling self.save_core for simple cases."""
self.save_core(db_conn)
+
+ def remove(self, db_conn: DatabaseConnection) -> None:
+ """Remove from DB, and owner's .explicit_steps."""
+ owner = Process.by_id(db_conn, self.owner_id)
+ owner.explicit_steps.remove(self)
+ super().remove(db_conn)