Adds Regexpfilter (untested)
This commit is contained in:
1 parent
c3d6305adf
commit
f98a193576
2 files changed
+27
-7
No files matched your search
@@ -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
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user