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
|
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
|
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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',)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
||||||
Reference in new issue
Block a user