Skip to content

Commit

Permalink
Django 2.1 support
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisv2 authored and anrie committed Aug 20, 2018
1 parent 7144d2e commit 37ee678
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 41 deletions.
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ env:
- TOXENV=django110
- TOXENV=django111
- TOXENV=django20
- TOXENV=django21
matrix:
exclude:
- python: 2.7
env: TOXENV=django20
- python: 2.7
env: TOXENV=django21
notifications:
email: false
sudo: false
3 changes: 3 additions & 0 deletions example/requirements-base.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
easy_thumbnails==2.5.0
WebTest==2.0.27
django-webtest==1.9.2
coverage==4.4.1

isort==4.2.15
Expand Down
41 changes: 21 additions & 20 deletions example/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,26 +48,27 @@
},
]

if django.VERSION[:2] >= (2, 0):
MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

elif django.VERSION[:2] >= (1, 7):
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
if django.VERSION[:2] >= (1, 7):
if django.VERSION[:2] >= (1, 10):
MIDDLEWARE = (
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
else:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

INSTALLED_APPS = [
'django.contrib.auth',
Expand Down
3 changes: 2 additions & 1 deletion example/tests/test_settings.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from django_webtest import WebTest
from django.test.utils import override_settings

try:
from django.urls import reverse
except ImportError:
# django 1.8 compat, remove when dropping support
from django.core.urlresolvers import reverse
from django.test.utils import override_settings

from . import factory

Expand Down
6 changes: 3 additions & 3 deletions example/views.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render

try:
from django.urls import reverse
except ImportError:
# django 1.8 compat, remove when dropping support
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render

from image_cropping.utils import get_backend

Expand Down
4 changes: 2 additions & 2 deletions image_cropping/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ def deconstruct(self): # pragma: no cover
}
return self.name, 'image_cropping.fields.ImageRatioField', args, kwargs

def contribute_to_class(self, cls, name, private_only=False):
super(ImageRatioField, self).contribute_to_class(cls, name, private_only)
def contribute_to_class(self, cls, name, **kwargs):
super(ImageRatioField, self).contribute_to_class(cls, name, **kwargs)
if not cls._meta.abstract:
# attach a list of fields that are referenced by the ImageRatioField
# so we can set the correct widget in the ModelAdmin
Expand Down
12 changes: 6 additions & 6 deletions image_cropping/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,31 +90,31 @@ def _media(self):


class ImageCropWidget(AdminFileWidget, CropWidget):
def render(self, name, value, attrs=None):
def render(self, name, value, attrs=None, renderer=None):
if not attrs:
attrs = {}
if value:
attrs.update(get_attrs(value, name))
return super(AdminFileWidget, self).render(name, value, attrs)
return super(AdminFileWidget, self).render(name, value, attrs, renderer)


class HiddenImageCropWidget(ImageCropWidget):
def render(self, name, value, attrs=None):
def render(self, name, value, attrs=None, renderer=None):
if not attrs:
attrs = {}
# we need to hide it the whole field by JS because the admin
# doesn't yet support hidden fields:
# https://code.djangoproject.com/ticket/11277
attrs['data-hide-field'] = True
return super(HiddenImageCropWidget, self).render(name, value, attrs)
return super(HiddenImageCropWidget, self).render(name, value, attrs, renderer)


class CropForeignKeyWidget(ForeignKeyRawIdWidget, CropWidget):
def __init__(self, *args, **kwargs):
self.field_name = kwargs.pop('field_name')
super(CropForeignKeyWidget, self).__init__(*args, **kwargs)

def render(self, name, value, attrs=None):
def render(self, name, value, attrs=None, renderer=None):
if attrs is None:
attrs = {}

Expand All @@ -138,4 +138,4 @@ def render(self, name, value, attrs=None):
except AttributeError:
logger.error("Object %s.%s doesn't have an attribute named '%s'." % (
app_name, model_name, self.field_name))
return super(CropForeignKeyWidget, self).render(name, value, attrs)
return super(CropForeignKeyWidget, self).render(name, value, attrs, renderer)
18 changes: 9 additions & 9 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,12 @@
# Then call "tox" from this directory to run the test suite for all configurations.

[tox]
envlist = django18, django110, django111, django20
envlist = django18, django110, django111, django20, django21

[base]
deps =
pillow==4.2.1
-r{toxinidir}/example/requirements-1.0.txt

[base2]
deps =
pillow==4.2.1
-r{toxinidir}/example/requirements-2.0.txt
-r{toxinidir}/example/requirements.txt

[testenv]
commands = py.test example --create-db --cache-clear
Expand All @@ -38,5 +33,10 @@ deps =

[testenv:django20]
deps =
Django==2.0
{[base2]deps}
Django<2.1
{[base]deps}

[testenv:django21]
deps =
Django<2.2
{[base]deps}

0 comments on commit 37ee678

Please sign in to comment.