home · contact · privacy
Add Todo.parents.
authorChristian Heller <c.heller@plomlompom.de>
Sat, 13 Apr 2024 01:20:33 +0000 (03:20 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sat, 13 Apr 2024 01:20:33 +0000 (03:20 +0200)
plomtask/todos.py
tests/todos.py

index 7faea73b74df9c4b5a8f68f6dceced09f27c9b67..e8e00acbd8cd77d58d7d99ce2d0551288ffb96f4 100644 (file)
@@ -18,6 +18,7 @@ class Todo:
         self.is_done = is_done
         self.day = day
         self.children: list[Todo] = []
+        self.parents: list[Todo] = []
 
     @classmethod
     def from_table_row(cls, db_conn: DatabaseConnection, row: Row) -> Todo:
@@ -46,6 +47,9 @@ class Todo:
             for row in db_conn.exec('SELECT child FROM todo_children '
                                     'WHERE parent = ?', (id_,)):
                 todo.children += [cls.by_id(db_conn, row[0])]
+            for row in db_conn.exec('SELECT parent FROM todo_children '
+                                    'WHERE child = ?', (id_,)):
+                todo.parents += [cls.by_id(db_conn, row[0])]
         assert isinstance(todo, Todo)
         return todo
 
@@ -72,6 +76,7 @@ class Todo:
             raise BadFormatException('cannot adopt same child twice')
         walk_steps(child)
         self.children += [child]
+        child.parents += [self]
 
     def save(self, db_conn: DatabaseConnection) -> None:
         """Write self and children to DB and its cache."""
index 7ae6b64d4a58d6727659c870e5c84e7e7fea4074..a377920d615fec4d78f44ac33ec0856d6d8f2989 100644 (file)
@@ -118,6 +118,7 @@ class TestsWithServer(TestCaseWithServer):
         self.check_post(form_data, '/todo?id=1', 302, '/')
         todo1 = Todo.by_date(self.db_conn, '2024-01-01')[0]
         self.assertEqual(todo1.children, [])
+        self.assertEqual(todo1.parents, [])
         form_data = {'adopt': 'foo'}
         self.check_post(form_data, '/todo?id=1', 400)
         form_data = {'adopt': 1}
@@ -132,6 +133,9 @@ class TestsWithServer(TestCaseWithServer):
         todo1 = Todo.by_date(self.db_conn, '2024-01-01')[0]
         todo2 = Todo.by_date(self.db_conn, '2024-01-01')[1]
         self.assertEqual(todo1.children, [todo2])
+        self.assertEqual(todo1.parents, [])
+        self.assertEqual(todo2.children, [])
+        self.assertEqual(todo2.parents, [todo1])
         self.check_post(form_data, '/todo?id=1', 400, '/')
 
     def test_do_GET_todo(self) -> None: