Skip to content

Commit 99077d6

Browse files
committed
Backport work of @maurizi (see https://github.com/maurizi/django-async-messages) and add some improvements for Django>=2.0 and python 3.x support.
1 parent 8e04e2b commit 99077d6

File tree

5 files changed

+73
-25
lines changed

5 files changed

+73
-25
lines changed

.travis.yml

+26-10
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,33 @@
11
language: python
22
python:
33
- 2.7
4+
- 3.6
5+
46
env:
5-
- DJANGO="django>=1.4,<1.5"
6-
- DJANGO="django>=1.5,<1.6"
7-
- DJANGO="django>=1.6,<1.7"
8-
- DJANGO="django>=1.7,<1.8"
9-
- DJANGO="django>=1.8,<1.9"
10-
- DJANGO="django>=1.9,<1.10"
11-
- DJANGO="django>=1.10,<1.11"
12-
- DJANGO="django>=1.11,<2.0"
7+
- DJANGO=1.4
8+
- DJANGO=1.5
9+
- DJANGO=1.6
10+
- DJANGO=1.7
11+
- DJANGO=1.8
12+
- DJANGO=1.9
13+
- DJANGO=1.10
14+
- DJANGO=1.11
15+
- DJANGO=2.0
16+
17+
matrix:
18+
exclude:
19+
- python: 3.6
20+
env: DJANGO=1.4
21+
- python: 3.6
22+
env: DJANGO=1.5
23+
- python: 3.6
24+
env: DJANGO=1.6
25+
- python: 3.6
26+
env: DJANGO=1.7
27+
- python: 2.7
28+
env: DJANGO=2.0
1329
install:
14-
- pip install $DJANGO
30+
- pip install Django==$DJANGO
1531
- python setup.py develop
1632
script:
17-
- python manage.py test tests
33+
- python manage.py test tests

async_messages/middleware.py

+24-4
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,39 @@
1+
from distutils.version import StrictVersion
2+
13
from django.contrib import messages
24

5+
try:
6+
from django.utils.version import get_version
7+
except ImportError:
8+
from django import VERSION as DJANGO_VERSION
9+
10+
def get_version():
11+
return ".".join(str(n) for n in DJANGO_VERSION[:3])
12+
313
from async_messages import get_messages
414

15+
if StrictVersion(get_version()) >= StrictVersion("1.10.0"):
16+
from django.utils.deprecation import MiddlewareMixin as _MiddlewareBase
17+
18+
def _is_user_authenticated(user):
19+
return bool(user.is_authenticated)
20+
else:
21+
_MiddlewareBase = object
522

6-
class AsyncMiddleware(object):
23+
def _is_user_authenticated(user):
24+
return user.is_authenticated()
25+
26+
27+
class AsyncMiddleware(_MiddlewareBase):
728
# In Django>=1.10 User.is_authenticated is a property, not a method but a
829
# strange one : CallbableBool.
930
# - If default User is used you can use it as a boolean either a method.
1031
# - If this property is overrided you may have a bool instead and an
1132
# exception.
12-
# Fix it by checking if the property is callable or not.
33+
1334
def is_authenticated(self, request):
1435
if hasattr(request, "session") and hasattr(request, "user"):
15-
auth = request.user.is_authenticated
16-
return auth() if callable(auth) else auth
36+
return _is_user_authenticated(request.user)
1737
else:
1838
return False
1939

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from setuptools import setup, find_packages
33

44
setup(name='django-async-messages',
5-
version='0.3.1',
5+
version='0.3.2',
66
url='https://github.com/codeinthehole/django-async-messages',
77
author="David Winterbottom",
88
author_email="[email protected]",

tests/settings.py

+19-8
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,25 @@
2121
'tests'
2222
]
2323

24-
MIDDLEWARE_CLASSES = (
25-
'django.middleware.common.CommonMiddleware',
26-
'django.contrib.sessions.middleware.SessionMiddleware',
27-
'django.middleware.csrf.CsrfViewMiddleware',
28-
'django.contrib.auth.middleware.AuthenticationMiddleware',
29-
'django.contrib.messages.middleware.MessageMiddleware',
30-
'async_messages.middleware.AsyncMiddleware'
31-
)
24+
25+
if django.VERSION >= (1, 10):
26+
MIDDLEWARE = (
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+
'async_messages.middleware.AsyncMiddleware'
33+
)
34+
else:
35+
MIDDLEWARE_CLASSES = (
36+
'django.middleware.common.CommonMiddleware',
37+
'django.contrib.sessions.middleware.SessionMiddleware',
38+
'django.middleware.csrf.CsrfViewMiddleware',
39+
'django.contrib.auth.middleware.AuthenticationMiddleware',
40+
'django.contrib.messages.middleware.MessageMiddleware',
41+
'async_messages.middleware.AsyncMiddleware'
42+
)
3243

3344
SITE_ID = 1
3445

tox.ini

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[tox]
2-
envlist = py27-dj{14,18,19,110,111}
2+
envlist = py27-dj{14,18,19,110,111},py36-dj{18,19,110,111,20}
33

44
[testenv]
55
deps =
@@ -9,9 +9,10 @@ deps =
99
dj19: Django>=1.9,<1.10
1010
dj110: Django>=1.10,<1.11
1111
dj111: Django>=1.11,<2.0
12+
dj20: Django>=2.0,<2.1
1213
commands =
1314
pip install -e .
14-
python manage.py test tests
15+
python -Wd manage.py test tests
1516
passenv =
1617
PYTHONPATH
1718
usedevelop = True

0 commit comments

Comments
 (0)