Example #1
0
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
Example #2
0
    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))
Example #3
0
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    
Example #4
0
 def __init__(self, connection, encoder):
     super(AMQStompConnector.AMQListener, self).__init__()
     self.connection = connection
     self.encoder = encoder
     self.dispatcher = EventDispatcher()
     self.messagelock = threading.Lock()
Example #5
0
 def __init__(self, cid, amqparams, encoder):
     Connector.__init__(self, cid, encoder)
     self.basepath = amqparams['basepath']
     self.dispatcher = EventDispatcher()
     self.readerthread = None
Example #6
0
 def __init__(self, cid, params, encoder):
     Connector.__init__(self, cid, encoder)
     self.params = params
     self.connected = True
     self.dispatcher = EventDispatcher()
     self.sent = 0
Example #7
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)

Example #8
0
 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)