X-Git-Url: https://plomlompom.com/repos//%22https:/validator.w3.org/check?a=blobdiff_plain;f=plomtask%2Fprocesses.py;h=a3682c541c4b6c95d9ce6e9551c815d6d1f0c551;hb=89624d5e05480c832a079008bbb9992f411be0dd;hp=2f8c2d537a168062cee953985242b732f1973a72;hpb=5195f3f36960b76d1b6530ef1822d0806db221d8;p=plomtask diff --git a/plomtask/processes.py b/plomtask/processes.py index 2f8c2d5..a3682c5 100644 --- a/plomtask/processes.py +++ b/plomtask/processes.py @@ -40,30 +40,24 @@ class Process(BaseModel): def by_id(cls, db_conn: DatabaseConnection, id_: int | None, create: bool = False) -> Process: """Collect Process, its VersionedAttributes, and its child IDs.""" - if id_ in db_conn.cached_processes.keys(): - process = db_conn.cached_processes[id_] - assert isinstance(process, Process) - return process process = None - for row in db_conn.exec('SELECT * FROM processes ' - 'WHERE id = ?', (id_,)): - process = cls(row[0]) - break + if id_: + process, _ = super()._by_id(db_conn, id_) if not process: if not create: raise NotFoundException(f'Process not found of id: {id_}') process = Process(id_) for row in db_conn.exec('SELECT * FROM process_titles ' - 'WHERE parent_id = ?', (process.id_,)): + 'WHERE parent = ?', (process.id_,)): process.title.history[row[1]] = row[2] for row in db_conn.exec('SELECT * FROM process_descriptions ' - 'WHERE parent_id = ?', (process.id_,)): + 'WHERE parent = ?', (process.id_,)): process.description.history[row[1]] = row[2] for row in db_conn.exec('SELECT * FROM process_efforts ' - 'WHERE parent_id = ?', (process.id_,)): + 'WHERE parent = ?', (process.id_,)): process.effort.history[row[1]] = row[2] for row in db_conn.exec('SELECT * FROM process_steps ' - 'WHERE owner_id = ?', (process.id_,)): + 'WHERE owner = ?', (process.id_,)): process.explicit_steps += [ProcessStep.from_table_row(db_conn, row)] for row in db_conn.exec('SELECT condition FROM process_conditions ' @@ -81,8 +75,8 @@ class Process(BaseModel): def used_as_step_by(self, db_conn: DatabaseConnection) -> list[Process]: """Return Processes using self for a ProcessStep.""" owner_ids = set() - for owner_id in db_conn.exec('SELECT owner_id FROM process_steps WHERE' - ' step_process_id = ?', (self.id_,)): + for owner_id in db_conn.exec('SELECT owner FROM process_steps WHERE' + ' step_process = ?', (self.id_,)): owner_ids.add(owner_id[0]) return [self.__class__.by_id(db_conn, id_) for id_ in owner_ids] @@ -180,7 +174,7 @@ class Process(BaseModel): assert isinstance(step.id_, int) del db_conn.cached_process_steps[step.id_] self.explicit_steps = [] - db_conn.exec('DELETE FROM process_steps WHERE owner_id = ?', + db_conn.exec('DELETE FROM process_steps WHERE owner = ?', (self.id_,)) for step_tuple in steps: self._add_step(db_conn, step_tuple[0], @@ -189,26 +183,17 @@ class Process(BaseModel): def save(self, db_conn: DatabaseConnection) -> None: """Add (or re-write) self and connected items to DB.""" self.save_core(db_conn) + assert isinstance(self.id_, int) self.title.save(db_conn) self.description.save(db_conn) self.effort.save(db_conn) - db_conn.exec('DELETE FROM process_conditions WHERE process = ?', - (self.id_,)) - for condition in self.conditions: - db_conn.exec('INSERT INTO process_conditions VALUES (?,?)', - (self.id_, condition.id_)) - db_conn.exec('DELETE FROM process_fulfills WHERE process = ?', - (self.id_,)) - for condition in self.fulfills: - db_conn.exec('INSERT INTO process_fulfills VALUES (?,?)', - (self.id_, condition.id_)) - db_conn.exec('DELETE FROM process_undoes WHERE process = ?', - (self.id_,)) - for condition in self.undoes: - db_conn.exec('INSERT INTO process_undoes VALUES (?,?)', - (self.id_, condition.id_)) - assert isinstance(self.id_, int) - db_conn.exec('DELETE FROM process_steps WHERE owner_id = ?', + 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.exec('DELETE FROM process_steps WHERE owner = ?', (self.id_,)) for step in self.explicit_steps: step.save(db_conn) @@ -230,14 +215,10 @@ class ProcessStep(BaseModel): @classmethod def by_id(cls, db_conn: DatabaseConnection, id_: int) -> ProcessStep: """Retrieve ProcessStep by id_, or throw NotFoundException.""" - if id_ in db_conn.cached_process_steps.keys(): - step = db_conn.cached_process_steps[id_] + step, _ = super()._by_id(db_conn, id_) + if step: assert isinstance(step, ProcessStep) return step - for row in db_conn.exec('SELECT * FROM process_steps ' - 'WHERE step_id = ?', (id_,)): - step = cls.from_table_row(db_conn, row) - assert isinstance(step, ProcessStep) raise NotFoundException(f'found no ProcessStep of ID {id_}') def save(self, db_conn: DatabaseConnection) -> None: