Fix regex lookup
Note: Renames filter fields: - source_regex to source__iregex - destination_regex to destination__iregex
This commit is contained in:
1 parent
2a037fbe8f
commit
f0a7858811
4 files changed
+24
-20
No files matched your search
+9
-14
@@ -1,23 +1,18 @@
|
||||
import django_filters
|
||||
from rest_framework.filters import BaseFilterBackend
|
||||
|
||||
from dpdapi.models import Alias
|
||||
|
||||
from django_filters import filters
|
||||
|
||||
filters.LOOKUP_TYPES = ['iregex', 'exact', 'iexact']
|
||||
|
||||
|
||||
class AliasFilter(django_filters.FilterSet):
|
||||
# TODO: These do not work
|
||||
# Ref: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#iregex
|
||||
source_regex = django_filters.CharFilter(name='source')
|
||||
destination_regex = django_filters.CharFilter(name='destination')
|
||||
|
||||
class AliasRegexFilter(django_filters.FilterSet):
|
||||
class Meta:
|
||||
model = Alias
|
||||
fields = {
|
||||
'domain': ['exact'],
|
||||
'domain__name': ['iexact'],
|
||||
'source_regex': ['iregex', 'regex'],
|
||||
'destination_regex': ['iregex', 'regex']
|
||||
'source': ['iregex', 'regex'],
|
||||
'destination': ['iregex', 'regex']
|
||||
}
|
||||
|
||||
|
||||
class AliasRegexFilterBackend(BaseFilterBackend):
|
||||
def filter_queryset(self, request, queryset, view):
|
||||
return AliasRegexFilter(request.query_params, queryset=queryset).qs
|
||||
+8
-2
@@ -1,4 +1,5 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.test import override_settings
|
||||
from django.urls import reverse
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
@@ -12,7 +13,7 @@ class RegexTestCase(APITestCase):
|
||||
user = User.objects.create(username='yolo')
|
||||
d = Domain.objects.create(name='example.com')
|
||||
for a in self.aliases:
|
||||
Alias.objects.create(source=a, destination='@example.com', domain=d)
|
||||
Alias.objects.create(source=a, destination='ninja@example.com', domain=d)
|
||||
self.client.force_login(user)
|
||||
|
||||
def test_get_all(self):
|
||||
@@ -24,7 +25,12 @@ class RegexTestCase(APITestCase):
|
||||
res = self.client.get(reverse('alias-list'), data=params)
|
||||
self.assertEqual(len(res.data), len(self.aliases))
|
||||
|
||||
def test_domain_filter_no_hits(self):
|
||||
params = {'domain__name': 'zexample.com'}
|
||||
res = self.client.get(reverse('alias-list'), data=params)
|
||||
self.assertEqual(len(res.data), 0)
|
||||
|
||||
def test_regex_filter(self):
|
||||
params = {'source_regex': '^ops-|^ops@'}
|
||||
params = {'source__regex': '^ops-|^ops@'}
|
||||
res = self.client.get(reverse('alias-list'), data=params)
|
||||
self.assertEqual(len(res.data), 1)
|
||||
+6
-4
@@ -6,24 +6,26 @@ from functools import reduce
|
||||
from django.db.models import Q
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from rest_framework.decorators import list_route
|
||||
from rest_framework.mixins import ListModelMixin
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status, viewsets
|
||||
from rest_framework.viewsets import GenericViewSet
|
||||
|
||||
from dpdapi.filters import AliasFilter
|
||||
from dpdapi.filters import AliasRegexFilterBackend
|
||||
from dpdapi.models import Alias, Domain, User
|
||||
from dpdapi.serializers import AliasSerializer, AliasDeleteSerializer, DomainSerializer, UserSerializer
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AliasViewSet(viewsets.ModelViewSet):
|
||||
class AliasViewSet(ListModelMixin, GenericViewSet):
|
||||
""" Aliases """
|
||||
queryset = Alias.objects.all()
|
||||
serializer_class = AliasSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = AliasFilter
|
||||
filter_backends = (DjangoFilterBackend, AliasRegexFilterBackend)
|
||||
filter_fields = ('domain', 'domain__name',)
|
||||
|
||||
@list_route(methods=['post'])
|
||||
def create_bulk(self, request):
|
||||
|
||||
@@ -58,6 +58,7 @@ INSTALLED_APPS = (
|
||||
)
|
||||
|
||||
INSTALLED_APPS += (
|
||||
'django_extensions',
|
||||
'rest_framework',
|
||||
'django_filters',
|
||||
'dpdapi',
|
||||
|
||||
Reference in new issue
Block a user