Skip to content

Commit 00fbc7f

Browse files
authored
Merge pull request #373 from peopledoc/django2.2-support
Added support for Django 2.2
2 parents 92f0ef4 + 50c2b6e commit 00fbc7f

16 files changed

+66
-37
lines changed

CHANGELOG.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ ChangeLog
55
master (unreleased)
66
===================
77

8-
Nothing here yet.
8+
- Add support to Django 2.2 (#326).
99

1010
Release 3.2.0 (2019-11-07)
1111
==========================

README.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ edit, delete and use forms.
1313
Warnings
1414
========
1515

16-
* Python Compatibility : Python 2.7, 3.5, 3.6
17-
* Django compatibility : Django 1.11 (support of Django 2 is coming soon).
16+
* Python Compatibility : Python 2.7 (for Django 1.11 only), 3.5, 3.6
17+
* Django compatibility : Django 1.11, 2.2.
1818
* Django REST Framework : Compatible from the version 3.8.x to 3.10.x
1919

2020
See the `Deprecation timeline <http://django-formidable.readthedocs.io/en/latest/deprecations.html>`_ document for more information on deprecated versions.

demo/demo/builder/views.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
from django.views.generic.list import ListView
33
from django.views.generic.detail import DetailView
44
from django.views.generic.edit import UpdateView
5+
from django.urls import reverse
6+
57
from formidable.models import Formidable
6-
from django.core.urlresolvers import reverse
78
from formidable.accesses import get_accesses
89

910

demo/demo/settings.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,16 @@
4444
'demo.builder',
4545
)
4646

47-
MIDDLEWARE_CLASSES = (
47+
MIDDLEWARE = [
4848
'django.middleware.csrf.CsrfViewMiddleware',
4949
'django.contrib.sessions.middleware.SessionMiddleware',
5050
'corsheaders.middleware.CorsMiddleware',
5151
'django.middleware.common.CommonMiddleware',
5252
'django.contrib.auth.middleware.AuthenticationMiddleware',
53-
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
5453
'django.contrib.messages.middleware.MessageMiddleware',
5554
'django.middleware.clickjacking.XFrameOptionsMiddleware',
5655
'django.middleware.security.SecurityMiddleware',
57-
)
56+
]
5857

5958
ROOT_URLCONF = 'demo.urls'
6059

demo/demo/urls.py

+16-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,27 @@
1+
from distutils.version import StrictVersion as version
2+
import django
13
from django.conf.urls import include, url
24
from django.contrib import admin
35

46
from demo.views import FormPreview, DemoValidateViewFromSchema
57

68
urlpatterns = [
7-
url(r'^api/', include('formidable.urls', namespace='formidable')),
9+
url(r'^api/',
10+
include(('formidable.urls', 'formidable'), namespace='formidable')),
811
url(r'^api/forms/(?P<pk>\d+)/validate_schema/?$',
912
DemoValidateViewFromSchema.as_view(),
1013
name='form_validation_schema'),
11-
url(r'^admin/', include(admin.site.urls)),
1214
url(r'^preview/(?P<pk>\d+)/', FormPreview.as_view()),
13-
url(r'^forms/', include('demo.builder.urls', namespace='builder')),
15+
url(r'^forms/',
16+
include(('demo.builder.urls', 'builder'), namespace='builder')),
1417
]
18+
19+
if version(django.get_version()) < version("2.0"):
20+
urlpatterns += [
21+
url(r'^admin/', include(admin.site.urls)),
22+
]
23+
else:
24+
from django.urls import path # noqa
25+
urlpatterns += [
26+
path(r'admin/', admin.site.urls, 'admin'),
27+
]

