Replace all __unicode__ methods to __str__ and the @python_2_unicode_compatible decorator. Replace all instance of smart_str, smart_unicode, force_uncode with force_text. Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
103 lines
3.0 KiB
Python
103 lines
3.0 KiB
Python
from __future__ import unicode_literals
|
|
|
|
from django.utils.encoding import force_text
|
|
|
|
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
|
|
from .serializers import SearchModelSerializer
|
|
|
|
|
|
class APISearchView(SearchModelMixin, generics.ListAPIView):
|
|
"""
|
|
Perform a search operation
|
|
---
|
|
GET:
|
|
omit_serializer: true
|
|
parameters:
|
|
- name: q
|
|
paramType: query
|
|
type: string
|
|
description: Term that will be used for the search.
|
|
"""
|
|
|
|
filter_backends = (MayanObjectPermissionsFilter,)
|
|
|
|
def get_queryset(self):
|
|
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_model.search(
|
|
query_string=self.request.GET, user=self.request.user
|
|
)
|
|
except Exception as exception:
|
|
raise ParseError(force_text(exception))
|
|
|
|
return queryset
|
|
|
|
|
|
class APIAdvancedSearchView(SearchModelMixin, generics.ListAPIView):
|
|
"""
|
|
Perform an advanced search operation
|
|
---
|
|
GET:
|
|
omit_serializer: true
|
|
parameters:
|
|
- 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(force_text(exception))
|
|
|
|
return queryset
|
|
|
|
|
|
class APISearchModelList(generics.ListAPIView):
|
|
serializer_class = SearchModelSerializer
|
|
queryset = SearchModel.all()
|
|
|
|
def get(self, *args, **kwargs):
|
|
"""
|
|
Returns a list of all the available search models.
|
|
"""
|
|
|
|
return super(APISearchModelList, self).get(*args, **kwargs)
|