~ubuntu-branches/ubuntu/quantal/python-django/quantal-security

« back to all changes in this revision

Viewing changes to django/contrib/messages/storage/user_messages.py

  • Committer: Bazaar Package Importer
  • Author(s): Chris Lamb
  • Date: 2010-05-21 07:52:55 UTC
  • mfrom: (1.3.6 upstream)
  • mto: This revision was merged to the branch mainline in revision 28.
  • Revision ID: james.westby@ubuntu.com-20100521075255-ii78v1dyfmyu3uzx
Tags: upstream-1.2
ImportĀ upstreamĀ versionĀ 1.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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