Files
mayan-edms/mayan/apps/dynamic_search/api_views.py
Roberto Rosario 6c6ca38374 Replace all instances of unicode only handling to use force_text.
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>
2017-07-05 15:03:24 -04:00

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)