self.title = VersionedAttribute(self, 'title', 'UNNAMED')
self.description = VersionedAttribute(self, 'description', '')
self.effort = VersionedAttribute(self, 'effort', 1.0)
+ self.child_ids: list[int] = []
@classmethod
def from_table_row(cls, row: Row) -> Process:
for row in db_conn.exec('SELECT * FROM process_efforts '
'WHERE process_id = ?', (process.id_,)):
process.effort.history[row[1]] = row[2]
+ for row in db_conn.exec('SELECT * FROM process_children '
+ 'WHERE parent_id = ?', (process.id_,)):
+ process.child_ids += [row[1]]
return process
+ def children(self, db_conn: DatabaseConnection) -> list[Process]:
+ """Return child Processes as determined by self.child_ids."""
+ return [self.__class__.by_id(db_conn, id_) for id_ in self.child_ids]
+
def save(self, db_conn: DatabaseConnection) -> None:
"""Add (or re-write) self and connected VersionedAttributes to DB."""
cursor = db_conn.exec('REPLACE INTO processes VALUES (?)', (self.id_,))
self.title.save(db_conn)
self.description.save(db_conn)
self.effort.save(db_conn)
+ db_conn.exec('DELETE FROM process_children WHERE parent_id = ?',
+ (self.id_,))
+ for child_id in self.child_ids:
+ db_conn.exec('INSERT INTO process_children VALUES (?, ?)',
+ (self.id_, child_id))
class VersionedAttribute: