Skip to content

Commit 97ee385

Browse files
authored
Merge pull request stephenmcd#209 from metteludwig/master
Django 1.11 and 2.0 compatibility
2 parents e98fd75 + 7db924b commit 97ee385

File tree

11 files changed

+73
-28
lines changed

11 files changed

+73
-28
lines changed

.travis.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@ env:
33
- DJANGO_VERSION=https://github.com/django/django/archive/stable/1.8.x.zip
44
- DJANGO_VERSION=https://github.com/django/django/archive/stable/1.9.x.zip
55
- DJANGO_VERSION=https://github.com/django/django/archive/stable/1.10.x.zip
6+
- DJANGO_VERSION=https://github.com/django/django/archive/stable/1.11.x.zip
7+
- DJANGO_VERSION=https://github.com/django/django/archive/stable/2.0.x.zip
68
python:
79
- "2.7"
810
- "3.4"
911
- "3.5"
12+
matrix:
13+
exclude:
14+
- python: "2.7"
15+
env: DJANGO_VERSION=https://github.com/django/django/archive/stable/2.0.x.zip
1016
install:
1117
- pip install $DJANGO_VERSION
1218
- pip install .

forms_builder/example_project/settings.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,15 @@
5151
},
5252
]
5353

54-
MIDDLEWARE_CLASSES = (
54+
MIDDLEWARE = (
5555
'django.middleware.common.CommonMiddleware',
5656
'django.contrib.sessions.middleware.SessionMiddleware',
5757
'django.middleware.csrf.CsrfViewMiddleware',
5858
'django.contrib.auth.middleware.AuthenticationMiddleware',
5959
'django.contrib.messages.middleware.MessageMiddleware',
6060
)
61+
# For Django 1.8 compatibility
62+
MIDDLEWARE_CLASSES = MIDDLEWARE
6163

6264
TEMPLATE_CONTEXT_PROCESSORS = (
6365
"django.contrib.auth.context_processors.auth",

forms_builder/example_project/urls.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
from __future__ import unicode_literals
22

3-
from django.conf.urls import include, url
3+
try:
4+
from django.urls import re_path, include
5+
except ImportError:
6+
# For Django 1.8 compatibility
7+
from django.conf.urls import url as re_path, include
48
from django.contrib import admin
59
from django.shortcuts import render
610

@@ -11,8 +15,8 @@
1115
admin.autodiscover()
1216

1317
urlpatterns = [
14-
url(r'^admin/', include(admin.site.urls)),
15-
url(r'^forms/', include(form_urls)),
16-
url(r'^$', lambda request: render(request, "index.html",
18+
re_path(r'^admin/', admin.site.urls),
19+
re_path(r'^forms/', include(form_urls)),
20+
re_path(r'^$', lambda request: render(request, "index.html",
1721
{"forms": Form.objects.all()})),
1822
]

forms_builder/forms/admin.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77
from datetime import datetime
88
from io import BytesIO, StringIO
99

10-
from django.conf.urls import url
1110
from django.contrib import admin
1211
from django.core.files.storage import FileSystemStorage
13-
from django.core.urlresolvers import reverse
12+
try:
13+
from django.urls import reverse, re_path
14+
except ImportError:
15+
# For django 1.8 compatiblity
16+
from django.conf.urls import url as re_path
17+
from django.core.urlresolvers import reverse
1418
from django.db.models import Count
1519
from django.http import HttpResponse, HttpResponseRedirect
1620
from django.shortcuts import render, get_object_or_404
@@ -84,16 +88,16 @@ def get_urls(self):
8488
"""
8589
urls = super(FormAdmin, self).get_urls()
8690
extra_urls = [
87-
url("^(?P<form_id>\d+)/entries/$",
91+
re_path("^(?P<form_id>\d+)/entries/$",
8892
self.admin_site.admin_view(self.entries_view),
8993
name="form_entries"),
90-
url("^(?P<form_id>\d+)/entries/show/$",
94+
re_path("^(?P<form_id>\d+)/entries/show/$",
9195
self.admin_site.admin_view(self.entries_view),
9296
{"show": True}, name="form_entries_show"),
93-
url("^(?P<form_id>\d+)/entries/export/$",
97+
re_path("^(?P<form_id>\d+)/entries/export/$",
9498
self.admin_site.admin_view(self.entries_view),
9599
{"export": True}, name="form_entries_export"),
96-
url("^file/(?P<field_entry_id>\d+)/$",
100+
re_path("^file/(?P<field_entry_id>\d+)/$",
97101
self.admin_site.admin_view(self.file_view),
98102
name="form_file"),
99103
]

forms_builder/forms/fields.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
from django.core.exceptions import ImproperlyConfigured
44
from django import forms
5-
from django.forms.extras import SelectDateWidget
5+
try:
6+
from django.forms import SelectDateWidget
7+
except ImportError:
8+
# For Django 1.8 compatibility
9+
from django.forms.extras import SelectDateWidget
610
from django.utils.translation import ugettext_lazy as _
711

812
from forms_builder.forms.settings import USE_HTML5, EXTRA_FIELDS, EXTRA_WIDGETS

forms_builder/forms/forms.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,17 @@
77

88
import django
99
from django import forms
10-
from django.forms.extras import SelectDateWidget
10+
try:
11+
from django.forms import SelectDateWidget
12+
except ImportError:
13+
# For Django 1.8 compatibility
14+
from django.forms.extras import SelectDateWidget
1115
from django.core.files.storage import default_storage
12-
from django.core.urlresolvers import reverse
16+
try:
17+
from django.urls import reverse
18+
except ImportError:
19+
# For Django 1.8 compatibility
20+
from django.core.urlresolvers import reverse
1321
from django.template import Template
1422
from django.utils.safestring import mark_safe
1523
from django.utils.translation import ugettext_lazy as _

forms_builder/forms/migrations/0001_initial.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class Migration(migrations.Migration):
8383
fields=[
8484
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
8585
('entry_time', models.DateTimeField(verbose_name='Date/time')),
86-
('form', models.ForeignKey(related_name='entries', to='forms.Form')),
86+
('form', models.ForeignKey(related_name='entries', to='forms.Form', on_delete=models.CASCADE)),
8787
],
8888
options={
8989
'abstract': False,
@@ -95,13 +95,13 @@ class Migration(migrations.Migration):
9595
migrations.AddField(
9696
model_name='fieldentry',
9797
name='entry',
98-
field=models.ForeignKey(related_name='fields', to='forms.FormEntry'),
98+
field=models.ForeignKey(related_name='fields', to='forms.FormEntry', on_delete=models.CASCADE),
9999
preserve_default=True,
100100
),
101101
migrations.AddField(
102102
model_name='field',
103103
name='form',
104-
field=models.ForeignKey(related_name='fields', to='forms.Form'),
104+
field=models.ForeignKey(related_name='fields', to='forms.Form', on_delete=models.CASCADE),
105105
preserve_default=True,
106106
),
107107
]

forms_builder/forms/models.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
from __future__ import unicode_literals
22

3+
from django import VERSION as DJANGO_VERSION
34
from django.contrib.sites.models import Site
45
from django.core.exceptions import ValidationError
5-
from django.core.urlresolvers import reverse
6+
7+
try:
8+
from django.urls import reverse
9+
except ImportError:
10+
# For Django 1.8 compatibility
11+
from django.core.urlresolvers import reverse
12+
613
from django.db import models
714
from django.db.models import Q
815
from django.utils.encoding import python_2_unicode_compatible
@@ -117,7 +124,10 @@ def published(self, for_user=None):
117124
status = self.status == STATUS_PUBLISHED
118125
publish_date = self.publish_date is None or self.publish_date <= now()
119126
expiry_date = self.expiry_date is None or self.expiry_date >= now()
120-
authenticated = for_user is not None and for_user.is_authenticated()
127+
authenticated = for_user is not None and for_user.is_authenticated
128+
if DJANGO_VERSION <= (1, 9):
129+
# Django 1.8 compatibility, is_authenticated has to be called as a method.
130+
authenticated = for_user is not None and for_user.is_authenticated()
121131
login_required = (not self.login_required or authenticated)
122132
return status and publish_date and expiry_date and login_required
123133

@@ -255,11 +265,11 @@ class Meta:
255265
###################################################
256266

257267
class FormEntry(AbstractFormEntry):
258-
form = models.ForeignKey("Form", related_name="entries")
268+
form = models.ForeignKey("Form", related_name="entries", on_delete=models.CASCADE)
259269

260270

261271
class FieldEntry(AbstractFieldEntry):
262-
entry = models.ForeignKey("FormEntry", related_name="fields")
272+
entry = models.ForeignKey("FormEntry", related_name="fields", on_delete=models.CASCADE)
263273

264274

265275
class Form(AbstractForm):
@@ -271,7 +281,7 @@ class Field(AbstractField):
271281
Implements automated field ordering.
272282
"""
273283

274-
form = models.ForeignKey("Form", related_name="fields")
284+
form = models.ForeignKey("Form", related_name="fields", on_delete=models.CASCADE)
275285
order = models.IntegerField(_("Order"), null=True, blank=True)
276286

277287
class Meta(AbstractField.Meta):

forms_builder/forms/urls.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
from __future__ import unicode_literals
2-
3-
from django.conf.urls import url
2+
try:
3+
from django.urls import re_path
4+
except ImportError:
5+
# For Django 1.8 compatibility
6+
from django.conf.urls import url as re_path
47

58
from forms_builder.forms import views
69

710

811
urlpatterns = [
9-
url(r"(?P<slug>.*)/sent/$", views.form_sent, name="form_sent"),
10-
url(r"(?P<slug>.*)/$", views.form_detail, name="form_detail"),
12+
re_path(r"(?P<slug>.*)/sent/$", views.form_sent, name="form_sent"),
13+
re_path(r"(?P<slug>.*)/$", views.form_detail, name="form_detail"),
1114
]

forms_builder/forms/views.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44

55
from django.conf import settings
66
from django.contrib.auth import REDIRECT_FIELD_NAME
7-
from django.core.urlresolvers import reverse
7+
try:
8+
from django.urls import reverse
9+
except ImportError:
10+
# For Django 1.8 compatibility
11+
from django.core.urlresolvers import reverse
812
from django.http import HttpResponse, HttpResponseBadRequest
913
from django.shortcuts import get_object_or_404, redirect, render_to_response
1014
from django.template import RequestContext

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"sphinx-me >= 0.1.2",
5151
"unidecode",
5252
"django-email-extras >= 0.2",
53-
"django >= 1.8, < 1.11",
53+
"django >= 1.8",
5454
"future <= 0.15.0",
5555
],
5656
classifiers = [

0 commit comments

Comments
 (0)