Bump to latest django, drf
TODO: Fix regex filter (write a test)
This commit is contained in:
1 parent
ad025f17d8
commit
4e41af0bd8
7 files changed
+30
-38
No files matched your search
+9
-9
@@ -1,18 +1,18 @@
|
||||
import django_filters
|
||||
|
||||
from dpdapi.models import Alias
|
||||
from rest_framework.filters import BaseFilterBackend
|
||||
|
||||
from django_filters import filters
|
||||
|
||||
filters.LOOKUP_TYPES = ['iregex', 'exact', 'iexact']
|
||||
|
||||
|
||||
class AliasRegexFilter(django_filters.FilterSet):
|
||||
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", lookup_type='iregex')
|
||||
destination_regex = django_filters.CharFilter(name="destination", lookup_type='iregex')
|
||||
source_regex = django_filters.CharFilter(name='source', lookup_expr=['iregex'])
|
||||
destination_regex = django_filters.CharFilter(name='destination', lookup_expr=['iregex'])
|
||||
|
||||
class Meta:
|
||||
model = Alias
|
||||
|
||||
|
||||
class AliasRegexFilterBackend(BaseFilterBackend):
|
||||
def filter_queryset(self, request, queryset, view):
|
||||
return AliasRegexFilter(request.query_params, queryset=queryset).qs
|
||||
fields = ['domain', 'domain__name', 'source_regex', 'destination_regex']
|
||||
@@ -1,6 +1,4 @@
|
||||
from __future__ import unicode_literals
|
||||
from django.db import models
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
|
||||
|
||||
class BaseModel(models.Model):
|
||||
@@ -11,7 +9,6 @@ class BaseModel(models.Model):
|
||||
abstract = True
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Alias(BaseModel):
|
||||
source = models.EmailField(max_length=254)
|
||||
destination = models.EmailField(max_length=254)
|
||||
@@ -32,7 +29,6 @@ class Alias(BaseModel):
|
||||
unique_together = ('source', 'destination', 'domain')
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class Domain(BaseModel):
|
||||
name = models.CharField(max_length=254, unique=True)
|
||||
|
||||
@@ -45,7 +41,6 @@ class Domain(BaseModel):
|
||||
super(Domain, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class User(BaseModel):
|
||||
email = models.EmailField(max_length=254, unique=True)
|
||||
password = models.CharField(max_length=109)
|
||||
|
||||
@@ -14,6 +14,7 @@ class AliasSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Alias
|
||||
validators = [] # Disable unique togheter check
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class AliasDeleteSerializer(serializers.ModelSerializer):
|
||||
@@ -25,11 +26,13 @@ class AliasDeleteSerializer(serializers.ModelSerializer):
|
||||
class DomainSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Domain
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = '__all__'
|
||||
extra_kwargs = {'password': {'write_only': True}}
|
||||
|
||||
def _hash_password(self, raw_password):
|
||||
|
||||
+8
-9
@@ -1,20 +1,19 @@
|
||||
from __future__ import unicode_literals
|
||||
import logging
|
||||
import operator
|
||||
from django.utils import six
|
||||
|
||||
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.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status, filters, viewsets
|
||||
from rest_framework import status, viewsets
|
||||
|
||||
from dpdapi.filters import AliasRegexFilterBackend
|
||||
from dpdapi.filters import AliasFilter
|
||||
from dpdapi.models import Alias, Domain, User
|
||||
from dpdapi.serializers import AliasSerializer, AliasDeleteSerializer, DomainSerializer, UserSerializer
|
||||
|
||||
if six.PY3:
|
||||
from functools import reduce
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -23,8 +22,8 @@ class AliasViewSet(viewsets.ModelViewSet):
|
||||
queryset = Alias.objects.all()
|
||||
serializer_class = AliasSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
filter_backends = (filters.DjangoFilterBackend, AliasRegexFilterBackend)
|
||||
filter_fields = ('domain', 'domain__name',)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = AliasFilter
|
||||
|
||||
@list_route(methods=['post'])
|
||||
def create_bulk(self, request):
|
||||
@@ -65,7 +64,7 @@ class DomainViewSet(viewsets.ModelViewSet):
|
||||
queryset = Domain.objects.all()
|
||||
serializer_class = DomainSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
filter_backends = (filters.DjangoFilterBackend,)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_fields = ('name',)
|
||||
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ INSTALLED_APPS = (
|
||||
|
||||
INSTALLED_APPS += (
|
||||
'rest_framework',
|
||||
'django_filters',
|
||||
'dpdapi',
|
||||
)
|
||||
|
||||
@@ -89,21 +90,15 @@ DATABASES = {
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/1.7/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
|
||||
TIME_ZONE = 'Europe/Oslo'
|
||||
|
||||
USE_I18N = True
|
||||
|
||||
USE_L10N = True
|
||||
|
||||
USE_TZ = True
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/1.7/howto/static-files/
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
|
||||
REST_FRAMEWORK = {
|
||||
|
||||
+1
-1
@@ -1,8 +1,8 @@
|
||||
from django.conf.urls import include, url
|
||||
from django.contrib import admin
|
||||
from django.views.generic import RedirectView
|
||||
from rest_framework import urls as rest_framework_urls
|
||||
|
||||
from rest_framework import urls as rest_framework_urls
|
||||
from dpdapi import urls as dpdapi_urls
|
||||
|
||||
|
||||
|
||||
+8
-8
@@ -1,8 +1,8 @@
|
||||
Django>=1.9,<1.10
|
||||
django-extensions==1.6.1
|
||||
django-filter==0.12.0
|
||||
djangorestframework>=3.3,<3.4
|
||||
Fabric==1.10.2
|
||||
gunicorn==19.4.5
|
||||
mysqlclient==1.3.7
|
||||
passlib==1.6.5
|
||||
Django==1.11.6
|
||||
django-extensions==1.9.6
|
||||
django-filter==1.1.0
|
||||
djangorestframework==3.7.1
|
||||
Fabric==1.14.0
|
||||
gunicorn==19.7.1
|
||||
mysqlclient==1.3.12
|
||||
passlib==1.7.1
|
||||
Reference in new issue
Block a user