home · contact · privacy
Refactor save and remove methods of BaseObject subclasses.
[plomtask] / plomtask / todos.py
index ecdd599f2cd538acda5494fc5035e72e076b6730..fcb8617d71a055f49549d657b0dcedd294dd9b4d 100644 (file)
@@ -25,10 +25,17 @@ class Todo(BaseModel[int], ConditionsRelations):
     # pylint: disable=too-many-instance-attributes
     table_name = 'todos'
     to_save = ['process_id', 'is_done', 'date']
+    to_save_relations = [('todo_conditions', 'todo', 'conditions'),
+                         ('todo_enables', 'todo', 'enables'),
+                         ('todo_disables', 'todo', 'disables'),
+                         ('todo_children', 'parent', 'children'),
+                         ('todo_children', 'child', 'parents')]
 
     def __init__(self, id_: int | None, process: Process,
                  is_done: bool, date: str) -> None:
         super().__init__(id_)
+        if process.id_ is None:
+            raise NotFoundException('Process of Todo without ID (not saved?)')
         self.process = process
         self._is_done = is_done
         self.date = date
@@ -252,35 +259,12 @@ class Todo(BaseModel[int], ConditionsRelations):
         self.children.remove(child)
         child.parents.remove(self)
 
-    def save(self, db_conn: DatabaseConnection) -> None:
-        """Write self and children to DB and its cache."""
-        if self.process.id_ is None:
-            raise NotFoundException('Process of Todo without ID (not saved?)')
-        self.save_core(db_conn)
-        assert isinstance(self.id_, int)
-        db_conn.rewrite_relations('todo_children', 'child', self.id_,
-                                  [[p.id_] for p in self.parents])
-        db_conn.rewrite_relations('todo_children', 'parent', self.id_,
-                                  [[c.id_] for c in self.children])
-        db_conn.rewrite_relations('todo_conditions', 'todo', self.id_,
-                                  [[c.id_] for c in self.conditions])
-        db_conn.rewrite_relations('todo_enables', 'todo', self.id_,
-                                  [[c.id_] for c in self.enables])
-        db_conn.rewrite_relations('todo_disables', 'todo', self.id_,
-                                  [[c.id_] for c in self.disables])
-
     def remove(self, db_conn: DatabaseConnection) -> None:
         """Remove from DB, including relations."""
-        assert isinstance(self.id_, int)
         children_to_remove = self.children[:]
         parents_to_remove = self.parents[:]
         for child in children_to_remove:
             self.remove_child(child)
         for parent in parents_to_remove:
             parent.remove_child(self)
-        db_conn.delete_where('todo_children', 'parent', self.id_)
-        db_conn.delete_where('todo_children', 'child', self.id_)
-        db_conn.delete_where('todo_conditions', 'todo', self.id_)
-        db_conn.delete_where('todo_enables', 'todo', self.id_)
-        db_conn.delete_where('todo_disables', 'todo', self.id_)
         super().remove(db_conn)