2
Storages used to assist in the deprecation of contrib.auth User messages.
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
11
class UserMessagesStorage(BaseStorage):
13
Retrieves messages from the User, using the legacy user.message_set API.
15
This storage is "read-only" insofar as it can only retrieve and delete
16
messages, not store them.
18
session_key = '_messages'
20
def _get_messages_queryset(self):
22
Returns the QuerySet containing all user messages (or ``None`` if
23
request.user is not a contrib.auth User).
25
user = getattr(self.request, 'user', None)
26
if isinstance(user, User):
27
return user._message_set.all()
29
def add(self, *args, **kwargs):
30
raise NotImplementedError('This message storage is read-only.')
32
def _get(self, *args, **kwargs):
34
Retrieves a list of messages assigned to the User. This backend never
35
stores anything, so all_retrieved is assumed to be False.
37
queryset = self._get_messages_queryset()
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.
44
for user_message in queryset:
45
messages.append(Message(constants.INFO, user_message.message))
46
return messages, False
48
def _store(self, messages, *args, **kwargs):
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).
53
queryset = self._get_messages_queryset()
54
if queryset is not None:
59
class LegacyFallbackStorage(FallbackStorage):
61
Works like ``FallbackStorage`` but also handles retrieving (and clearing)
62
contrib.auth User messages.
64
storage_classes = (UserMessagesStorage,) + FallbackStorage.storage_classes