From 8d32c0129c78f7039a82ceb3199c74ca35d11868 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Tue, 26 Oct 2010 01:58:14 -0400 Subject: add action decorator --- pyramid/tests/test_view.py | 22 ++++++++++++++++++++++ pyramid/view.py | 10 ++++++++++ 2 files changed, 32 insertions(+) diff --git a/pyramid/tests/test_view.py b/pyramid/tests/test_view.py index 095ece18e..62d09358b 100644 --- a/pyramid/tests/test_view.py +++ b/pyramid/tests/test_view.py @@ -436,6 +436,28 @@ class Test_default_exceptionresponse_view(unittest.TestCase): result = self._callFUT(context, request) self.assertEqual(result, 'abc') +class Test_action(unittest.TestCase): + def _makeOne(self, **kw): + from pyramid.view import action + return action(**kw) + + def test_call_no_previous__exposed__(self): + inst = self._makeOne(a=1, b=2) + def wrapped(): + """ """ + result = inst(wrapped) + self.failUnless(result is wrapped) + self.assertEqual(result.__exposed__, [{'a':1, 'b':2}]) + + def test_call_with_previous__exposed__(self): + inst = self._makeOne(a=1, b=2) + def wrapped(): + """ """ + wrapped.__exposed__ = [None] + result = inst(wrapped) + self.failUnless(result is wrapped) + self.assertEqual(result.__exposed__, [None, {'a':1, 'b':2}]) + class ExceptionResponse(Exception): status = '404 Not Found' app_iter = ['Not Found'] diff --git a/pyramid/view.py b/pyramid/view.py index 62c37849f..bcd4cd0b7 100644 --- a/pyramid/view.py +++ b/pyramid/view.py @@ -527,4 +527,14 @@ See also :ref:`changing_the_notfound_view`. """ +class action(object): + def __init__(self, **kw): + self.kw = kw + + def __call__(self, wrapped): + if hasattr(wrapped, '__exposed__'): + wrapped.__exposed__.append(self.kw) + else: + wrapped.__exposed__ = [self.kw] + return wrapped -- cgit v1.2.3