From 01eb085c206c4ba88045fb88a2f1076622bd2585 Mon Sep 17 00:00:00 2001 From: Scott Torborg Date: Thu, 5 Nov 2009 17:59:52 -1000 Subject: [PATCH] if we GET to an update action, redirect to the edit action --- bluechips/controllers/spend.py | 1 + bluechips/controllers/transfer.py | 1 + bluechips/lib/base.py | 22 ++++++++++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/bluechips/controllers/spend.py b/bluechips/controllers/spend.py index cc6466f..8d2dc4a 100644 --- a/bluechips/controllers/spend.py +++ b/bluechips/controllers/spend.py @@ -93,6 +93,7 @@ class SpendController(BaseController): return render('/spend/index.mako') + @redirect_on_get('edit') @validate(schema=ExpenditureSchema(), form='edit', variable_decode=True) def update(self, id=None): # Either create a new object, or, if we're editing, get the diff --git a/bluechips/controllers/transfer.py b/bluechips/controllers/transfer.py index 5aa8be2..5094845 100644 --- a/bluechips/controllers/transfer.py +++ b/bluechips/controllers/transfer.py @@ -47,6 +47,7 @@ class TransferController(BaseController): abort(404) return render('/transfer/index.mako') + @redirect_on_get('edit') @validate(schema=TransferSchema(), form='edit') def update(self, id=None): if id is None: diff --git a/bluechips/lib/base.py b/bluechips/lib/base.py index 19129d4..586336c 100644 --- a/bluechips/lib/base.py +++ b/bluechips/lib/base.py @@ -2,7 +2,9 @@ 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 pylons.templating import render_mako as render @@ -31,5 +33,21 @@ def update_sar(record, form_result): for key, value in form_result.items(): setattr(record, key, value) +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'] + 'BaseController', 'update_sar', 'redirect_on_get'] -- 2.45.2