"""Individual actionable."""
# pylint: disable=too-many-instance-attributes
table_name = 'todos'
- to_save = ['process_id', 'is_done', 'date', 'comment', 'effort']
+ to_save = ['process_id', 'is_done', 'date', 'comment', 'effort',
+ 'calendarize']
to_save_relations = [('todo_conditions', 'todo', 'conditions'),
('todo_enables', 'todo', 'enables'),
('todo_disables', 'todo', 'disables'),
('todo_children', 'child', 'parents')]
# pylint: disable=too-many-arguments
- def __init__(self, id_: int | None, process: Process,
- is_done: bool, date: str, comment: str = '',
- effort: None | float = None) -> None:
+ def __init__(self, id_: int | None,
+ process: Process,
+ is_done: bool,
+ date: str, comment: str = '',
+ effort: None | float = None,
+ calendarize: bool = False) -> None:
super().__init__(id_)
if process.id_ is None:
raise NotFoundException('Process of Todo without ID (not saved?)')
self.effort = effort
self.children: list[Todo] = []
self.parents: list[Todo] = []
+ self.calendarize = calendarize
self.conditions: list[Condition] = []
self.enables: list[Condition] = []
self.disables: list[Condition] = []
if not self.id_:
+ self.calendarize = self.process.calendarize
self.conditions = self.process.conditions[:]
self.enables = self.process.enables[:]
self.disables = self.process.disables[:]
return False
return True
+ @property
+ def is_deletable(self) -> bool:
+ """Decide whether self be deletable (not if preserve-worthy values)."""
+ if self.comment:
+ return False
+ if self.effort and self.effort >= 0:
+ return False
+ return True
+
@property
def process_id(self) -> int | str | None:
"""Needed for super().save to save Processes as attributes."""
self.children.remove(child)
child.parents.remove(self)
+ def save(self, db_conn: DatabaseConnection) -> None:
+ """On save calls, also check if auto-deletion by effort < 0."""
+ if self.effort and self.effort < 0 and self.is_deletable:
+ self.remove(db_conn)
+ return
+ super().save(db_conn)
+
def remove(self, db_conn: DatabaseConnection) -> None:
"""Remove from DB, including relations."""
+ if not self.is_deletable:
+ raise HandledException('Cannot remove non-deletable Todo.')
children_to_remove = self.children[:]
parents_to_remove = self.parents[:]
for child in children_to_remove: