--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/storage/user_messages.py Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,64 @@
+"""
+Storages used to assist in the deprecation of contrib.auth User messages.
+
+"""
+from django.contrib.messages import constants
+from django.contrib.messages.storage.base import BaseStorage, Message
+from django.contrib.auth.models import User
+from django.contrib.messages.storage.fallback import FallbackStorage
+
+
+class UserMessagesStorage(BaseStorage):
+ """
+ Retrieves messages from the User, using the legacy user.message_set API.
+
+ This storage is "read-only" insofar as it can only retrieve and delete
+ messages, not store them.
+ """
+ session_key = '_messages'
+
+ def _get_messages_queryset(self):
+ """
+ Returns the QuerySet containing all user messages (or ``None`` if
+ request.user is not a contrib.auth User).
+ """
+ user = getattr(self.request, 'user', None)
+ if isinstance(user, User):
+ return user._message_set.all()
+
+ def add(self, *args, **kwargs):
+ raise NotImplementedError('This message storage is read-only.')
+
+ def _get(self, *args, **kwargs):
+ """
+ Retrieves a list of messages assigned to the User. This backend never
+ stores anything, so all_retrieved is assumed to be False.
+ """
+ queryset = self._get_messages_queryset()
+ if queryset is None:
+ # This is a read-only and optional storage, so to ensure other
+ # storages will also be read if used with FallbackStorage an empty
+ # list is returned rather than None.
+ return [], False
+ messages = []
+ for user_message in queryset:
+ messages.append(Message(constants.INFO, user_message.message))
+ return messages, False
+
+ def _store(self, messages, *args, **kwargs):
+ """
+ Removes any messages assigned to the User and returns the list of
+ messages (since no messages are stored in this read-only storage).
+ """
+ queryset = self._get_messages_queryset()
+ if queryset is not None:
+ queryset.delete()
+ return messages
+
+
+class LegacyFallbackStorage(FallbackStorage):
+ """
+ Works like ``FallbackStorage`` but also handles retrieving (and clearing)
+ contrib.auth User messages.
+ """
+ storage_classes = (UserMessagesStorage,) + FallbackStorage.storage_classes