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)
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