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)
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)
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='/*/')
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