]> asedeno.scripts.mit.edu Git - bluechips.git/blobdiff - bluechips/lib/base.py
if we GET to an update action, redirect to the edit action
[bluechips.git] / bluechips / lib / base.py
index 2a9786c6cad857e909ef8c731174e04c37c8418a..586336c3a351ff1c25ce3f14f01624601cc8d03e 100644 (file)
@@ -2,18 +2,17 @@
 
 Provides the BaseController class for subclassing.
 """
-from pylons import tmpl_context as c
+from decorator import decorator
+
+from pylons import request, tmpl_context as c
 from pylons.controllers import WSGIController
 from pylons.i18n import _, ungettext, N_
-
-from tw.mods.pylonshf import render, render_response, validate
+from pylons.templating import render_mako as render
 
 import bluechips.lib.helpers as h
 from bluechips import model
 from bluechips.model import meta
 
-from paste.request import construct_url
-from paste.httpexceptions import HTTPMovedPermanently
 
 class BaseController(WSGIController):
 
@@ -22,14 +21,6 @@ class BaseController(WSGIController):
         # WSGIController.__call__ dispatches to the Controller method
         # the request is routed to. This routing information is
         # available in environ['pylons.routes_dict']
-        if environ['pylons.routes_dict']['controller'] != 'error':
-            if environ['PATH_INFO'].endswith('/index'):
-                environ['PATH_INFO'] = environ['PATH_INFO'][:-5]
-                raise HTTPMovedPermanently(construct_url(environ))
-            if not environ['PATH_INFO'].endswith('/') and \
-                    environ['pylons.routes_dict']['action'] == 'index':
-                environ['PATH_INFO'] += '/'
-                raise HTTPMovedPermanently(construct_url(environ))
         try:
             return WSGIController.__call__(self, environ, start_response)
         finally:
@@ -42,6 +33,21 @@ def update_sar(record, form_result):
     for key, value in form_result.items():
         setattr(record, key, value)
 
-__all__ = ['c', 'h', 'render', 'render_response', 'validate',
-           'model', 'meta', '_', 'ungettext', 'N_', 'BaseController',
-           'update_sar']
+def redirect_on_get(action):
+    """
+    Decorator for a controller action. If the action is called with a GET
+    method, 302 redirect to the action specified.
+    """
+
+    @decorator
+    def redirect_on_get_wrap(func, *args, **kwargs):
+        if request.method == 'GET':
+            controller = request.environ['pylons.routes_dict']['controller']
+            return h.redirect_to(controller=controller, action=action)
+        else:
+            return func(*args, **kwargs)
+    return redirect_on_get_wrap
+
+
+__all__ = ['c', 'h', 'render', 'model', 'meta', '_', 'ungettext', 'N_',
+           'BaseController', 'update_sar', 'redirect_on_get']