|
29
|
1 |
""" |
|
|
2 |
Storages used to assist in the deprecation of contrib.auth User messages. |
|
|
3 |
|
|
|
4 |
""" |
|
|
5 |
from django.contrib.messages import constants |
|
|
6 |
from django.contrib.messages.storage.base import BaseStorage, Message |
|
|
7 |
from django.contrib.auth.models import User |
|
|
8 |
from django.contrib.messages.storage.fallback import FallbackStorage |
|
|
9 |
|
|
|
10 |
|
|
|
11 |
class UserMessagesStorage(BaseStorage): |
|
|
12 |
""" |
|
|
13 |
Retrieves messages from the User, using the legacy user.message_set API. |
|
|
14 |
|
|
|
15 |
This storage is "read-only" insofar as it can only retrieve and delete |
|
|
16 |
messages, not store them. |
|
|
17 |
""" |
|
|
18 |
session_key = '_messages' |
|
|
19 |
|
|
|
20 |
def _get_messages_queryset(self): |
|
|
21 |
""" |
|
|
22 |
Returns the QuerySet containing all user messages (or ``None`` if |
|
|
23 |
request.user is not a contrib.auth User). |
|
|
24 |
""" |
|
|
25 |
user = getattr(self.request, 'user', None) |
|
|
26 |
if isinstance(user, User): |
|
|
27 |
return user._message_set.all() |
|
|
28 |
|
|
|
29 |
def add(self, *args, **kwargs): |
|
|
30 |
raise NotImplementedError('This message storage is read-only.') |
|
|
31 |
|
|
|
32 |
def _get(self, *args, **kwargs): |
|
|
33 |
""" |
|
|
34 |
Retrieves a list of messages assigned to the User. This backend never |
|
|
35 |
stores anything, so all_retrieved is assumed to be False. |
|
|
36 |
""" |
|
|
37 |
queryset = self._get_messages_queryset() |
|
|
38 |
if queryset is None: |
|
|
39 |
# This is a read-only and optional storage, so to ensure other |
|
|
40 |
# storages will also be read if used with FallbackStorage an empty |
|
|
41 |
# list is returned rather than None. |
|
|
42 |
return [], False |
|
|
43 |
messages = [] |
|
|
44 |
for user_message in queryset: |
|
|
45 |
messages.append(Message(constants.INFO, user_message.message)) |
|
|
46 |
return messages, False |
|
|
47 |
|
|
|
48 |
def _store(self, messages, *args, **kwargs): |
|
|
49 |
""" |
|
|
50 |
Removes any messages assigned to the User and returns the list of |
|
|
51 |
messages (since no messages are stored in this read-only storage). |
|
|
52 |
""" |
|
|
53 |
queryset = self._get_messages_queryset() |
|
|
54 |
if queryset is not None: |
|
|
55 |
queryset.delete() |
|
|
56 |
return messages |
|
|
57 |
|
|
|
58 |
|
|
|
59 |
class LegacyFallbackStorage(FallbackStorage): |
|
|
60 |
""" |
|
|
61 |
Works like ``FallbackStorage`` but also handles retrieving (and clearing) |
|
|
62 |
contrib.auth User messages. |
|
|
63 |
""" |
|
|
64 |
storage_classes = (UserMessagesStorage,) + FallbackStorage.storage_classes |