"""Actionables."""
from __future__ import annotations
-from dataclasses import dataclass
from typing import Any, Set
from sqlite3 import Row
from plomtask.db import DatabaseConnection, BaseModel
from plomtask.dating import valid_date
-@dataclass
class TodoNode:
"""Collects what's useful to know for Todo/Condition tree display."""
+ # pylint: disable=too-few-public-methods
todo: Todo
seen: bool
children: list[TodoNode]
+ def __init__(self,
+ todo: Todo,
+ seen: bool,
+ children: list[TodoNode]) -> None:
+ self.todo = todo
+ self.seen = seen
+ self.children = children
+
+ @property
+ def as_dict(self) -> dict[str, object]:
+ """Return self as (json.dumps-coompatible) dict."""
+ return {'todo': self.todo.id_,
+ 'seen': self.seen,
+ 'children': [c.as_dict for c in self.children]}
+
class Todo(BaseModel[int], ConditionsRelations):
"""Individual actionable."""
days_to_update: Set[str] = set()
children: list[Todo]
parents: list[Todo]
+ sorters = {'doneness': lambda t: t.is_done,
+ 'title': lambda t: t.title_then,
+ 'comment': lambda t: t.comment,
+ 'date': lambda t: t.date}
# pylint: disable=too-many-arguments
def __init__(self, id_: int | None,