home · contact · privacy
Minor fixes.
[plomtask] / plomtask / conditions.py
index b87e3ac3e16f1500da87962d2adfb333093f0f54..cd147cb79cafcfd81f4672fae0a0b6296201ff6a 100644 (file)
@@ -27,7 +27,7 @@ class Condition(BaseModel):
         assert isinstance(condition, Condition)
         for name in ('title', 'description'):
             table_name = f'condition_{name}s'
-            for row_ in db_conn.all_where(table_name, 'parent', row[0]):
+            for row_ in db_conn.row_where(table_name, 'parent', row[0]):
                 getattr(condition, name).history_from_row(row_)
         return condition
 
@@ -38,9 +38,9 @@ class Condition(BaseModel):
         for id_, condition in db_conn.cached_conditions.items():
             conditions[id_] = condition
         already_recorded = conditions.keys()
-        for row in db_conn.exec('SELECT id FROM conditions'):
-            if row[0] not in already_recorded:
-                condition = cls.by_id(db_conn, row[0])
+        for id_ in db_conn.column_all('conditions', 'id'):
+            if id_ not in already_recorded:
+                condition = cls.by_id(db_conn, id_)
                 conditions[condition.id_] = condition
         return list(conditions.values())
 
@@ -66,3 +66,26 @@ class Condition(BaseModel):
         self.description.save(db_conn)
         assert isinstance(self.id_, int)
         db_conn.cached_conditions[self.id_] = self
+
+
+class ConditionsRelations:
+    """Methods for handling relations to Conditions, for Todo and Process."""
+
+    def set_conditions(self, db_conn: DatabaseConnection, ids: list[int],
+                       target: str = 'conditions') -> None:
+        """Set self.[target] to Conditions identified by ids."""
+        target_list = getattr(self, target)
+        while len(target_list) > 0:
+            target_list.pop()
+        for id_ in ids:
+            target_list += [Condition.by_id(db_conn, id_)]
+
+    def set_enables(self, db_conn: DatabaseConnection,
+                    ids: list[int]) -> None:
+        """Set self.enables to Conditions identified by ids."""
+        self.set_conditions(db_conn, ids, 'enables')
+
+    def set_disables(self, db_conn: DatabaseConnection,
+                     ids: list[int]) -> None:
+        """Set self.disables to Conditions identified by ids."""
+        self.set_conditions(db_conn, ids, 'disables')