def _search(user, perms='both', include_history=False, include_trashed=False, include_managed=False, search_text=None, limit=25): response = {'documents': []} documents = Document2.objects.documents(user=user, perms=perms, include_history=include_history, include_trashed=include_trashed, include_managed=include_managed) type_filters = None sort = '-last_modified' search_text = search_text flatten = True page = 1 # Refine results response.update( __filter_documents(type_filters, sort, search_text, queryset=documents, flatten=flatten)) # Paginate response.update(__paginate(page, limit, queryset=response['documents'])) return response
def get_history(request): response = {'status': -1} doc_type = request.GET.get('doc_type') doc_text = request.GET.get('doc_text') page = min(int(request.GET.get('page', 1)), 100) limit = min(int(request.GET.get('limit', 50)), 100) is_notification_manager = request.GET.get('is_notification_manager', 'false') == 'true' if is_notification_manager: docs = Document2.objects.get_tasks_history(user=request.user) else: docs = Document2.objects.get_history(doc_type='query-%s' % doc_type, user=request.user) if doc_text: docs = docs.filter( Q(name__icontains=doc_text) | Q(description__icontains=doc_text) | Q(search__icontains=doc_text)) # Paginate docs = docs.order_by('-last_modified') response['count'] = docs.count() docs = __paginate(page, limit, queryset=docs)['documents'] history = [] for doc in docs: notebook = Notebook(document=doc).get_data() if 'snippets' in notebook: statement = notebook[ 'description'] if is_notification_manager else _get_statement( notebook) history.append({ 'name': doc.name, 'id': doc.id, 'uuid': doc.uuid, 'type': doc.type, 'data': { 'statement': statement[:1001] if statement else '', 'lastExecuted': notebook['snippets'][0].get('lastExecuted', -1), 'status': notebook['snippets'][0]['status'], 'parentSavedQueryUuid': notebook.get('parentSavedQueryUuid', '') } if notebook['snippets'] else {}, 'absoluteUrl': doc.get_absolute_url(), }) else: LOG.error('Incomplete History Notebook: %s' % notebook) response['history'] = sorted(history, key=lambda row: row['data']['lastExecuted'], reverse=True) response['message'] = _('History fetched') response['status'] = 0 return JsonResponse(response)
def _paginate(request, queryset): """ Given optional querystring params extracted from the request, slice the given queryset of documents for the given page and limit, and return the updated queryset along with pagination params used. :param request: request object with params :param queryset: queryset """ page = int(request.GET.get('page', 1)) limit = int(request.GET.get('limit', 0)) return __paginate(page, limit, queryset)