Adds Regexpfilter (untested)

This commit is contained in:
nikolark committed 2015-01-17 16:27:48 +01:00
1 parent c3d6305adf
commit f98a193576
2 files changed
+27 -7

No files matched your search

+12
View File
@@ -0,0 +1,12 @@
import django_filters
from dpdapi.models import Alias
class AliasRegexFilter(django_filters.FilterSet):
# Ref: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#iregex
source_regexp = django_filters.CharFilter(name="source", lookup_type='iregex')
class Meta:
model = Alias
fields = ['source_regexp']
+15 -7
View File
@@ -1,11 +1,16 @@
from __future__ import unicode_literals
import logging
from rest_framework.decorators import list_route
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import status, filters, viewsets
from .models import Alias, Domain, User
from .serializers import AliasSerializer, AliasIdSerializer, DomainSerializer, UserSerializer
from dpdapi.filters import AliasRegexFilter
from dpdapi.models import Alias, Domain, User
from dpdapi.serializers import AliasSerializer, AliasIdSerializer, DomainSerializer, UserSerializer
logger = logging.getLogger(__name__)
class AliasViewSet(viewsets.ModelViewSet):
@@ -13,8 +18,8 @@ class AliasViewSet(viewsets.ModelViewSet):
queryset = Alias.objects.all()
serializer_class = AliasSerializer
permission_classes = [IsAuthenticated]
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('domain', 'domain__name')
filter_backends = (filters.DjangoFilterBackend, AliasRegexFilter)
filter_fields = ('domain', 'domain__name', 'regex')
@list_route(methods=['post'])
def create_bulk(self, request):
@@ -26,18 +31,21 @@ class AliasViewSet(viewsets.ModelViewSet):
@list_route(methods=['delete'])
def delete_bulk(self, request):
# TODO how to lookup instances and delete them by id?
# FIXME, accept [{source: kak@stry.no, destination: lol@lol.com}] instead of IDs
serializer = AliasIdSerializer(data=request.data, many=True)
if not serializer.is_valid():
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
ids = map(lambda x: x['id'], serializer.initial_data) # FIXME this is not how to do it
ids = map(lambda x: x['id'], serializer.initial_data) # FIXME this might not be too great
aliases = Alias.objects.filter(id__in=ids)
diff = set(ids).difference(set(aliases.values_list('id', flat=True)))
logger.debug('Deleted: {}'.format(','.join(map(unicode, aliases))))
aliases.delete()
if diff:
result = "ID's '{}' could not be found and were not deleted.".format(", ".join(map(str, diff)))
res = "ID's '{}' could not be found and were not deleted.".format(", ".join(map(unicode, diff)))
logger.info(res)
result = res
return Response({"result": result}, status=status.HTTP_200_OK)
return Response(status=status.HTTP_204_NO_CONTENT)