X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=plomtask%2Ftodos.py;fp=plomtask%2Ftodos.py;h=b3d50e9d4942c57cb5b4ef16892401df4eb7f6f7;hb=31b778276bb7297151f1c90098cc50842c9c138f;hp=0fea23445ac1881a18ea87eca95cba7f03510f95;hpb=6f44fcfab7927af1800107f9a2ad3ba05e0651f9;p=plomtask diff --git a/plomtask/todos.py b/plomtask/todos.py index 0fea234..b3d50e9 100644 --- a/plomtask/todos.py +++ b/plomtask/todos.py @@ -105,6 +105,15 @@ class Todo(BaseModel[int], ConditionsRelations): return False return True + @property + def is_deletable(self) -> bool: + """Decide whether self be deletable (not if preserve-worthy values).""" + if self.comment: + return False + if self.effort and self.effort >= 0: + return False + return True + @property def process_id(self) -> int | str | None: """Needed for super().save to save Processes as attributes.""" @@ -201,8 +210,17 @@ class Todo(BaseModel[int], ConditionsRelations): self.children.remove(child) child.parents.remove(self) + def save(self, db_conn: DatabaseConnection) -> None: + """On save calls, also check if auto-deletion by effort < 0.""" + if self.effort and self.effort < 0 and self.is_deletable: + self.remove(db_conn) + return + super().save(db_conn) + def remove(self, db_conn: DatabaseConnection) -> None: """Remove from DB, including relations.""" + if not self.is_deletable: + raise HandledException('Cannot remove non-deletable Todo.') children_to_remove = self.children[:] parents_to_remove = self.parents[:] for child in children_to_remove: