Update dynamic_search app API to support document page searches.
This commit is contained in:
@@ -1,28 +1,49 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.http import Http404, HttpResponseRedirect
|
||||
|
||||
from rest_framework import generics
|
||||
from rest_framework.exceptions import ParseError
|
||||
|
||||
from rest_api.filters import MayanObjectPermissionsFilter
|
||||
|
||||
from .classes import SearchModel
|
||||
from .mixins import SearchModelMixin
|
||||
|
||||
|
||||
class APISearchView(generics.ListAPIView):
|
||||
class APISearchView(SearchModelMixin, generics.ListAPIView):
|
||||
"""
|
||||
Perform a search operaton
|
||||
q -- Term that will be used for the search.
|
||||
Perform a search operation
|
||||
---
|
||||
GET:
|
||||
omit_serializer: true
|
||||
parameters:
|
||||
- name: search_model
|
||||
paramType: path
|
||||
type: string
|
||||
required: true
|
||||
description: Possible values are "documents.Document" or "document.DocumentPageResult"
|
||||
- name: q
|
||||
paramType: query
|
||||
type: string
|
||||
description: Term that will be used for the search.
|
||||
"""
|
||||
|
||||
|
||||
filter_backends = (MayanObjectPermissionsFilter,)
|
||||
|
||||
def get_queryset(self):
|
||||
search_class = self.get_search_class()
|
||||
if search_class.permission:
|
||||
self.mayan_object_permissions = {'GET': (search_class.permission,)}
|
||||
search_model = self.get_search_model()
|
||||
|
||||
# Override serializer class just before producing the queryset of
|
||||
# search results
|
||||
self.serializer_class = search_model.serializer
|
||||
|
||||
if search_model.permission:
|
||||
self.mayan_object_permissions = {'GET': (search_model.permission,)}
|
||||
|
||||
try:
|
||||
queryset, ids, timedelta = search_class.search(
|
||||
queryset, ids, timedelta = search_model.search(
|
||||
query_string=self.request.GET, user=self.request.user
|
||||
)
|
||||
except Exception as exception:
|
||||
@@ -30,8 +51,50 @@ class APISearchView(generics.ListAPIView):
|
||||
|
||||
return queryset
|
||||
|
||||
def get_search_class(self):
|
||||
return SearchModel.get('documents.Document')
|
||||
|
||||
def get_serializer_class(self):
|
||||
return self.get_search_class().serializer
|
||||
class APIAdvancedSearchView(SearchModelMixin, generics.ListAPIView):
|
||||
"""
|
||||
Perform an advanced search operation
|
||||
---
|
||||
GET:
|
||||
omit_serializer: true
|
||||
parameters:
|
||||
- name: search_model
|
||||
paramType: path
|
||||
type: string
|
||||
required: true
|
||||
description: Possible values are "documents.Document" or "document.DocumentPageResult"
|
||||
- name: _match_all
|
||||
paramType: query
|
||||
type: string
|
||||
description: When checked, only results that match all fields will be returned. When unchecked results that match at least one field will be returned. Possible values are "on" or "off"
|
||||
"""
|
||||
|
||||
filter_backends = (MayanObjectPermissionsFilter,)
|
||||
|
||||
def get_queryset(self):
|
||||
self.search_model = self.get_search_model()
|
||||
|
||||
# Override serializer class just before producing the queryset of
|
||||
# search results
|
||||
self.serializer_class = self.search_model.serializer
|
||||
|
||||
if self.search_model.permission:
|
||||
self.mayan_object_permissions = {
|
||||
'GET': (self.search_model.permission,)
|
||||
}
|
||||
|
||||
if self.request.GET.get('_match_all', 'off') == 'on':
|
||||
global_and_search=True
|
||||
else:
|
||||
global_and_search=False
|
||||
|
||||
try:
|
||||
queryset, ids, timedelta = self.search_model.search(
|
||||
query_string=self.request.GET, user=self.request.user,
|
||||
global_and_search=global_and_search
|
||||
)
|
||||
except Exception as exception:
|
||||
raise ParseError(unicode(exception))
|
||||
|
||||
return queryset
|
||||
|
||||
Reference in New Issue
Block a user