demo/tests/test_exception_handler.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"""
55
from __future__ import unicode_literals
66

7-
from django.core.urlresolvers import reverse
7+
from django.urls import reverse
88
from django.core.exceptions import PermissionDenied
99
from django import forms
1010
from django.http import Http404

demo/tests/test_fields.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99

1010
class RenderingFormatField(TestCase):
1111

12-
class TestForm(BaseDynamicForm):
13-
12+
class MockForm(BaseDynamicForm):
13+
"""Mock Form"""
1414
title = fields.TitleField(label='Onboarding Form')
1515
helptext = fields.HelpTextField(text='Enter your **address**')
1616
sepa = fields.SeparatorField()
1717

1818
def setUp(self):
1919
super(RenderingFormatField, self).setUp()
20-
self.form = self.TestForm()
20+
self.form = self.MockForm()
2121

2222
def test_render_help_text(self):
2323
text = self.form.as_p()

demo/tests/test_integration.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
from copy import deepcopy
99

10-
from django.core.urlresolvers import reverse
1110
from django.conf import settings
1211
from django.db import DatabaseError
12+
from django.urls import reverse
1313
import django_perf_rec
1414

1515
from freezegun import freeze_time

demo/tests/test_perfs_rec.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22
import os
33
import json
44

5-
try:
6-
from django.urls import reverse
7-
except ImportError:
8-
from django.core.urlresolvers import reverse
9-
5+
from django.urls import reverse
106
from django.conf import settings
117
from django_perf_rec import TestCaseMixin
128
from rest_framework.test import APITestCase

demo/tests/test_post_save_callbacks.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from copy import deepcopy
55
from django.core.exceptions import ImproperlyConfigured
6-
from django.core.urlresolvers import reverse
6+
from django.urls import reverse
77
from django.conf import settings
88
from django.test import TestCase, override_settings
99

demo/tests/test_post_save_callbacks_regression_tests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from copy import deepcopy
55

6-
from django.core.urlresolvers import reverse
6+
from django.urls import reverse
77
from django.test import override_settings
88
from django.conf import settings
99

docs/source/deprecations.rst

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22
Deprecation timeline
33
====================
44

5+
From 3.2.0 to... ?
6+
==================
7+
8+
.. versionadded:: X.Y.Z
9+
10+
Added support for Django 2.2. Django Formidable should probably work on Django 2.0 and 2.1, but it's not in our test suite. We've decided to skip those versions because of their short-term support.
11+
12+
513
From 3.1.0 to 3.2.0
614
===================
715

formidable/forms/widgets.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ class HelpTextWidget(FormidableWidget):
157157
type_id = 'help_text'
158158
input_type = 'help_text'
159159

160-
def render(self, name, value, attrs=None):
160+
def render(self, name, value, attrs=None, **kwargs):
161161
return markdown(value)
162162

163163

@@ -170,7 +170,7 @@ def __init__(self, tag='h4', *args, **kwargs):
170170
self.tag = tag
171171
super(TitleWidget, self).__init__(*args, **kwargs)
172172

173-
def render(self, name, value, attrs=None):
173+
def render(self, name, value, attrs=None, **kwargs):
174174
tag = attrs.get('tag', None) or self.tag
175175
return '<{tag}>{value}</{tag}>'.format(
176176
tag=tag, value=value
@@ -182,5 +182,5 @@ class SeparatorWidget(FormidableWidget):
182182
type_id = 'separator'
183183
input_type = 'separator'
184184

185-
def render(self, name, value, attrs=None):
185+
def render(self, name, value, attrs=None, **kwargs):
186186
return '<hr>'

formidable/migrations/0001_initial.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class Migration(migrations.Migration):
5656
('label', models.CharField(max_length=256)),
5757
('order', models.IntegerField()),
5858
('help_text', models.TextField(null=True, blank=True)),
59-
('field', models.ForeignKey(related_name='items', to='formidable.Field')),
59+
('field', models.ForeignKey(related_name='items', to='formidable.Field', on_delete=models.CASCADE)),
6060
],
6161
),
6262
migrations.CreateModel(
@@ -65,7 +65,7 @@ class Migration(migrations.Migration):
6565
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
6666
('slug', models.CharField(max_length=128)),
6767
('message', models.TextField(null=True, blank=True)),
68-
('form', models.ForeignKey(related_name='presets', to='formidable.Formidable')),
68+
('form', models.ForeignKey(related_name='presets', to='formidable.Formidable', on_delete=models.CASCADE)),
6969
],
7070
),
7171
migrations.CreateModel(
@@ -75,7 +75,7 @@ class Migration(migrations.Migration):
7575
('slug', models.CharField(max_length=128)),
7676
('value', models.CharField(max_length=128, null=True, blank=True)),
7777
('field_id', models.CharField(max_length=128, null=True, blank=True)),
78-
('preset', models.ForeignKey(related_name='arguments', to='formidable.Preset')),
78+
('preset', models.ForeignKey(related_name='arguments', to='formidable.Preset', on_delete=models.CASCADE)),
7979
],
8080
),
8181
migrations.CreateModel(
@@ -85,23 +85,23 @@ class Migration(migrations.Migration):
8585
('value', models.CharField(max_length=256)),
8686
('type', models.CharField(max_length=256)),
8787
('message', models.TextField(null=True, blank=True)),
88-
('field', models.ForeignKey(related_name='validations', to='formidable.Field')),
88+
('field', models.ForeignKey(related_name='validations', to='formidable.Field', on_delete=models.CASCADE)),
8989
],
9090
),
9191
migrations.AddField(
9292
model_name='field',
9393
name='form',
94-
field=models.ForeignKey(related_name='fields', to='formidable.Formidable'),
94+
field=models.ForeignKey(related_name='fields', to='formidable.Formidable', on_delete=models.CASCADE),
9595
),
9696
migrations.AddField(
9797
model_name='default',
9898
name='field',
99-
field=models.ForeignKey(related_name='defaults', to='formidable.Field'),
99+
field=models.ForeignKey(related_name='defaults', to='formidable.Field', on_delete=models.CASCADE),
100100
),
101101
migrations.AddField(
102102
model_name='access',
103103
name='field',
104-
field=models.ForeignKey(related_name='accesses', to='formidable.Field'),
104+
field=models.ForeignKey(related_name='accesses', to='formidable.Field', on_delete=models.CASCADE),
105105
),
106106
migrations.AlterUniqueTogether(
107107
name='field',

formidable/models.py

+15-5
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ class Meta:
7979

8080
slug = models.CharField(max_length=256)
8181
label = models.CharField(max_length=256)
82-
form = models.ForeignKey(Formidable, related_name='fields')
82+
form = models.ForeignKey(
83+
Formidable, related_name='fields', on_delete=models.CASCADE
84+
)
8385
type_id = models.CharField(
8486
max_length=256,
8587
choices=FieldSerializerRegister.get_instance().to_choices()
@@ -106,7 +108,9 @@ def __str__(self):
106108
class Default(models.Model):
107109

108110
value = models.CharField(max_length=256)
109-
field = models.ForeignKey(Field, related_name='defaults')
111+
field = models.ForeignKey(
112+
Field, related_name='defaults', on_delete=models.CASCADE
113+
)
110114

111115
class Meta:
112116
app_label = 'formidable'
@@ -117,7 +121,9 @@ def __str__(self):
117121

118122
@python_2_unicode_compatible
119123
class Item(models.Model):
120-
field = models.ForeignKey(Field, related_name='items')
124+
field = models.ForeignKey(
125+
Field, related_name='items', on_delete=models.CASCADE
126+
)
121127
value = models.TextField()
122128
label = models.TextField()
123129
order = models.IntegerField()
@@ -137,7 +143,9 @@ class Meta:
137143
unique_together = (('field', 'access_id'),)
138144
app_label = 'formidable'
139145

140-
field = models.ForeignKey(Field, related_name='accesses')
146+
field = models.ForeignKey(
147+
Field, related_name='accesses', on_delete=models.CASCADE
148+
)
141149
access_id = models.CharField(max_length=128)
142150
level = models.CharField(max_length=128, choices=(
143151
(constants.REQUIRED, 'Required'), (constants.EDITABLE, 'Editable'),
@@ -151,7 +159,9 @@ def __str__(self):
151159

152160
@python_2_unicode_compatible
153161
class Validation(models.Model):
154-
field = models.ForeignKey(Field, related_name='validations')
162+
field = models.ForeignKey(
163+
Field, related_name='validations', on_delete=models.CASCADE
164+
)
155165
value = models.CharField(max_length=256)
156166
type = models.CharField(max_length=256)
157167
message = models.TextField(blank=True, null=True)

tox.ini

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[tox]
22
envlist =
33
django111-py{27,35,36}-drf{38,39,310}-{sqlite,pg}
4+
django22-py{35,36}-drf{39,310}-{sqlite,pg}
45
spectest
56
flake8
67
isort-check
@@ -15,6 +16,7 @@ changedir = demo
1516
deps =
1617
; Django versions
1718
django111: Django>=1.11,<1.12
19+
django22: Django>=2.2,<2.3
1820
; Python versions
1921
py27: django-perf-rec>=3,<4
2022
py{35,36}: django-perf-rec

0 commit comments

Comments
 (0)