def __init__(self, services, eventListeners, stateHandlers, enabledLibs, commonArgs): print "Init'ing Pyfsm" # init internals self.services = [] self.eventListeners = [] self.stateHandlers = {} self.enabledLibs = {} self.commonArgs = commonArgs # passed to EVERY state handler # add defaults self.jobProcessorService = Service.JobProcessorService(3) self.services.extend([self.jobProcessorService]) self.eventListeners.extend([EventListener.InitEventListener()]) # add user defined self.services.extend(services) self.eventListeners.extend(eventListeners) for stateHandler in stateHandlers: self.stateHandlers[stateHandler.name()] = stateHandler # prepare enabled libs for state handler injection for class_instance in enabledLibs: # add dict entries <class-name> -> <class-instance> self.enabledLibs[type(class_instance).__name__] = class_instance # TODO: figure out how to init this properly, given the new format # init current state if "INIT" in self.stateHandlers: self.currentStateHandler = self.stateHandlers["INIT"] else: raise PyfsmException.InitializationError( "No InitState defined in the stateHandlers dictionary.") # instantiate the event queue self.eventQueue = PriorityQueue() # thread-safe queue # startup all event listeners and services for eventListener in self.eventListeners: eventListener._set_event_queue(self.eventQueue) eventListener.start() for service in self.services: service._set_event_queue(self.eventQueue) service.start()