class Machine(Base): ''' The machine connects the nodes and manages the addition and removal of nodes to the network. ''' def __init__(self, name=None): self.log_color = 'red' self.name = name or random_string(8) self.events = Events() events.e = self.events self.nodes = Nodes() self.register = Register(machine=self, events=self.events) def set_listeners(self): ''' provide machine event listeners ''' self.events.listen('add_conditions') def activate_node(self, node): _n = node.integrate(self) self.nodes.append(_n) self.log('Integrating node', _n) ''' Loop an iterable to add Conditiond into the network for a node ''' # Write node into register. # n=node.get_name() # add weak reference in register. self.register.add_node(_n) _n.react(self) return _n def render_nodes(self, nodes): self.log('Add nodes to network') for node in nodes: n = node # Create the node is the element is not an instance if inspect.isclass(node): n = node() self.activate_node(n) def start(self, nodes=None): if nodes is not None: self.render_nodes(nodes) print '\n--- Run ---\n' self.started(nodes) def started(self, nodes): ''' Override for easy start reference. Passed are the initial nodes provides to the machine. ''' pass def __str__(self): return '%s "%s"' % (self.__class__.__name__, self.name, )