[damned-lies] Use the new Django messaging framework



commit 581283cab4e85ce89063f5de30b686c747ca6ea9
Author: Claude Paroz <claude 2xlibre net>
Date:   Sat Jan 15 16:56:17 2011 +0100

    Use the new Django messaging framework

 common/views.py    |   19 +++++++++----------
 people/views.py    |   13 +++++++------
 settings_sample.py |    4 ++++
 stats/views.py     |   13 ++++++-------
 vertimus/models.py |    5 +++--
 5 files changed, 29 insertions(+), 25 deletions(-)
---
diff --git a/common/views.py b/common/views.py
index 1898b88..8617398 100644
--- a/common/views.py
+++ b/common/views.py
@@ -24,6 +24,7 @@ from django.core.urlresolvers import reverse
 from django.template import RequestContext
 from django.utils.translation import ugettext as _
 from django.contrib.auth import login, authenticate, logout
+from django.contrib import messages
 from django.conf import settings
 from people.models import Person
 from teams.models import Role
@@ -49,15 +50,14 @@ def index(request):
     }
     return render_to_response('index.html', context, context_instance=RequestContext(request))
 
-def site_login(request, msgs=[]):
+def site_login(request):
     """ Site-specific login page. Not named 'login' to not confuse with auth.login """
     referer = None
     openid_path = ''
-    messages = list(msgs)
     if request.method == 'POST':
         if 'logout' in request.POST and request.POST['logout']:
             logout(request)
-            messages.append(_("You have been logged out."))
+            messages.success(request, _("You have been logged out."))
         elif 'username' in request.POST:
             username = request.POST['username']
             password = request.POST['password']
@@ -65,21 +65,20 @@ def site_login(request, msgs=[]):
             if user is not None:
                 if user.is_active:
                     login(request, user)
-                    message = _("You have been successfully logged in.")
-                    user.message_set.create(message=message)
+                    messages.success(request, _("You have been successfully logged in."))
                     if Role.objects.filter(person__username=user.username).count() < 1:
                         message = _("You have not joined any translation team yet. You can do it from <a href=\"%(url)s\">your profile</a>.") % {
                             'url': reverse('person_team_join'),
                         }
-                        user.message_set.create(message=message)
+                        messages.info(request, message)
                     if 'referer' in request.POST:
                         return HttpResponseRedirect(request.POST['referer'])
                     else:
                         return HttpResponseRedirect(reverse("home"))
                 else:
-                    messages.append(_("We're sorry, but your account has been disabled."))
+                    messages.error(request, _("We're sorry, but your account has been disabled."))
             else:
-                messages.append(_("Login unsuccessful. Please verify your username and password."))
+                messages.error(request, _("Login unsuccessful. Please verify your username and password."))
     else:
         referer = request.META.get('HTTP_REFERER', None)
 
@@ -88,7 +87,6 @@ def site_login(request, msgs=[]):
     context = {
         'pageSection': 'home',
         'openid_path': openid_path,
-        'messages': messages,
         'referer': referer,
     }
     return render_to_response('login.html', context, context_instance=RequestContext(request))
@@ -118,4 +116,5 @@ def activate_account(request, key):
     except Person.DoesNotExist:
         return render_to_response('error.html', {'error':"Sorry, the key you provided is not valid."})
     person.activate()
-    return site_login(request, msgs=[_("Your account has been activated.")])
+    messages.success(request, _("Your account has been activated."))
+    return site_login(request)
diff --git a/people/views.py b/people/views.py
index a6f35cb..783c0a5 100644
--- a/people/views.py
+++ b/people/views.py
@@ -27,6 +27,7 @@ from django.template import RequestContext
 from django.db import IntegrityError
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.forms import PasswordChangeForm
+from django.contrib import messages
 from django.contrib.sites.models import Site
 from people.models import Person
 from teams.models import Team, Role
@@ -59,7 +60,7 @@ def person_detail_change(request):
         if form.is_valid():
             form.save()
         else:
-            request.user.message_set.create(message="Sorry, the form is not valid.")
+            messages.error(request, _("Sorry, the form is not valid."))
     else:
         form = DetailForm(instance=person)
 
@@ -84,12 +85,12 @@ def person_team_join(request):
             new_role = Role(team=team, person=person)
             try:
                 new_role.save()
-                request.user.message_set.create(message=_("You have successfully joined the team '%s'.") % team.get_description())
+                messages.success(request, _("You have successfully joined the team '%s'.") % team.get_description())
                 team.send_mail_to_coordinator(subject=ugettext_lazy("A new person joined your team"),
                                               message=ugettext_lazy("%(name)s has just joined your translation team on %(site)s"),
                                               messagekw = {'name': person.name, 'site': Site.objects.get_current()})
             except IntegrityError:
-                request.user.message_set.create(message=_("You are already member of this team."))
+                messages.info(request, _("You are already member of this team."))
     else:
         form = TeamJoinForm()
 
@@ -111,10 +112,10 @@ def person_team_leave(request, team_slug):
     try:
         role = Role.objects.get(team=team, person=person)
         role.delete()
