X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=plomtask%2Ftodos.py;h=a7af99faa3a298e27548e7a7234699c1cf8038fc;hb=HEAD;hp=705bd725e2ff662ab4f9f2e370e61169a413ff03;hpb=c5449a0b00f8865b1129ed56bdd16f1cc055bc87;p=plomtask diff --git a/plomtask/todos.py b/plomtask/todos.py index 705bd72..f5388b5 100644 --- a/plomtask/todos.py +++ b/plomtask/todos.py @@ -1,6 +1,5 @@ """Actionables.""" from __future__ import annotations -from dataclasses import dataclass from typing import Any, Set from sqlite3 import Row from plomtask.db import DatabaseConnection, BaseModel @@ -12,13 +11,28 @@ from plomtask.exceptions import (NotFoundException, BadFormatException, 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.""" @@ -37,6 +51,10 @@ class Todo(BaseModel[int], ConditionsRelations): 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,