class EventDispatcher(object): __SIGNALS__ = SignalStorage def __init__(self): self.__JUGGERNAUT__ = Juggernaut() @classmethod def subscribe(cls, signal_name, callback, caller): try: signal_model = cls.__SIGNALS__.get(signal_name=signal_name) except NotFoundException: signal_model = cls.__SIGNALS__(signal_name=signal_name) signal_model.callback_list = [] callback_model = Callback( caller_id=caller._id, caller_class=caller.__class__.__name__, callback=callback.__name__ ) callback_model.save() signal_model.callback_list.append(callback_model._id) signal_model.save() def main_loop(self): for signal_name, data in self.__JUGGERNAUT__.subscribe_listen(): for callback_model in self.__SIGNALS__.callbacks(signal_name): caller_class = globals().get(callback_model.caller_class) caller_object = caller_class.get(_id=callback_model.caller_id) getattr(caller_object, callback_model.callback)(**data)
import pdb from juggernaut import Juggernaut import redis r = redis.Redis('192.168.2.3') jug = Juggernaut(r) pdb.set_trace() for event, data in jug.subscribe_listen(): print event if event == 'subscribe': print 'subscribe' elif event == 'unsubscribe': print 'unsubscribe' elif event == 'custom': print 'custom_event'