-        person.message_set.create(message=_("You have been removed from the team '%s'.") % team.get_description())
+        messages.success(request, _("You have been removed from the team '%s'.") % team.get_description())
     except Role.DoesNotExist:
         # Message no i18n'ed, should never happen under normal conditions
-        person.message_set.create(message="You are not a member of this team.")
+        messages.error(request, _("You are not a member of this team."))
     # redirect to normal person detail
     return HttpResponseRedirect(urlresolvers.reverse('person_detail_username',
                                                      args=(person.username,)))
@@ -127,7 +128,7 @@ def person_password_change(request):
     if request.method == 'POST':
         form = PasswordChangeForm(request.user, request.POST)
         if form.is_valid():
-            request.user.message_set.create(message=_("Your password has been changed."))
+            messages.success(request, _("Your password has been changed."))
             form.save()
     else:
         form = PasswordChangeForm(request.user)
diff --git a/settings_sample.py b/settings_sample.py
index cb02fee..725ad22 100644
--- a/settings_sample.py
+++ b/settings_sample.py
@@ -97,6 +97,7 @@ MIDDLEWARE_CLASSES = (
     'django.middleware.locale.LocaleMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.transaction.TransactionMiddleware',
 )
 
@@ -115,6 +116,7 @@ INSTALLED_APPS = (
     'django.contrib.admin',
     'django.contrib.humanize',
     'django.contrib.markup',
+    'django.contrib.messages',
 #    'django_openid',
     'south',
     'common',
@@ -128,6 +130,8 @@ INSTALLED_APPS = (
 
 INTERNAL_IPS=('127.0.0.1',)
 
+MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
+
 if USE_DEBUG_TOOLBAR:
     MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
     INSTALLED_APPS += ('debug_toolbar',)
diff --git a/stats/views.py b/stats/views.py
index 59506a9..4558be5 100644
--- a/stats/views.py
+++ b/stats/views.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (c) 2008-2009 Claude Paroz <claude 2xlibre net>.
+# Copyright (c) 2008-2011 Claude Paroz <claude 2xlibre net>.
 #
 # This file is part of Damned Lies.
 #
@@ -23,6 +23,7 @@ import os
 from django.conf import settings
 from django.shortcuts import render_to_response, get_object_or_404
 from django.contrib.auth.decorators import login_required
+from django.contrib import messages
 from django.core import serializers
 from django.http import HttpResponse, Http404
 from django.template import RequestContext
@@ -79,9 +80,8 @@ def module_branch(request, module_name, branch_name):
 @login_required
 def module_edit_branches(request, module_name):
     mod = get_object_or_404(Module, name=module_name)
-    messages = []
     if not mod.can_edit_branches(request.user):
-        request.user.message_set.create(message="Sorry, you're not allowed to edit this module's branches")
+        messages.error(request, "Sorry, you're not allowed to edit this module's branches")
         return module(request, module_name)
     if request.method == 'POST':
         form = ModuleBranchForm(mod, request.POST)
@@ -122,11 +122,11 @@ def module_edit_branches(request, module_name):
                     try:
                         branch = Branch(module=mod, name=branch_name)
                         branch.save()
-                        messages.append("The new branch %s has been added" % branch_name)
+                        messages.success(request, "The new branch %s has been added" % branch_name)
                         updated = True
                         # Send message to gnome-i18n?
                     except Exception, e:
-                        messages.append("Error adding the branch '%s': %s" % (branch_name, str(e)))
+                        messages.error(request, "Error adding the branch '%s': %s" % (branch_name, str(e)))
                         branch = None
                 if branch and form.cleaned_data['new_branch_release']:
                     rel = Release.objects.get(pk=form.cleaned_data['new_branch_release'].pk)
@@ -136,13 +136,12 @@ def module_edit_branches(request, module_name):
             if updated:
                 form = ModuleBranchForm(mod) # Redisplay a clean form
         else:
-            messages.append("Sorry, form is not valid")
+            messages.error(request, "Sorry, the form is not valid")
     else:
         form = ModuleBranchForm(mod)
     context = {
         'module': mod,
         'form': form,
-        'messages': messages
     }
     return render_to_response('module_edit_branches.html', context, context_instance=RequestContext(request))
 
diff --git a/vertimus/models.py b/vertimus/models.py
index cd6ef37..2956b00 100644
--- a/vertimus/models.py
+++ b/vertimus/models.py
@@ -691,9 +691,10 @@ class ActionCI(ActionAbstract):
             new_state = self._new_state()
         except:
             # Commit failed, state unchanged
-            person.message_set.create(message=_("The commit failed. The error was: '%s'") % sys.exc_info()[1])
             self._action_db.delete()
-            new_state = state
+            # FIXME: somewhere the error should be catched and handled properly
+            #new_state = state
+            raise Exception(_("The commit failed. The error was: '%s'") % sys.exc_info()[1])
         if state != new_state:
             self.send_mail_new_state(state, new_state, (state.language.team.mailing_list,))
         return new_state



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]