Minor fixes on search api viewset.

remotes/origin/enhancement/email-actions
Andrey Antukh 2013-07-22 23:47:53 +02:00
parent a022085497
commit e86f393bfd
2 changed files with 36 additions and 6 deletions

View File

@ -11,17 +11,17 @@ from rest_framework.decorators import action
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework import status, generics, viewsets from rest_framework import status, generics, viewsets
from rest_framework import exceptions as excp
import django_filters import django_filters
from haystack import query, inputs from haystack import query, inputs
from djmail.template_mail import MagicMailBuilder from djmail.template_mail import MagicMailBuilder
from greenmine.base.serializers import (LoginSerializer, UserLogged, from greenmine.base.serializers import (LoginSerializer, UserLogged,
UserSerializer, RoleSerializer) UserSerializer, RoleSerializer,
SearchSerializer)
from greenmine.base.serializers import SearchSerializer
from greenmine.base.models import User, Role from greenmine.base.models import User, Role
from greenmine.base import exceptions as excp
from greenmine.scrum import models from greenmine.scrum import models
@ -35,7 +35,11 @@ class RolesViewSet(viewsets.ViewSet):
return Response(serializer.data) return Response(serializer.data)
def retrieve(self, request, pk=None): def retrieve(self, request, pk=None):
role = Role.objects.get(pk=pk) try:
role = Role.objects.get(pk=pk)
except Role.DoesNotExist:
raise excp.NotFound()
serializer = self.serializer_class(role) serializer = self.serializer_class(role)
return Response(serializer.data) return Response(serializer.data)
@ -111,14 +115,14 @@ class UsersViewSet(viewsets.ViewSet):
return Response({"detail": "Mail sended successful!"}) return Response({"detail": "Mail sended successful!"})
@action(methods=["GET", "POST"]) @action(methods=["GET", "POST"])
def logout(self, request, pk=None) def logout(self, request, pk=None):
logout(request) logout(request)
return Response() return Response()
class Search(viewsets.ViewSet): class Search(viewsets.ViewSet):
def list(self, request, **kwargs): def list(self, request, **kwargs):
text = request.QUERY_PARAMS.get('text', None) text = request.QUERY_PARAMS.get('text', "")
project_id = request.QUERY_PARAMS.get('project', None) project_id = request.QUERY_PARAMS.get('project', None)
try: try:
@ -126,6 +130,9 @@ class Search(viewsets.ViewSet):
except models.Project.DoesNotExist: except models.Project.DoesNotExist:
raise excp.PermissionDenied({"detail": "Wrong project id"}) raise excp.PermissionDenied({"detail": "Wrong project id"})
#if not text:
# raise excp.BadRequest("text parameter must be contains text")
queryset = query.SearchQuerySet() queryset = query.SearchQuerySet()
queryset = queryset.filter(text=inputs.AutoQuery(text)) queryset = queryset.filter(text=inputs.AutoQuery(text))
queryset = queryset.filter(project_id=project_id) queryset = queryset.filter(project_id=project_id)

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
from rest_framework import exceptions
from rest_framework import status
class PermissionDenied(exceptions.PermissionDenied):
pass
class NotFound(exceptions.APIException):
status_code = status.HTTP_404_NOT_FOUND
default_detail = "Not found"
def __init__(self, detail=None):
self.detail = detail or self.default_detail
class BadRequest(exceptions.ParseError):
default_detail = "Bad request"
__all__ = ["PermissionDenied", "NotFound", "BadRequest"]