X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/static/git-favicon.png?a=blobdiff_plain;f=plomtask%2Ftodos.py;h=80dc97c25ac481089b5760a0c8072af5f755ef08;hb=696aed8a590fa9c67a6b9c723e2134b2663bd769;hp=ed78ca947b359286456e7dcc4c664fcb32961c12;hpb=e825a876e82ffbedf0234f4dfb6d6055d9e29241;p=plomtask diff --git a/plomtask/todos.py b/plomtask/todos.py index ed78ca9..80dc97c 100644 --- a/plomtask/todos.py +++ b/plomtask/todos.py @@ -130,12 +130,12 @@ class Todo(BaseModel, ConditionsRelations): @property def unsatisfied_dependencies(self) -> list[int]: """Return Process IDs of .process.explicit_steps not in .children.""" - child_process_ids = {c.process.id_ for c in self.children} - unsatisfied: list[int] = [] - for process_id in [s.step_process_id - for s in self.process.explicit_steps]: - if process_id not in child_process_ids: - unsatisfied += [process_id] + unsatisfied = [s.step_process_id for s in self.process.explicit_steps + if s.parent_step_id is None] + for child_process_id in [c.process.id_ for c in self.children]: + if child_process_id in unsatisfied: + assert isinstance(child_process_id, int) + unsatisfied.remove(child_process_id) return unsatisfied @property @@ -158,10 +158,19 @@ class Todo(BaseModel, ConditionsRelations): def adopt_from(self, todos: list[Todo]) -> None: """As far as possible, fill unsatisfied dependencies from todos.""" for process_id in self.unsatisfied_dependencies: - for todo in [t for t in todos if t.process.id_ == process_id]: + for todo in [t for t in todos if t.process.id_ == process_id + and t not in self.children]: self.add_child(todo) break + def make_missing_children(self, db_conn: DatabaseConnection) -> None: + """Fill unsatisfied dependencies with new Todos.""" + for process_id in self.unsatisfied_dependencies: + process = Process.by_id(db_conn, process_id) + todo = self.__class__(None, process, False, self.date) + todo.save(db_conn) + self.add_child(todo) + def get_step_tree(self, seen_todos: set[int], seen_conditions: set[int]) -> TodoStepsNode: """Return tree of depended-on Todos and Conditions."""