Author: russellm
Date: 2011-04-02 01:36:04 -0700 (Sat, 02 Apr 2011)
New Revision: 15975

Removed:
   django/trunk/django/contrib/messages/storage/user_messages.py
   django/trunk/django/contrib/messages/tests/user_messages.py
Modified:
   django/trunk/django/conf/global_settings.py
   django/trunk/django/contrib/auth/models.py
   django/trunk/django/contrib/messages/api.py
   django/trunk/django/contrib/messages/tests/__init__.py
   django/trunk/django/contrib/messages/tests/base.py
   django/trunk/docs/ref/contrib/messages.txt
Log:
Advanced deprecation of user-based messages and the LegacyFallbackStorage in 
contrib.messages.

Modified: django/trunk/django/conf/global_settings.py
===================================================================
--- django/trunk/django/conf/global_settings.py 2011-04-02 08:35:25 UTC (rev 
15974)
+++ django/trunk/django/conf/global_settings.py 2011-04-02 08:36:04 UTC (rev 
15975)
@@ -502,7 +502,7 @@
 ############
 
 # Class to use as messges backend
-MESSAGE_STORAGE = 
'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'
+MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
 
 # Default values of MESSAGE_LEVEL and MESSAGE_TAGS are defined within
 # django.contrib.messages to avoid imports in this settings file.

Modified: django/trunk/django/contrib/auth/models.py
===================================================================
--- django/trunk/django/contrib/auth/models.py  2011-04-02 08:35:25 UTC (rev 
15974)
+++ django/trunk/django/contrib/auth/models.py  2011-04-02 08:36:04 UTC (rev 
15975)
@@ -345,13 +345,6 @@
 
         return _user_has_module_perms(self, app_label)
 
-    def get_and_delete_messages(self):
-        messages = []
-        for m in self.message_set.all():
-            messages.append(m.message)
-            m.delete()
-        return messages
-
     def email_user(self, subject, message, from_email=None):
         "Sends an email to this User."
         from django.core.mail import send_mail
@@ -387,21 +380,6 @@
         return self._profile_cache
 
 
-class Message(models.Model):
-    """
-    The message system is a lightweight way to queue messages for given
-    users. A message is associated with a User instance (so it is only
-    applicable for registered users). There's no concept of expiration or
-    timestamps. Messages are created by the Django admin after successful
-    actions. For example, "The poll Foo was created successfully." is a
-    message.
-    """
-    user = models.ForeignKey(User, related_name='_message_set')
-    message = models.TextField(_('message'))
-
-    def __unicode__(self):
-        return self.message
-
 class AnonymousUser(object):
     id = None
     username = ''

Modified: django/trunk/django/contrib/messages/api.py
===================================================================
--- django/trunk/django/contrib/messages/api.py 2011-04-02 08:35:25 UTC (rev 
15974)
+++ django/trunk/django/contrib/messages/api.py 2011-04-02 08:36:04 UTC (rev 
15975)
@@ -20,8 +20,6 @@
     """
     if hasattr(request, '_messages'):
         return request._messages.add(level, message, extra_tags)
-    if hasattr(request, 'user') and request.user.is_authenticated():
-        return request.user.message_set.create(message=message)
     if not fail_silently:
         raise MessageFailure('Without the django.contrib.messages '
                                 'middleware, messages can only be added to '

Deleted: django/trunk/django/contrib/messages/storage/user_messages.py
===================================================================
--- django/trunk/django/contrib/messages/storage/user_messages.py       
2011-04-02 08:35:25 UTC (rev 15974)
+++ django/trunk/django/contrib/messages/storage/user_messages.py       
2011-04-02 08:36:04 UTC (rev 15975)
@@ -1,64 +0,0 @@
-"""
-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

Modified: django/trunk/django/contrib/messages/tests/__init__.py
===================================================================
--- django/trunk/django/contrib/messages/tests/__init__.py      2011-04-02 
08:35:25 UTC (rev 15974)
+++ django/trunk/django/contrib/messages/tests/__init__.py      2011-04-02 
08:36:04 UTC (rev 15975)
@@ -2,5 +2,3 @@
 from django.contrib.messages.tests.fallback import FallbackTest
 from django.contrib.messages.tests.middleware import MiddlewareTest
 from django.contrib.messages.tests.session import SessionTest
