def test_search_get_range_rows(self):
        page = Pages(qid='wxyz', content='hi')
        page2 = Pages(qid='wxyz2', content='hi 2')
        self.app.db.session.add(page)
        self.app.db.session.add(page2)
        self.app.db.session.commit()

        begin = get_date(dt.datetime.utcnow()) - dt.timedelta(hours=1)
        end = get_date(dt.datetime.utcnow()) + dt.timedelta(hours=1)

        # url_for translates to:
        # '/search?begin=2018-12-26T18%3A27%3A02.367394%2B00%3A00&rows=1&end=2018-12-26T20%3A27%3A02.367412%2B00%3A00'
        r = self.client.get(
            url_for('turbobee_app.search',
                    begin=begin.isoformat(),
                    end=end.isoformat(),
                    rows=1))

        first_page = r.json[0]
        created = get_date(first_page['created'])

        first_page = r.json[0]
        created = dateutil.parser.parse(first_page['created'])

        self.assertLess(begin, created)
        self.assertGreater(end, created)
        self.assertEqual(r.status_code, 200)
    def test_search_get_range(self):
        page = Pages(qid='wxyz', content='hi')
        page2 = Pages(qid='wxyz2', content='hi 2')
        self.app.db.session.add(page)
        self.app.db.session.add(page2)
        self.app.db.session.commit()

        begin = dt.datetime.utcnow() - dt.timedelta(days=30)
        end = dt.datetime.utcnow() + dt.timedelta(days=30)

        r = self.client.get(
            url_for('turbobee_app.search', begin=begin, end=end))

        self.assertEqual(r.status_code, 200)
    def test_search_get_range_at(self):
        at = dt.datetime.utcnow()

        page = Pages(qid='wxyz', content='hi', created=at)
        self.app.db.session.add(page)
        self.app.db.session.commit()

        r = self.client.get(url_for('turbobee_app.search', at=at))

        self.assertEqual(r.status_code, 200)
 def test_proto_delete(self):
     with self.app.session_scope() as session:
         session.add(Pages(qid='wxyz'))
         session.commit()
     r = self.client.delete(url_for('turbobee_app.store', qid='wxyz'))
     self.assertEqual(r.status_code, 200)
Ejemplo n.º 5
0
    def set_pages(self, msgs, fail_fast=False, one_by_one=False):
        """Utility method to insert into the db bunch of 
        messages
        
        @param msgs: list of TurboBeeMsg instances
        @return: dict with qids of 'created', 'updated',
            'errors'
        """

        with self.session_scope() as session:
            out = {}
            for msg in msgs:
                op = 'updated'
                page = None
                # object may already be there, we are updating it...
                if msg.qid:
                    page = session.query(Pages).filter_by(qid=msg.qid).first()

                if msg.status == Status.deleted and page is None:
                    if 'ignored' not in out:
                        out['ignored-deleted'] = []
                    out['ignored-deleted'].append(msg.qid)
                    continue

                if page is None:
                    op = 'created'
                    page = Pages(qid=uuid4().hex)
                    session.add(page)

                if msg.status == Status.deleted:
                    op = 'deleted'
                    session.delete(page)
                else:
                    now = get_date()
                    page.target = msg.target or page.target  # transfer the old defaults
                    page.content = msg.get_value()

                    # timestamps in msgs are datetime naive, make sure we apply timezone
                    page.created = msg.created.seconds and get_date(
                        msg.get_datetime(msg.created)) or now
                    page.content_type = self.guess_ctype(msg)
                    page.updated = msg.updated.seconds and get_date(
                        msg.get_datetime(msg.updated)) or now
                    # should we provide defaults if not set?
                    page.expires = msg.expires.seconds and get_date(
                        msg.get_datetime(msg.expires)) or None
                    page.lifetime = msg.eol.seconds and get_date(
                        msg.get_datetime(msg.eol)) or None
                    page.owner = msg.owner

                # keep the qid for later use (when session is expunged)
                qid = page.qid

                # insert one by one
                if one_by_one:
                    try:
                        session.commit()
                    except Exception as e:
                        self.logger.error(
                            'Error inserting %s into db. Message=%s', msg,
                            e.message)
                        session.rollback()
                        if fail_fast:
                            raise e
                        else:
                            if 'errors' not in out:
                                out['errors'] = []
                            out['errors'].append({
                                'qid': qid,
                                'msg': e.message
                            })

                if op not in out:
                    out[op] = []
                out[op].append(qid)

            if not one_by_one:
                try:
                    session.commit()
                except IntegrityError as e:
                    self.logger.error(
                        'Error inserting data into db. Message=%s', e.message)
                    session.rollback()
                    if fail_fast:
                        raise e
                    else:
                        if 'errors' not in out:
                            out['errors'] = []
                        out['errors'].append({'qid': None, 'msg': e.message})
        return out