Skip to content

Commit

Permalink
Django 2.0 support
Browse files Browse the repository at this point in the history
  • Loading branch information
mpasternak committed Dec 10, 2017
1 parent 8a0a473 commit 38c91b0
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 13 deletions.
2 changes: 1 addition & 1 deletion messages_extends/migrations/0001_initial.py
Expand Up @@ -23,7 +23,7 @@ class Migration(migrations.Migration):
('modified', models.DateTimeField(auto_now=True)),
('read', models.BooleanField(default=False)),
('expires', models.DateTimeField(null=True, blank=True)),
('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)),
('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)),
],
),
]
3 changes: 2 additions & 1 deletion messages_extends/models.py
Expand Up @@ -13,7 +13,8 @@

@python_2_unicode_compatible
class Message(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
on_delete=models.CASCADE)
message = models.TextField()
LEVEL_CHOICES = (
(messages_extends.DEBUG_PERSISTENT, 'PERSISTENT DEBUG'),
Expand Down
6 changes: 5 additions & 1 deletion messages_extends/storages.py
Expand Up @@ -170,7 +170,11 @@ def process_message(self, message, *args, **kwargs):

user = kwargs.get("user") or self.get_user()

if user.is_anonymous():
try:
anonymous = user.is_anonymous()
except TypeError:
anonymous = user.is_anonymous
if anonymous is True:
raise NotImplementedError('Persistent message levels cannot be used for anonymous users.')
message_persistent = PersistentMessage()
message_persistent.level = message.level
Expand Down
7 changes: 5 additions & 2 deletions messages_extends/tests.py
Expand Up @@ -10,7 +10,10 @@
from django.contrib.auth import authenticate
from django.contrib.auth.models import AnonymousUser, User
from django.contrib.messages.storage import default_storage
from django.core.urlresolvers import reverse
try:
from django.core.urlresolvers import reverse
except ImportError:
from django.urls import reverse
from django.test import Client, TestCase
from django.test.utils import override_settings

Expand Down Expand Up @@ -93,7 +96,7 @@ def test_for_other_user(self):

def test_mark_message_read_for_other_user(self):
"""Test the basic message for another user"""
self.client.login(username=self._get_user().username, password='password')
res = self.client.login(username=self._get_user().username, password='password')
user2 = self._get_user(username="john")
messages.add_message(self.client, WARNING_PERSISTENT, "Warning..", user=user2)
result = Message.objects.all()[0]
Expand Down
11 changes: 9 additions & 2 deletions messages_extends/views.py
Expand Up @@ -8,8 +8,15 @@
from django.shortcuts import get_object_or_404
from django.core.exceptions import PermissionDenied


def callable_or_bool(fn):
if callable(fn):
return fn()
return fn


def message_mark_read(request, message_id):
if not request.user.is_authenticated():
if not callable_or_bool(request.user.is_authenticated):
raise PermissionDenied
message = get_object_or_404(Message, user=request.user, pk=message_id)
message.read = True
Expand All @@ -20,7 +27,7 @@ def message_mark_read(request, message_id):
return HttpResponse('')

def message_mark_all_read(request):
if not request.user.is_authenticated():
if not callable_or_bool(request.user.is_authenticated):
raise PermissionDenied
Message.objects.filter(user=request.user).update(read=True)
if not request.is_ajax():
Expand Down
5 changes: 5 additions & 0 deletions test_settings.py
Expand Up @@ -93,6 +93,11 @@
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

import django
if django.VERSION >= (2,0):
MIDDLEWARE = list(MIDDLEWARE_CLASSES)
del MIDDLEWARE_CLASSES

ROOT_URLCONF = 'test_urls'

# Python dotted path to the WSGI application used by Django's runserver.
Expand Down
16 changes: 11 additions & 5 deletions test_urls.py
@@ -1,11 +1,17 @@
import django

if django.VERSION >= (1,10):
if django.VERSION >= (1, 10):
from django.conf.urls import include, url
patterns = lambda _ignore, x: list([x,])

patterns = lambda _ignore, x: list([x, ])
else:
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
url(r'^messages/', include('messages_extends.urls', namespace='messages')),
)
if django.VERSION >= (2, 0):
urlpatterns = [
url(r'^messages/', include(('messages_extends.urls', 'messages'))),
]
else:
urlpatterns = patterns('',
url(r'^messages/', include('messages_extends.urls', namespace='messages')),
)
4 changes: 3 additions & 1 deletion tox.ini
@@ -1,8 +1,10 @@
[tox]
envlist = py{27,34,35,36}-django{18,110}
envlist = py{27,34,35,36}-django{18,110,111,20}

[testenv]
commands = python setup.py test
deps =
django18: django>=1.8, <1.9
django110: django>=1.10, <1.11
django111: django>=1.11, <1.12
django20: django>=2.0, <2.1

0 comments on commit 38c91b0

Please sign in to comment.