Esempio n. 1
0
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
Esempio n. 2
0
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)
Esempio n. 3
0
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)