X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=plomtask%2Fprocesses.py;h=089a7105fddcd9228dbaebcfd3c6313e3ff57f6b;hb=c39bd250d747d2dd0bebee8c2f99f2c0fac6926c;hp=684dec81dde47e6bd409ffaa52edc3a251246e8d;hpb=85c260d1416340274b954175a69563868f481bc5;p=plomtask diff --git a/plomtask/processes.py b/plomtask/processes.py index 684dec8..089a710 100644 --- a/plomtask/processes.py +++ b/plomtask/processes.py @@ -26,10 +26,10 @@ class Process(BaseModel[int], ConditionsRelations): table_name = 'processes' to_save = ['calendarize'] to_save_versioned = ['title', 'description', 'effort'] - to_save_relations = [('process_conditions', 'process', 'conditions'), - ('process_blockers', 'process', 'blockers'), - ('process_enables', 'process', 'enables'), - ('process_disables', 'process', 'disables')] + to_save_relations = [('process_conditions', 'process', 'conditions', 0), + ('process_blockers', 'process', 'blockers', 0), + ('process_enables', 'process', 'enables', 0), + ('process_disables', 'process', 'disables', 0)] to_search = ['title.newest', 'description.newest'] def __init__(self, id_: int | None, calendarize: bool = False) -> None: @@ -93,6 +93,13 @@ class Process(BaseModel[int], ConditionsRelations): for child in explicit_children: assert isinstance(child.id_, int) node.steps[child.id_] = make_node(child) + # ensure that one (!) explicit step of process replaces + # one (!) implicit step of same process + for i in [i for i, s in node.steps.items() + if not s.is_explicit + and s.process.id_ == child.step_process_id]: + del node.steps[i] + break node.seen = node_id in seen_step_ids seen_step_ids.add(node_id) for id_, step in node.steps.items(): @@ -124,7 +131,6 @@ class Process(BaseModel[int], ConditionsRelations): just deleted under its feet), or if the parent step would not be owned by the current Process. """ - def walk_steps(node: ProcessStep) -> None: if node.step_process_id == self.id_: raise BadFormatException('bad step selection causes recursion')