X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/decks/%7B%7Bdeck_id%7D%7D/cards/%7B%7B%20card_id%20%7D%7D/delete?a=blobdiff_plain;f=plomtask%2Ftodos.py;h=f5388b58f25ec1237b65b751c8fd5fa352160ddf;hb=692bfbac8d81ad5f1f0210e550dcabd15c58e8a5;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,