Skip to content

Commit 9d312c8

Browse files
committed
Django 2.0 compat
1 parent 06d822e commit 9d312c8

File tree

8 files changed

+87
-53
lines changed

8 files changed

+87
-53
lines changed

Diff for: .gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
*.pyc
22
.coverage
33
htmlcov/
4+
venv
5+
.python-version

Diff for: requirements.txt

-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
Django>=1.4
21
coverage

Diff for: runtests.py

+40-18
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
#!/usr/bin/env python
2+
import logging
23
import sys
34

45
import django
56

67
from django.conf import settings
78
from django.core.management import execute_from_command_line
89

10+
from tos.compat import get_middleware_settings_key
11+
12+
13+
middleware_settings_key = get_middleware_settings_key()
14+
915

1016
if not settings.configured:
11-
settings.configure(
12-
DATABASES={
17+
django_settings = {
18+
'DATABASES': {
1319
'default': {
1420
'ENGINE': 'django.db.backends.sqlite3',
1521
}
1622
},
17-
INSTALLED_APPS=[
23+
'INSTALLED_APPS': [
1824
'django.contrib.auth',
1925
'django.contrib.contenttypes',
2026
'django.contrib.sessions',
@@ -23,14 +29,7 @@
2329
'tos',
2430
'tos.tests'
2531
],
26-
MIDDLEWARE_CLASSES=[
27-
'django.middleware.common.CommonMiddleware',
28-
'django.contrib.sessions.middleware.SessionMiddleware',
29-
'django.middleware.csrf.CsrfViewMiddleware',
30-
'django.contrib.auth.middleware.AuthenticationMiddleware',
31-
'django.contrib.messages.middleware.MessageMiddleware',
32-
],
33-
TEMPLATES=[
32+
'TEMPLATES': [
3433
{
3534
'BACKEND': 'django.template.backends.django.DjangoTemplates',
3635
'DIRS': [],
@@ -45,22 +44,45 @@
4544
},
4645
},
4746
],
48-
ROOT_URLCONF='tos.tests.test_urls',
49-
LOGIN_URL='/login/',
50-
SITE_ID='1',
51-
CACHES = {
47+
'ROOT_URLCONF': 'tos.tests.test_urls',
48+
'LOGIN_URL': '/login/',
49+
'SITE_ID': '1',
50+
'CACHES': {
5251
'default': {
5352
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
5453
},
5554
'tos': {
5655
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
5756
}
5857
},
59-
TOS_CACHE_NAME = 'tos'
60-
)
58+
'TOS_CACHE_NAME': 'tos'
59+
}
60+
61+
if django.VERSION >= (1, 10, 0):
62+
django_settings[middleware_settings_key] = [
63+
'django.middleware.security.SecurityMiddleware',
64+
'django.contrib.sessions.middleware.SessionMiddleware',
65+
'django.middleware.common.CommonMiddleware',
66+
'django.middleware.csrf.CsrfViewMiddleware',
67+
'django.contrib.auth.middleware.AuthenticationMiddleware',
68+
'django.contrib.messages.middleware.MessageMiddleware',
69+
'django.middleware.clickjacking.XFrameOptionsMiddleware',
70+
]
71+
else:
72+
django_settings[middleware_settings_key] = [
73+
'django.middleware.security.SecurityMiddleware',
74+
'django.contrib.sessions.middleware.SessionMiddleware',
75+
'django.middleware.common.CommonMiddleware',
76+
'django.middleware.csrf.CsrfViewMiddleware',
77+
'django.contrib.auth.middleware.AuthenticationMiddleware',
78+
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
79+
'django.contrib.messages.middleware.MessageMiddleware',
80+
'django.middleware.clickjacking.XFrameOptionsMiddleware',
81+
]
82+
83+
settings.configure(**django_settings)
6184

6285

63-
import logging
6486
logging.basicConfig(
6587
level = logging.DEBUG,
6688
format = '%(asctime)s %(levelname)s %(message)s',

Diff for: tos/apps.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44

55
from .signal_handlers import invalidate_cached_agreements
66

7-
MIDDLEWARES = getattr(settings, 'MIDDLEWARE_CLASSES', [])
7+
from .compat import get_middleware_settings_key
8+
9+
10+
middleware_settings_key = get_middleware_settings_key()
11+
MIDDLEWARES = getattr(settings, middleware_settings_key, [])
812

913

1014
class TOSConfig(AppConfig):

Diff for: tos/compat.py

+20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import django
22
from django.conf import settings
3+
from django.utils import deprecation
34

45

56
def patterns(mod, *urls):
@@ -50,7 +51,26 @@ def get_cache(cache_name):
5051
return get_cache(cache_name)
5152

5253

54+
def get_middleware_mixin():
55+
if django.VERSION >= (1, 10, 0):
56+
return deprecation.MiddlewareMixin
57+
else:
58+
return object
59+
60+
61+
def get_middleware_settings_key():
62+
if django.VERSION >= (1, 10, 0):
63+
return 'MIDDLEWARE'
64+
else:
65+
return 'MIDDLEWARE_CLASSES'
66+
67+
5368
if django.VERSION < (1, 5):
5469
from django.templatetags.future import url
5570
else:
5671
from django.template.defaulttags import url
72+
73+
if django.VERSION >= (1, 10, 0):
74+
from django.urls import reverse
75+
else:
76+
from django.core.urlresolvers import reverse

Diff for: tos/middleware.py

+3-10
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
1-
from django import VERSION as DJANGO_VERSION
21
from django.conf import settings
32
from django.contrib.auth import SESSION_KEY as session_key
43
from django.contrib.auth import REDIRECT_FIELD_NAME
54
from django.http import HttpResponseRedirect
6-
from django.utils import deprecation
75
from django.utils.cache import add_never_cache_headers
86

9-
from .compat import get_cache
7+
from .compat import get_cache, get_middleware_mixin, reverse
108
from .models import UserAgreement
119

12-
if DJANGO_VERSION >= (1, 10, 0):
13-
from django.urls import reverse
14-
else:
15-
from django.core.urlresolvers import reverse
16-
1710

1811
cache = get_cache(getattr(settings, 'TOS_CACHE_NAME', 'default'))
1912
tos_check_url = reverse('tos_check_tos')
13+
middleware_mixin = get_middleware_mixin()
2014

21-
22-
class UserAgreementMiddleware(deprecation.MiddlewareMixin if DJANGO_VERSION >= (1, 10, 0) else object):
15+
class UserAgreementMiddleware(middleware_mixin):
2316
"""
2417
Some middleware to check if users have agreed to the latest TOS
2518
"""

Diff for: tos/tests/test_middleware.py

+16-16
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
1-
from django import VERSION as DJANGO_VERSION
21
from django.conf import settings
32
from django.contrib.auth import REDIRECT_FIELD_NAME
43
from django.test import TestCase
5-
from django.test.utils import override_settings
4+
from django.test.utils import modify_settings
65

7-
from tos.compat import get_cache, get_runtime_user_model
6+
from tos.compat import get_cache, get_runtime_user_model, reverse
87
from tos.middleware import UserAgreementMiddleware
98
from tos.models import TermsOfService, UserAgreement
109
from tos.signal_handlers import invalidate_cached_agreements
1110

12-
if DJANGO_VERSION >= (1, 10, 0):
13-
from django.urls import reverse
14-
else:
15-
from django.core.urlresolvers import reverse
1611

17-
18-
@override_settings(
19-
MIDDLEWARE_CLASSES=settings.MIDDLEWARE_CLASSES + [
20-
'tos.middleware.UserAgreementMiddleware',
21-
]
12+
@modify_settings(
13+
MIDDLEWARE_CLASSES={
14+
'append': 'tos.middleware.UserAgreementMiddleware',
15+
},
16+
MIDDLEWARE={
17+
'append': 'tos.middleware.UserAgreementMiddleware',
18+
},
2219
)
2320
class TestMiddleware(TestCase):
2421

@@ -91,10 +88,13 @@ def test_accept_after_middleware_redirects_properly(self):
9188
self.assertEqual(response.url.replace('http://testserver', ''), str(reverse('index')))
9289

9390

94-
@override_settings(
95-
MIDDLEWARE_CLASSES=settings.MIDDLEWARE_CLASSES + [
96-
'tos.middleware.UserAgreementMiddleware',
97-
]
91+
@modify_settings(
92+
MIDDLEWARE_CLASSES={
93+
'append': 'tos.middleware.UserAgreementMiddleware',
94+
},
95+
MIDDLEWARE={
96+
'append': 'tos.middleware.UserAgreementMiddleware',
97+
},
9898
)
9999
class BumpCoverage(TestCase):
100100

Diff for: tos/tests/test_views.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
1-
from django import VERSION as DJANGO_VERSION
21
from django.conf import settings
32
from django.test import TestCase
43

5-
from tos.compat import get_runtime_user_model
4+
from tos.compat import get_runtime_user_model, reverse
65
from tos.models import TermsOfService, UserAgreement, has_user_agreed_latest_tos
76

8-
if DJANGO_VERSION >= (1, 10, 0):
9-
from django.urls import reverse
10-
else:
11-
from django.core.urlresolvers import reverse
12-
137

148
class TestViews(TestCase):
159

0 commit comments

Comments
 (0)