Exemplo n.º 1
0
def start():
    g.db_session = InboxSession()

    g.log = current_app.logger
    try:
        g.namespace = g.db_session.query(Namespace) \
            .filter(Namespace.public_id == g.namespace_public_id).one()
    except NoResultFound:
        return err(
            404, "Couldn't find namespace with id `{0}` ".format(
                g.namespace_public_id))

    try:
        g.lens = Lens(
            namespace_id=g.namespace.id,
            subject=request.args.get('subject'),
            thread_public_id=request.args.get('thread'),
            to_addr=request.args.get('to'),
            from_addr=request.args.get('from'),
            cc_addr=request.args.get('cc'),
            bcc_addr=request.args.get('bcc'),
            any_email=request.args.get('any_email'),
            started_before=request.args.get('started_before'),
            started_after=request.args.get('started_after'),
            last_message_before=request.args.get('last_message_before'),
            last_message_after=request.args.get('last_message_after'),
            filename=request.args.get('filename'),
            tag=request.args.get('tag'),
            detached=True)
        g.lens_limit = request.args.get('limit')
        g.lens_offset = request.args.get('offset')
    except ValueError as e:
        return err(400, e.message)
Exemplo n.º 2
0
    def register_hook(self, namespace_id, parameters):
        """Register a new webhook.

        Parameters
        ----------
        namespace_id: int
            ID for the namespace to apply the webhook on.
        parameters: dictionary
            Dictionary of the hook parameters.
        """
        with session_scope() as db_session:
            lens = Lens(
                namespace_id=namespace_id,
                subject=parameters.get('subject'),
                thread_public_id=parameters.get('thread'),
                to_addr=parameters.get('to'),
                from_addr=parameters.get('from'),
                cc_addr=parameters.get('cc'),
                bcc_addr=parameters.get('bcc'),
                any_email=parameters.get('any_email'),
                started_before=parameters.get('started_before'),
                started_after=parameters.get('started_after'),
                last_message_before=parameters.get('last_message_before'),
                last_message_after=parameters.get('last_message_after'),
                filename=parameters.get('filename'))

            hook = Webhook(
                namespace_id=namespace_id,
                lens=lens,
                callback_url=parameters.get('callback_url'),
                failure_notify_url=parameters.get('failure_notify_url'),
                include_body=parameters.get('include_body', False),
                active=parameters.get('active', True),
                min_processed_id=self.minimum_id)

            db_session.add(hook)
            db_session.add(lens)
            db_session.commit()
            if hook.active:
                worker = WebhookWorker(hook)
                self.workers[namespace_id].add(worker)
                if not worker.started:
                    worker.start()
            return cereal(hook, pretty=True)
Exemplo n.º 3
0
def test_lens_tx(message_data):
    filter = Lens(subject='/Calaveras/')
    assert filter.match(message_data)

    filter = Lens(subject='Calaveras')
    assert not filter.match(message_data)

    filter = Lens(from_addr='*****@*****.**')
    assert filter.match(message_data)

    filter = Lens(from_addr='/freemaneben/')
    assert filter.match(message_data)

    filter = Lens(cc_addr='/Daniel/')
    assert filter.match(message_data)

    early_ts = calendar.timegm(
        datetime.datetime(2014, 04, 22, 20, 10, 00).utctimetuple())
    late_ts = calendar.timegm(
        datetime.datetime(2014, 04, 30, 00, 00, 00).utctimetuple())

    filter = Lens(started_before=late_ts)
    assert filter.match(message_data)

    filter = Lens(started_before=early_ts)
    assert not filter.match(message_data)

    filter = Lens(started_after=late_ts)
    assert not filter.match(message_data)

    filter = Lens(started_after=early_ts)
    assert filter.match(message_data)

    filter = Lens(last_message_after=early_ts)
    assert filter.match(message_data)

    filter = Lens(last_message_after=late_ts)
    assert not filter.match(message_data)

    filter = Lens(subject='/Calaveras/', any_email='Nobody')
    assert not filter.match(message_data)

    filter = Lens(subject='/Calaveras/', any_email='/freemaneben/')
    assert filter.match(message_data)

    thread_public_id = '2fk859tx6jarr8uxgg84fbw0z'

    filter = Lens(thread_public_id=thread_public_id)
    assert filter.match(message_data)

    with pytest.raises(ValueError):
        filter = Lens(subject='/*/')
