42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from django.db.models.loading import get_model
|
|
|
|
from rest_framework.response import Response
|
|
from rest_framework import viewsets
|
|
|
|
from haystack import query, inputs
|
|
|
|
from greenmine.base import exceptions as excp
|
|
|
|
from .serializers import SearchSerializer
|
|
|
|
|
|
class SearchViewSet(viewsets.ViewSet):
|
|
def list(self, request, **kwargs):
|
|
project_model = get_model("projects", "Project")
|
|
text = request.QUERY_PARAMS.get('text', "")
|
|
project_id = request.QUERY_PARAMS.get('project', None)
|
|
|
|
try:
|
|
project = self._get_project(project_id)
|
|
except (project_model.DoesNotExist, TypeError):
|
|
raise excp.PermissionDenied({"detail": "Wrong project id"})
|
|
|
|
#if not text:
|
|
# raise excp.BadRequest("text parameter must be contains text")
|
|
|
|
queryset = query.SearchQuerySet()
|
|
queryset = queryset.filter(text=inputs.AutoQuery(text))
|
|
queryset = queryset.filter(project_id=project_id)
|
|
|
|
return_data = SearchSerializer(queryset)
|
|
return Response(return_data.data)
|
|
|
|
def _get_project(self, project_id):
|
|
project_model = get_model("projects", "Project")
|
|
own_projects = (project_model.objects
|
|
.filter(members=self.request.user))
|
|
|
|
return own_projects.get(pk=project_id)
|