From 2cce431f02a37c119eacfc3dfa94af9fe3305de1 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Sun, 18 Oct 2009 02:27:43 +0000 Subject: - More than one ``@bfg_view`` decorator may now be stacked on top of any number of others. Each invocation of the decorator registers a single view. For instance, the following combination of decorators and a function will register two views:: from repoze.bfg.view import bfg_view @bfg_view(name='edit') @bfg_view(name='change') def edit(context, request): pass This makes it possible to associate more than one view configuration for a single callable without requiring ZCML. --- repoze/bfg/tests/test_view.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'repoze/bfg/tests/test_view.py') diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py index eee5a61bd..7b9597194 100644 --- a/repoze/bfg/tests/test_view.py +++ b/repoze/bfg/tests/test_view.py @@ -376,7 +376,7 @@ class TestBFGViewDecorator(unittest.TestCase): """ docstring """ wrapped = decorator(foo) self.failUnless(wrapped is foo) - settings = wrapped.__bfg_view_settings__ + settings = wrapped.__bfg_view_settings__[0] self.assertEqual(settings['permission'], None) self.assertEqual(settings['for_'], None) self.assertEqual(settings['request_type'], None) @@ -387,7 +387,7 @@ class TestBFGViewDecorator(unittest.TestCase): """ docstring """ wrapped = decorator(foo) self.failUnless(wrapped is foo) - settings = wrapped.__bfg_view_settings__ + settings = wrapped.__bfg_view_settings__[0] self.assertEqual(settings['permission'], None) self.assertEqual(settings['for_'], None) self.assertEqual(settings['request_type'], None) @@ -398,11 +398,26 @@ class TestBFGViewDecorator(unittest.TestCase): """ docstring """ wrapped = decorator(foo) self.failUnless(wrapped is foo) - settings = wrapped.__bfg_view_settings__ + settings = wrapped.__bfg_view_settings__[0] self.assertEqual(settings['permission'], None) self.assertEqual(settings['for_'], None) self.assertEqual(settings['request_type'], None) + def test_stacking(self): + decorator1 = self._makeOne(name='1') + decorator2 = self._makeOne(name='2') + def foo(): + """ docstring """ + wrapped1 = decorator1(foo) + wrapped2 = decorator2(wrapped1) + self.failUnless(wrapped1 is foo) + self.failUnless(wrapped2 is foo) + self.assertEqual(len(wrapped2.__bfg_view_settings__), 2) + settings1 = wrapped2.__bfg_view_settings__[0] + self.assertEqual(settings1['name'], '1') + settings2 = wrapped2.__bfg_view_settings__[1] + self.assertEqual(settings2['name'], '2') + class TestDefaultForbiddenView(unittest.TestCase): def _callFUT(self, context, request): from repoze.bfg.view import default_forbidden_view -- cgit v1.2.3