Beispiel #1
0
    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