X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=plomtask%2Fprocesses.py;h=e1364215cfe57e5c66d376cd95cf721fe4f6f65a;hb=e150bee233a648950061b716dc1780581105ede6;hp=c4ccfa8fd3926491bf1a52fc3c2c36d6d271cd63;hpb=10af8a54a17047a4554d4b8d051a238271c74906;p=plomtask diff --git a/plomtask/processes.py b/plomtask/processes.py index c4ccfa8..e136421 100644 --- a/plomtask/processes.py +++ b/plomtask/processes.py @@ -22,16 +22,21 @@ class ProcessStepsNode: class Process(BaseModel[int], ConditionsRelations): """Template for, and metadata for, Todos, and their arrangements.""" - table_name = 'processes' - # pylint: disable=too-many-instance-attributes + table_name = 'processes' + to_save = ['calendarize'] + to_save_versioned = ['title', 'description', 'effort'] + to_save_relations = [('process_conditions', 'process', 'conditions'), + ('process_enables', 'process', 'enables'), + ('process_disables', 'process', 'disables')] - def __init__(self, id_: int | None) -> None: + def __init__(self, id_: int | None, calendarize: bool = False) -> None: super().__init__(id_) self.title = VersionedAttribute(self, 'process_titles', 'UNNAMED') self.description = VersionedAttribute(self, 'process_descriptions', '') self.effort = VersionedAttribute(self, 'process_efforts', 1.0) self.explicit_steps: list[ProcessStep] = [] + self.calendarize = calendarize self.conditions: list[Condition] = [] self.enables: list[Condition] = [] self.disables: list[Condition] = [] @@ -155,17 +160,8 @@ class Process(BaseModel[int], ConditionsRelations): def save(self, db_conn: DatabaseConnection) -> None: """Add (or re-write) self and connected items to DB.""" - self.save_core(db_conn) + super().save(db_conn) assert isinstance(self.id_, int) - self.title.save(db_conn) - self.description.save(db_conn) - 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_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) @@ -180,14 +176,8 @@ class Process(BaseModel[int], ConditionsRelations): 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) @@ -203,10 +193,6 @@ class ProcessStep(BaseModel[int]): self.step_process_id = step_process_id self.parent_step_id = parent_step_id - 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)