class TestFileConnector(Connector): """ Implements reading and writing of messages to files """ def __init__(self, cid, amqparams, encoder): Connector.__init__(self, cid, encoder) self.basepath = amqparams['basepath'] self.dispatcher = EventDispatcher() self.readerthread = None def add_listener(self, listener): self.dispatcher.attach_listener(listener) def send(self, destination, message, headers = None, ack = 'client'): try: headers = headers or {} headers['id'] = self.cid headers['message-id'] = '%s_%d'% (self.cid, random.randrange(20000)) destination = destination[1:] if destination[0] == '/' \ else destination outfp = open(os.path.join(self.basepath, destination), 'a') message, headers = self.encoder.encode(message, headers) outfp.write('%s\n' % json.dumps({'headers': headers, 'message':message})) outfp.close() except IOError, ex: trace = sys.exc_info()[2] raise ConnectionError('Connection failed!'), None, trace except Exception, ex: trace = sys.exc_info()[2] raise ConnectionError('Connection failed!'), None, trace
class AMQListener(stomp.ConnectionListener): """ Stomp bridging layer: fires received messages as events """ DEBUG_MESSAGE = False def __init__(self, connection, encoder): super(AMQStompConnector.AMQListener, self).__init__() self.connection = connection self.encoder = encoder self.dispatcher = EventDispatcher() self.messagelock = threading.Lock() def attach_listener(self, listener): self.dispatcher.attach_listener(listener) def on_error(self, headers, message): logger.warning('received an error %s H: %s' % (message, str(headers))) self.dispatcher.fire(AmqErrorEvent(headers=headers, message=message)) def on_receipt(self, headers, message): logger.debug("RECEIPT %s %s" % (headers, message)) def on_message(self, headers, message): message, headers = self.encoder.decode(message, headers) logger.debug("Received: %s" % str((headers, message))) with self.messagelock: event = MessageEvent if COMMAND_HEADER in headers: logger.debug('Got %s COMMAND' % message) event = globals().get(headers[COMMAND_HEADER], None) assert event if self.DEBUG_MESSAGE and logger.isEnabledFor(logging.DEBUG): logger.debug("Received message:") for key, val in headers.iteritems(): logger.debug('header: key %s , value %s' %(key, val)) logger.debug('body: %s'% message) logger.debug("Firing event: %s" % str(event)) if 'buffersize' in headers: for msg in pickle.loads(message): self.dispatcher.fire(event(headers=headers, message=msg)) else: self.dispatcher.fire(event(headers=headers, message=message)) self.dispatcher.fire(MessageProcessedEvent(headers=headers, message=message))
class MockConnector(Connector): """ Mock Connector """ def __init__(self, cid, params, encoder): Connector.__init__(self, cid, encoder) self.params = params self.connected = True self.dispatcher = EventDispatcher() self.sent = 0 def add_listener(self, listener): self.dispatcher.attach_listener(listener) def send(self, destination, message, headers = None, ack = 'client'): self.sent += 1 msg = {'headers': headers, 'message': message} self.dispatcher.fire(MessageEvent(**msg)) self.dispatcher.fire(MessageProcessedEvent(**msg)) def unsubscribe(self, destination): pass def subscribe(self, destination, params = None, ack = 'client'): pass
def __init__(self, connection, encoder): super(AMQStompConnector.AMQListener, self).__init__() self.connection = connection self.encoder = encoder self.dispatcher = EventDispatcher() self.messagelock = threading.Lock()
def __init__(self, cid, amqparams, encoder): Connector.__init__(self, cid, encoder) self.basepath = amqparams['basepath'] self.dispatcher = EventDispatcher() self.readerthread = None
def __init__(self, cid, params, encoder): Connector.__init__(self, cid, encoder) self.params = params self.connected = True self.dispatcher = EventDispatcher() self.sent = 0
app = Flask(__name__) app.config.from_object('config') from workers import make_celery celery = make_celery(app) background = celery # FIXME: for some reason FileSystemLoader # doesn't like relative paths, so this is a # workaround path = os.getcwd() + "/morse/plugins" app.jinja_loader = ChoiceLoader([ app.jinja_loader, FileSystemLoader(path)]) from morse.models import db db.init_app(app) import morse.views import morse.routing import morse.slots from morse.views import login_manager login_manager.init_app(app) from plugins import * from events import EventDispatcher from tasks.ratings import rate_new_post, rate_edited_post event_dispatcher = EventDispatcher() event_dispatcher.connect_background_listener("post_id_created", rate_new_post) event_dispatcher.connect_background_listener("post_id_edited", rate_edited_post)
def __init__(self, name = ''): EventDispatcher.__init__(self) self._processors = [] self.logger = logging.getLogger('pampas.%s' % self.__class__.__name__) self.name = name self.last_processed = (None, None)