- def by_id(cls, db_conn: DatabaseConnection, id_: int) -> Todo:
- """Get Todo of .id_=id_."""
- for row in db_conn.exec('SELECT * FROM todos WHERE id = ?', (id_,)):
- return cls.from_table_row(row, db_conn)
- raise NotFoundException(f'Todo of ID not found: {id_}')
+ def by_id(cls, db_conn: DatabaseConnection, id_: int | None) -> Todo:
+ """Get Todo of .id_=id_ and children (from DB cache if possible)."""
+ if id_ in db_conn.cached_todos.keys():
+ todo = db_conn.cached_todos[id_]
+ else:
+ todo = None
+ for row in db_conn.exec('SELECT * FROM todos WHERE id = ?',
+ (id_,)):
+ todo = cls.from_table_row(db_conn, row)
+ break
+ if todo is None:
+ raise NotFoundException(f'Todo of ID not found: {id_}')
+ for row in db_conn.exec('SELECT child FROM todo_children '
+ 'WHERE parent = ?', (id_,)):
+ todo.children += [cls.by_id(db_conn, row[0])]
+ assert isinstance(todo, Todo)
+ return todo