Ejemplo n.º 1
0
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, )