Exemplo n.º 4
0
def test_lens_db_filter(db):
    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject)
    assert filter.message_query(db.session).count() == 1
    assert filter.thread_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID,
                  any_email=delivered_to)
    assert filter.message_query(db.session).count() > 1
    assert filter.thread_query(db.session).count() > 1

    filter = Lens(namespace_id=NAMESPACE_ID,
                  any_email=sender)
    assert filter.message_query(db.session).count() == 1
    assert filter.thread_query(db.session).count() == 1

    early_time = received_date - datetime.timedelta(hours=1)
    late_time = received_date + datetime.timedelta(hours=1)
    early_ts = calendar.timegm(early_time.utctimetuple())
    late_ts = calendar.timegm(late_time.utctimetuple())

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  started_before=early_ts)
    assert filter.thread_query(db.session).count() == 0
    assert filter.message_query(db.session).count() == 0

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  started_before=late_ts)

    assert filter.thread_query(db.session).count() == 1
    assert filter.message_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  last_message_after=early_ts)
    assert filter.thread_query(db.session).count() == 1
    assert filter.message_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  last_message_after=late_ts)
    assert filter.thread_query(db.session).count() == 0
    assert filter.message_query(db.session).count() == 0

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  last_message_before=early_ts)
    assert filter.thread_query(db.session).count() == 0
    assert filter.message_query(db.session).count() == 0

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  last_message_before=late_ts)
    assert filter.thread_query(db.session).count() == 1
    assert filter.message_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID,
                  to_addr=to_addr,
                  from_addr=from_addr)

    assert filter.thread_query(db.session).count() == 1
    assert filter.message_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID,
                  to_addr='*****@*****.**')
    assert filter.thread_query(db.session, limit=3).count() == 3
    assert filter.message_query(db.session, limit=3).count() == 3
Exemplo n.º 5
0
def test_lens_tx(message_data):
    filter = Lens(subject='/Calaveras/')
    assert filter.match(message_data)

    filter = Lens(subject='Calaveras')
    assert not filter.match(message_data)

    filter = Lens(from_addr='*****@*****.**')
    assert filter.match(message_data)

    filter = Lens(from_addr='/freemaneben/')
    assert filter.match(message_data)

    filter = Lens(cc_addr='/Daniel/')
    assert filter.match(message_data)

    early_ts = calendar.timegm(
        datetime.datetime(2014, 04, 22, 20, 10, 00).utctimetuple())
    late_ts = calendar.timegm(
        datetime.datetime(2014, 04, 30, 00, 00, 00).utctimetuple())

    filter = Lens(started_before=late_ts)
    assert filter.match(message_data)

    filter = Lens(started_before=early_ts)
    assert not filter.match(message_data)

    filter = Lens(started_after=late_ts)
    assert not filter.match(message_data)

    filter = Lens(started_after=early_ts)
    assert filter.match(message_data)

    filter = Lens(last_message_after=early_ts)
    assert filter.match(message_data)

    filter = Lens(last_message_after=late_ts)
    assert not filter.match(message_data)

    filter = Lens(subject='/Calaveras/', any_email='Nobody')
    assert not filter.match(message_data)

    filter = Lens(subject='/Calaveras/', any_email='/freemaneben/')
    assert filter.match(message_data)

    thread_public_id = '2fk859tx6jarr8uxgg84fbw0z'

    filter = Lens(thread_public_id=thread_public_id)
    assert filter.match(message_data)

    with pytest.raises(ValueError):
        filter = Lens(subject='/*/')
Exemplo n.º 6
0
def test_lens_db_filter(db):
    filter = Lens(namespace_id=NAMESPACE_ID, subject=subject)
    assert filter.message_query(db.session).count() == 1
    assert filter.thread_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID, any_email=delivered_to)
    assert filter.message_query(db.session).count() > 1
    assert filter.thread_query(db.session).count() > 1

    filter = Lens(namespace_id=NAMESPACE_ID, any_email=sender)
    assert filter.message_query(db.session).count() == 1
    assert filter.thread_query(db.session).count() == 1

    early_time = received_date - datetime.timedelta(hours=1)
    late_time = received_date + datetime.timedelta(hours=1)
    early_ts = calendar.timegm(early_time.utctimetuple())
    late_ts = calendar.timegm(late_time.utctimetuple())

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  started_before=early_ts)
    assert filter.thread_query(db.session).count() == 0
    assert filter.message_query(db.session).count() == 0

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  started_before=late_ts)

    assert filter.thread_query(db.session).count() == 1
    assert filter.message_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  last_message_after=early_ts)
    assert filter.thread_query(db.session).count() == 1
    assert filter.message_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  last_message_after=late_ts)
    assert filter.thread_query(db.session).count() == 0
    assert filter.message_query(db.session).count() == 0

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  last_message_before=early_ts)
    assert filter.thread_query(db.session).count() == 0
    assert filter.message_query(db.session).count() == 0

    filter = Lens(namespace_id=NAMESPACE_ID,
                  subject=subject,
                  last_message_before=late_ts)
    assert filter.thread_query(db.session).count() == 1
    assert filter.message_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID,
                  to_addr=to_addr,
                  from_addr=from_addr)

    assert filter.thread_query(db.session).count() == 1
    assert filter.message_query(db.session).count() == 1

    filter = Lens(namespace_id=NAMESPACE_ID, to_addr='*****@*****.**')
    assert filter.thread_query(db.session, limit=3).count() == 3
    assert filter.message_query(db.session, limit=3).count() == 3