def _add_node(self, node, depth=0): if depth > self._depth_threshold: raise DagException("Node dependency too deep") if node.id in self._nodes: return self._nodes[id] else: self._nodes[id] = node if self._is_node_terminal(node): node.satisfied = True return node # find node ancestors and generators for generator_class in self._generators: required_events = generator_class.required_events(node.params) if required_events is None: continue for events_join in required_events: edge = Edge(generator_class) for event in events_join: parent_node = self._add_node(Node(event), depth + 1) edge.nodes[parent_node.id] = parent_node if edge.id in self._edges: edge = self._edges[edge.id] else: self._edges[edge.id] = edge node.edges[edge.id] = edge return node