from typing import Any, Set
from plomtask.db import DatabaseConnection, BaseModel
from plomtask.misc import VersionedAttribute
-from plomtask.conditions import Condition
+from plomtask.conditions import Condition, ConditionsRelations
from plomtask.exceptions import NotFoundException, BadFormatException
-class Process(BaseModel):
+class Process(BaseModel, ConditionsRelations):
"""Template for, and metadata for, Todos, and their arrangements."""
table_name = 'processes'
self.effort = VersionedAttribute(self, 'process_efforts', 1.0)
self.explicit_steps: list[ProcessStep] = []
self.conditions: list[Condition] = []
- self.fulfills: list[Condition] = []
- self.undoes: list[Condition] = []
+ self.enables: list[Condition] = []
+ self.disables: list[Condition] = []
@classmethod
def all(cls, db_conn: DatabaseConnection) -> list[Process]:
process.id_):
step = ProcessStep.from_table_row(db_conn, row)
process.explicit_steps += [step]
- for name in ('conditions', 'fulfills', 'undoes'):
+ for name in ('conditions', 'enables', 'disables'):
table = f'process_{name}'
for cond_id in db_conn.column_where(table, 'condition',
'process', process.id_):
walk_steps(step_id, step_node)
return steps
- def set_conditions(self, db_conn: DatabaseConnection, ids: list[int],
- trgt: str = 'conditions') -> None:
- """Set self.[target] to Conditions identified by ids."""
- trgt_list = getattr(self, trgt)
- while len(trgt_list) > 0:
- trgt_list.pop()
- for id_ in ids:
- trgt_list += [Condition.by_id(db_conn, id_)]
-
- def set_fulfills(self, db_conn: DatabaseConnection,
- ids: list[int]) -> None:
- """Set self.fulfills to Conditions identified by ids."""
- self.set_conditions(db_conn, ids, 'fulfills')
-
- def set_undoes(self, db_conn: DatabaseConnection, ids: list[int]) -> None:
- """Set self.undoes to Conditions identified by ids."""
- self.set_conditions(db_conn, ids, 'undoes')
-
def _add_step(self,
db_conn: DatabaseConnection,
id_: int | None,
self.effort.save(db_conn)
db_conn.rewrite_relations('process_conditions', 'process', self.id_,
[[c.id_] for c in self.conditions])
- db_conn.rewrite_relations('process_fulfills', 'process', self.id_,
- [[c.id_] for c in self.fulfills])
- db_conn.rewrite_relations('process_undoes', 'process', self.id_,
- [[c.id_] for c in self.undoes])
+ db_conn.rewrite_relations('process_enables', 'process', self.id_,
+ [[c.id_] for c in self.enables])
+ db_conn.rewrite_relations('process_disables', 'process', self.id_,
+ [[c.id_] for c in self.disables])
db_conn.delete_where('process_steps', 'owner', self.id_)
for step in self.explicit_steps:
step.save(db_conn)