Files
mayan-edms/mayan/apps/dynamic_search/api_views.py

72 lines
2.3 KiB
Python

from __future__ import absolute_import
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404
from rest_framework import generics, status
from rest_framework.exceptions import ParseError
from rest_framework.response import Response
from acls.models import AccessEntry
from permissions.models import Permission
from rest_api.filters import MayanObjectPermissionsFilter
from rest_api.permissions import MayanPermission
from .classes import SearchModel
from .models import RecentSearch
from .serializers import RecentSearchSerializer, SearchSerializer
class APIRecentSearchListView(generics.ListAPIView):
"""
Returns a list of all the recent searches.
"""
serializer_class = RecentSearchSerializer
queryset = RecentSearch.objects.all()
# TODO: Add filter_backend so that users can only see their own entries
class APIRecentSearchView(generics.RetrieveDestroyAPIView):
"""
Returns the selected recent search details.
"""
serializer_class = RecentSearchSerializer
queryset = RecentSearch.objects.all()
# TODO: Add filter_backend so that users can only see their own entries
class APISearchView(generics.ListAPIView):
"""
Perform a search operaton
q -- Term that will be used for the search.
"""
filter_backends = (MayanObjectPermissionsFilter,)
# Placeholder serializer to avoid errors with Django REST swagger
serializer_class = SearchSerializer
def get_queryset(self):
document_search = SearchModel.get('documents.Document')
self.serializer_class = document_search.serializer
self.mayan_object_permissions = {'GET': [document_search.permission]}
try:
if 'q' in self.request.GET:
# Simple query
query_string = self.request.GET.get('q', u'').strip()
queryset, ids, timedelta = document_search.simple_search(query_string)
else:
# Advanced search
queryset, ids, timedelta = document_search.advanced_search(self.request.GET)
except Exception as exception:
raise ParseError(unicode(exception))
RecentSearch.objects.add_query_for_user(self.request.user, self.request.GET, len(ids))
return queryset