Bump to latest django, drf

TODO: Fix regex filter (write a test)
This commit is contained in:
Nikolai R Kristiansen committed 2017-10-25 21:36:20 +02:00
1 parent ad025f17d8
commit 4e41af0bd8
7 files changed
+30 -38

No files matched your search

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