-from django.contrib.messages.tests.user_messages import \
-                                           UserMessagesTest, LegacyFallbackTest

Modified: django/trunk/django/contrib/messages/tests/base.py
===================================================================
--- django/trunk/django/contrib/messages/tests/base.py  2011-04-02 08:35:25 UTC 
(rev 15974)
+++ django/trunk/django/contrib/messages/tests/base.py  2011-04-02 08:36:04 UTC 
(rev 15975)
@@ -60,9 +60,6 @@
                                               self.storage_class.__name__)
         self.old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
         settings.TEMPLATE_DIRS = ()
-        self.save_warnings_state()
-        warnings.filterwarnings('ignore', category=DeprecationWarning,
-                                module='django.contrib.auth.models')
 
     def tearDown(self):
         for setting in self.restore_settings:
@@ -74,7 +71,6 @@
         settings.INSTALLED_APPS = self._installed_apps
         settings.MESSAGE_STORAGE = self._message_storage
         settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
-        self.restore_warnings_state()
 
     def restore_setting(self, setting):
         if setting in self._remembered_settings:
@@ -226,44 +222,6 @@
         for msg in data['messages']:
             self.assertContains(response, msg)
 
-    @skipUnlessAuthIsInstalled
-    def test_middleware_disabled_auth_user(self):
-        """
-        Tests that the messages API successfully falls back to using
-        user.message_set to store messages directly when the middleware is
-        disabled.
-        """
-        settings.MESSAGE_LEVEL = constants.DEBUG
-        user = User.objects.create_user('test', 't...@example.com', 'test')
-        self.client.login(username='test', password='test')
-        settings.INSTALLED_APPS = list(settings.INSTALLED_APPS)
-        settings.INSTALLED_APPS.remove(
-            'django.contrib.messages',
-        )
-        settings.MIDDLEWARE_CLASSES = list(settings.MIDDLEWARE_CLASSES)
-        settings.MIDDLEWARE_CLASSES.remove(
-            'django.contrib.messages.middleware.MessageMiddleware',
-        )
-        settings.TEMPLATE_CONTEXT_PROCESSORS = \
-          list(settings.TEMPLATE_CONTEXT_PROCESSORS)
-        settings.TEMPLATE_CONTEXT_PROCESSORS.remove(
-            'django.contrib.messages.context_processors.messages',
-        )
-        data = {
-            'messages': ['Test message %d' % x for x in xrange(10)],
-        }
-        show_url = reverse('django.contrib.messages.tests.urls.show')
-        for level in ('debug', 'info', 'success', 'warning', 'error'):
-            add_url = reverse('django.contrib.messages.tests.urls.add',
-                              args=(level,))
-            response = self.client.post(add_url, data, follow=True)
-            self.assertRedirects(response, show_url)
-            self.assertTrue('messages' in response.context)
-            context_messages = list(response.context['messages'])
-            for msg in data['messages']:
-                self.assertTrue(msg in context_messages)
-                self.assertContains(response, msg)
-
     def test_middleware_disabled_anon_user(self):
         """
         Tests that, when the middleware is disabled and a user is not logged

Deleted: django/trunk/django/contrib/messages/tests/user_messages.py
===================================================================
--- django/trunk/django/contrib/messages/tests/user_messages.py 2011-04-02 
08:35:25 UTC (rev 15974)
+++ django/trunk/django/contrib/messages/tests/user_messages.py 2011-04-02 
08:36:04 UTC (rev 15975)
@@ -1,70 +0,0 @@
-from django import http
-from django.contrib.auth.models import User
-from django.contrib.messages.storage.user_messages import UserMessagesStorage,\
-    LegacyFallbackStorage
-from django.contrib.messages.tests.base import skipUnlessAuthIsInstalled
-from django.contrib.messages.tests.cookie import set_cookie_data
-from django.contrib.messages.tests.fallback import FallbackTest
-from django.test import TestCase
-
-
-class UserMessagesTest(TestCase):
-
-    def setUp(self):
-        self.user = User.objects.create(username='tester')
-
-    def test_add(self):
-        storage = UserMessagesStorage(http.HttpRequest())
-        self.assertRaises(NotImplementedError, storage.add, 'Test message 1')
-
-    def test_get_anonymous(self):
-        # Ensure that the storage still works if no user is attached to the
-        # request.
-        storage = UserMessagesStorage(http.HttpRequest())
-        self.assertEqual(len(storage), 0)
-
-    def test_get(self):
-        storage = UserMessagesStorage(http.HttpRequest())
-        storage.request.user = self.user
-        self.user.message_set.create(message='test message')
-
-        self.assertEqual(len(storage), 1)
-        self.assertEqual(list(storage)[0].message, 'test message')
-
-UserMessagesTest = skipUnlessAuthIsInstalled(UserMessagesTest)
-
-
-class LegacyFallbackTest(FallbackTest, TestCase):
-    storage_class = LegacyFallbackStorage
-
-    def setUp(self):
-        super(LegacyFallbackTest, self).setUp()
-        self.user = User.objects.create(username='tester')
-
-    def get_request(self, *args, **kwargs):
-        request = super(LegacyFallbackTest, self).get_request(*args, **kwargs)
-        request.user = self.user
-        return request
-
-    def test_get_legacy_only(self):
-        request = self.get_request()
-        storage = self.storage_class(request)
-        self.user.message_set.create(message='user message')
-
-        # Test that the message actually contains what we expect.
-        self.assertEqual(len(storage), 1)
-        self.assertEqual(list(storage)[0].message, 'user message')
-
-    def test_get_legacy(self):
-        request = self.get_request()
-        storage = self.storage_class(request)
-        cookie_storage = self.get_cookie_storage(storage)
-        self.user.message_set.create(message='user message')
-        set_cookie_data(cookie_storage, ['cookie'])
-
-        # Test that the message actually contains what we expect.
-        self.assertEqual(len(storage), 2)
-        self.assertEqual(list(storage)[0].message, 'user message')
-        self.assertEqual(list(storage)[1], 'cookie')
-
-LegacyFallbackTest = skipUnlessAuthIsInstalled(LegacyFallbackTest)

Modified: django/trunk/docs/ref/contrib/messages.txt
===================================================================
--- django/trunk/docs/ref/contrib/messages.txt  2011-04-02 08:35:25 UTC (rev 
15974)
+++ django/trunk/docs/ref/contrib/messages.txt  2011-04-02 08:36:04 UTC (rev 
15975)
@@ -83,37 +83,10 @@
     Since it is uses SessionStorage, it also requires Django's
     ``contrib.sessions`` application.
 
-``'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'``
-    This is the default temporary storage class.
-
-    This class extends FallbackStorage and adds compatibility methods
-    to retrieve any messages stored in the user Message model by code that
-    has not yet been updated to use the new API. This storage is temporary
-    (because it makes use of code that is pending deprecation) and will be
-    removed in Django 1.4. At that time, the default storage will become
-    ``django.contrib.messages.storage.fallback.FallbackStorage``. For more
-    information, see `LegacyFallbackStorage`_ below.
-
 To write your own storage class, subclass the ``BaseStorage`` class in
 ``django.contrib.messages.storage.base`` and implement the ``_get`` and
 ``_store`` methods.
 
-LegacyFallbackStorage
-^^^^^^^^^^^^^^^^^^^^^
-
-The ``LegacyFallbackStorage`` is a temporary tool to facilitate the transition
-from the deprecated ``user.message_set`` API and will be removed in Django 1.4
-according to Django's standard deprecation policy. For more information, see
-the full :doc:`release process documentation </internals/release-process>`.
-
-In addition to the functionality in the ``FallbackStorage``, it adds a custom,
-read-only storage class that retrieves messages from the user ``Message``
-model. Any messages that were stored in the ``Message`` model (e.g., by code
-that has not yet been updated to use the messages framework) will be retrieved
-first, followed by those stored in a cookie and in the session, if any. Since
-messages stored in the ``Message`` model do not have a concept of levels, they
-will be assigned the ``INFO`` level by default.
-
 Message levels
 --------------
 
@@ -368,14 +341,13 @@
 MESSAGE_STORAGE
 ---------------
 
-Default: 
``'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'``
+Default: ``'django.contrib.messages.storage.user_messages.FallbackStorage'``
 
 Controls where Django stores message data. Valid values are:
 
     * ``'django.contrib.messages.storage.fallback.FallbackStorage'``
     * ``'django.contrib.messages.storage.session.SessionStorage'``
     * ``'django.contrib.messages.storage.cookie.CookieStorage'``
-    * ``'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'``
 
 See `Storage backends`_ for more details.
 

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to