adds message queue
authorCaleb Forbes Davis V <caldavis@gmail.com>
Mon, 27 Jun 2011 18:13:52 +0000 (13:13 -0500)
committerCaleb Forbes Davis V <caldavis@gmail.com>
Mon, 27 Jun 2011 18:25:55 +0000 (13:25 -0500)
Feature #368 - messaging framework
* message levels are debug, info, success, warning, and error
* display mechanism - base.html includes messages.html for now
* fetch_messages and add_message are available to all templates
  using jinja2 environment.globals
* messages are displayed and cleared. no persistence

mediagoblin/messages.py [new file with mode: 0644]
mediagoblin/templates/mediagoblin/base.html
mediagoblin/templates/mediagoblin/utils/messages.html [new file with mode: 0644]
mediagoblin/util.py

diff --git a/mediagoblin/messages.py b/mediagoblin/messages.py
new file mode 100644 (file)
index 0000000..afe6ee7
--- /dev/null
@@ -0,0 +1,34 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 Free Software Foundation, Inc
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+DEBUG = 'debug'
+INFO = 'info'
+SUCCESS = 'success'
+WARNING = 'warning'
+ERROR = 'error'
+
+def add_message(request, level, text):
+    messages = request.session.setdefault('messages', [])
+    messages.append({'level': level, 'text': text})
+    request.session.save()
+
+def fetch_messages(request, clear_from_session=True):
+    messages = request.session.get('messages')
+    if messages and clear_from_session:
+        # Save that we removed the messages from the session
+        request.session['messages'] = []
+        request.session.save()
+    return messages
index 2b47a14c5306578a056e81d9db6014e7098feeed..58de7325ac062094a043e2310e01ec404b391a5c 100644 (file)
@@ -51,6 +51,8 @@
           </div>
         </div>
       {% endblock %}
+      
+      {% include "mediagoblin/utils/messages.html" %}
 
       <div class="container_12 mediagoblin_content">
         <div class="grid_12">
diff --git a/mediagoblin/templates/mediagoblin/utils/messages.html b/mediagoblin/templates/mediagoblin/utils/messages.html
new file mode 100644 (file)
index 0000000..a8d9c37
--- /dev/null
@@ -0,0 +1,28 @@
+{#
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 Free Software Foundation, Inc
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#}
+
+{# Display any queued messages #}
+{% set messages = fetch_messages(request) %}
+{% if messages %}
+  <ul class="mediagoblin_messages">
+    {% for msg in messages %}
+      <li class="message_{{ msg.level }}">{{ msg.text }}</li>
+    {% endfor %}
+  </ul>
+{% endif %}
+
index 91fbee0a10a60d4ddd7d98465c46de3f34abac13..f02293005eb02dd69e6e39fb94c752b674e792f2 100644 (file)
@@ -32,6 +32,7 @@ from lxml.html.clean import Cleaner
 import markdown
 
 from mediagoblin import mg_globals
+from mediagoblin import messages
 from mediagoblin.db.util import ObjectId
 
 TESTS_ENABLED = False
@@ -104,6 +105,12 @@ def get_jinja_env(template_loader, locale):
         mg_globals.translations.gettext,
         mg_globals.translations.ngettext)
 
+    # All templates will know how to ...
+    # ... add a new message to the message queue
+    template_env.globals['add_message'] = messages.add_message
+    # ... fetch all waiting messages and remove them from the queue
+    template_env.globals['fetch_messages'] = messages.fetch_messages
+
     if exists(locale):
         SETUP_JINJA_ENVS[locale] = template_env