def index(service_key): service = obj_or_404(Service.by_key(service_key)) require.service.view(service) q = Event.all().filter_by(service=service) result = {'count': q.count()} q = q.limit(get_limit()) q = q.offset(get_offset()) result['results'] = q return jsonify(result, refs=True)
def query_pager(q, route, paginate=True, count=None, transform=lambda x: x, data=None, **kw): data = data or {} count = count or q.count() limit = get_limit() offset = get_offset() if paginate: results = q.offset(offset).limit(limit).all() else: results = q url = url_for(route, _external=True, **kw) data.update({ 'count': count, 'limit': limit, 'offset': offset, 'previous': prev_url(url, count, offset, limit), 'next': next_url(url, count, offset, limit), 'results': map(transform, results) }) return jsonify(data, refs=True)
def user_index(id): require.user_id(id) esq = { "query": { "filtered": { "query": {"match_all": {}}, "filter": {} } }, "sort": [{"action_at": {"order": "desc"}}], "size": get_limit(), "from": get_offset(), "facets": {"entities": { "terms": {"field": "entities"}} } } filters = request.args.getlist('entity') if len(filters): esq['query']['filtered']['filter']['and'] = [] for entity_id in filters: fq = {"term": {"entities": entity_id}} esq['query']['filtered']['filter']['and'].append(fq) else: esq['query']['filtered']['filter']['or'] = [] for entity in Entity.all().filter(Entity.user_id == id): fq = {"term": {"entities": entity.id}} esq['query']['filtered']['filter']['or'].append(fq) res = elastic.search_raw(esq, elastic_index, 'frame') frame_urns = [r['_id'] for r in res['hits']['hits']] q = Frame.all().filter(Frame.urn.in_(frame_urns)) frames = dict([(f.urn, f) for f in q]) frames = [frames.get(urn) for urn in frame_urns] return query_pager(frames, 'frames.user_index', count=res['hits']['total'], paginate=False, id=id)