def build(self, g, container): '''Builds the nodes for the numble as members of the container node in graph g. Returns container.''' for brick in self.bricks: brick_id = g.make_node(Brick(brick)) g.add_member_edge(container, brick_id) TagWith(Avail, taggee=brick_id).go(g) target_id = g.make_node(Target(self.target)) g.add_member_edge(container, target_id) TagWith(Wanted, taggee=target_id).go(g) g.graph['target'] = target_id return container
def fail(self, g, node): TagWith(Failed, taggee=node).go(g) #TODO add_tag g.remove_tag(node, Avail) for source in g.neighbors(node, 'source'): g.remove_edge(node, 'source', source, 'consumer') g.add_edge(node, 'former_source', source, 'former_consumer') g.cascade_fail(source)
def make_response(self, bindings): edges = { 'by_completing': self.eqn_node, 'from': bindings.values(), 'make': self.bg.find_member_in_role(self.eqn_node, 'result') } return TagWith(CouldMake, (bindings,), edges)
def go(self, g): #TODO OAOO with CombineOperands; should have a consume() function operator_id = g.make_node(self.operator_datum) for operand in self.bindings_dict.values(): g.add_edge(operand, 'consumer', operator_id, 'source') g.remove_tag(operand, Avail) g.add_edge(operator_id, 'consumer', self.result_node, 'source') g.remove_tag(self.result_node, Wanted) TagWith(Avail, taggee=self.result_node).go(g)
def go(self, g): operator_id = g.make_node(self.operator) for operand in self.operands: g.add_edge(operand, 'consumer', operator_id, 'source') g.remove_tag(operand, Avail) result_value = self.operator.result_value(g, operator_id) result_id = g.make_node(Block(result_value)) print('Made %s.' % g.datumstr(result_id)) #TODO Move this g.add_edge(operator_id, 'consumer', result_id, 'source') TagWith(Avail, taggee=result_id).go(g)
def cascade_fail(self, g, node): 'Called by an upstream node that has failed.' TagWith(Avail, taggee=node).go(g) #TODO add_tag