X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=plomtask%2Fdays.py;h=afe4a01be6f509a8b624da7c45650500a96805e2;hb=c5449a0b00f8865b1129ed56bdd16f1cc055bc87;hp=155ed03aabdbddacdf481267c04aa9d5a0fc29c0;hpb=b4a34a415fb31a00ee1e092fcc2a6b5d97edd52a;p=plomtask diff --git a/plomtask/days.py b/plomtask/days.py index 155ed03..afe4a01 100644 --- a/plomtask/days.py +++ b/plomtask/days.py @@ -3,7 +3,6 @@ from __future__ import annotations from typing import Any from sqlite3 import Row from datetime import datetime, timedelta -from plomtask.exceptions import HandledException from plomtask.db import DatabaseConnection, BaseModel from plomtask.todos import Todo from plomtask.dating import (DATE_FORMAT, valid_date) @@ -14,16 +13,12 @@ class Day(BaseModel[str]): table_name = 'days' to_save = ['comment'] - def __init__(self, - date: str, - comment: str = '', - init_empty_todo_list: bool = False - ) -> None: + def __init__(self, date: str, comment: str = '') -> None: id_ = valid_date(date) super().__init__(id_) self.datetime = datetime.strptime(self.date, DATE_FORMAT) self.comment = comment - self._todos: list[Todo] | None = [] if init_empty_todo_list else None + self.todos: list[Todo] = [] def __lt__(self, other: Day) -> bool: return self.date < other.date @@ -32,25 +27,22 @@ class Day(BaseModel[str]): def from_table_row(cls, db_conn: DatabaseConnection, row: Row | list[Any] ) -> Day: """Make from DB row, with linked Todos.""" - # pylint: disable=protected-access - # (since on ._todo we're only meddling within cls) day = super().from_table_row(db_conn, row) assert isinstance(day.id_, str) - day._todos = Todo.by_date(db_conn, day.id_) + day.todos = Todo.by_date(db_conn, day.id_) return day @classmethod def by_id(cls, db_conn: DatabaseConnection, id_: str | None, create: bool = False, - init_empty_todo_list: bool = False ) -> Day: - """Extend BaseModel.by_id with init_empty_todo_list flag.""" - # pylint: disable=protected-access - # (since on ._todo we're only meddling within cls) + """Extend BaseModel.by_id checking for new/lost .todos.""" day = super().by_id(db_conn, id_, create) - if init_empty_todo_list and day._todos is None: - day._todos = [] + assert day.id_ is not None + if day.id_ in Todo.days_to_update: + Todo.days_to_update.remove(day.id_) + day.todos = Todo.by_date(db_conn, day.id_) return day @classmethod @@ -69,16 +61,16 @@ class Day(BaseModel[str]): return days days.sort() if start_date not in [d.date for d in days]: - days[:] = [Day(start_date, init_empty_todo_list=True)] + days + days[:] = [Day(start_date)] + days if end_date not in [d.date for d in days]: - days += [Day(end_date, init_empty_todo_list=True)] + days += [Day(end_date)] if len(days) > 1: gapless_days = [] for i, day in enumerate(days): gapless_days += [day] if i < len(days) - 1: while day.next_date != days[i+1].date: - day = Day(day.next_date, init_empty_todo_list=True) + day = Day(day.next_date) gapless_days += [day] days[:] = gapless_days return days @@ -117,14 +109,6 @@ class Day(BaseModel[str]): next_datetime = self.datetime + timedelta(days=1) return next_datetime.strftime(DATE_FORMAT) - @property - def todos(self) -> list[Todo]: - """Return self.todos if initialized, else raise Exception.""" - if self._todos is None: - msg = 'Trying to return from un-initialized Day.todos.' - raise HandledException(msg) - return list(self._todos) - @property def calendarized_todos(self) -> list[Todo]: """Return only those of self.todos that have .calendarize set."""