home
·
contact
·
privacy
projects
/
plomtask
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Base core models on BaseModel providing sensible defaults.
[plomtask]
/
plomtask
/
todos.py
diff --git
a/plomtask/todos.py
b/plomtask/todos.py
index ce83faddff55278c0efe44f604f6a5fddfaa5851..5d46b30d93640e40ba39f6e0cd1ba4b114241396 100644
(file)
--- a/
plomtask/todos.py
+++ b/
plomtask/todos.py
@@
-1,7
+1,7
@@
"""Actionables."""
from __future__ import annotations
from sqlite3 import Row
"""Actionables."""
from __future__ import annotations
from sqlite3 import Row
-from plomtask.db import DatabaseConnection
+from plomtask.db import DatabaseConnection
, BaseModel
from plomtask.days import Day
from plomtask.processes import Process
from plomtask.conditions import Condition
from plomtask.days import Day
from plomtask.processes import Process
from plomtask.conditions import Condition
@@
-9,14
+9,18
@@
from plomtask.exceptions import (NotFoundException, BadFormatException,
HandledException)
HandledException)
-class Todo:
+class Todo
(BaseModel)
:
"""Individual actionable."""
# pylint: disable=too-many-instance-attributes
"""Individual actionable."""
# pylint: disable=too-many-instance-attributes
+ name = 'Todo'
+ table_name = 'todos'
+ to_save = ['process_id', 'is_done', 'date']
+
def __init__(self, id_: int | None, process: Process,
is_done: bool, day: Day) -> None:
def __init__(self, id_: int | None, process: Process,
is_done: bool, day: Day) -> None:
- self.
id_ = id_
+ self.
set_int_id(id_)
self.process = process
self._is_done = is_done
self.day = day
self.process = process
self._is_done = is_done
self.day = day
@@
-37,7
+41,7
@@
class Todo:
process=Process.by_id(db_conn, row[1]),
is_done=bool(row[2]),
day=Day.by_date(db_conn, row[3]))
process=Process.by_id(db_conn, row[1]),
is_done=bool(row[2]),
day=Day.by_date(db_conn, row[3]))
- assert
todo.id_ is not None
+ assert
isinstance(todo.id_, int)
db_conn.cached_todos[todo.id_] = todo
return todo
db_conn.cached_todos[todo.id_] = todo
return todo
@@
-115,6
+119,16
@@
class Todo:
return False
return True
return False
return True
+ @property
+ def process_id(self) -> int | str | None:
+ """Return ID of tasked Process."""
+ return self.process.id_
+
+ @property
+ def date(self) -> str:
+ """Return date of used Day."""
+ return self.day.date
+
@property
def is_done(self) -> bool:
"""Wrapper around self._is_done so we can control its setter."""
@property
def is_done(self) -> bool:
"""Wrapper around self._is_done so we can control its setter."""
@@
-171,11
+185,8
@@
class Todo:
"""Write self and children to DB and its cache."""
if self.process.id_ is None:
raise NotFoundException('Process of Todo without ID (not saved?)')
"""Write self and children to DB and its cache."""
if self.process.id_ is None:
raise NotFoundException('Process of Todo without ID (not saved?)')
- cursor = db_conn.exec('REPLACE INTO todos VALUES (?,?,?,?)',
- (self.id_, self.process.id_,
- self.is_done, self.day.date))
- self.id_ = cursor.lastrowid
- assert self.id_ is not None
+ self.save_core(db_conn)
+ assert isinstance(self.id_, int)
db_conn.cached_todos[self.id_] = self
db_conn.exec('DELETE FROM todo_children WHERE parent = ?',
(self.id_,))
db_conn.cached_todos[self.id_] = self
db_conn.exec('DELETE FROM todo_children WHERE parent = ?',
(self.id_,))