From b2f9291bfb55f9305f59b8ba0e3fe04ff6f31cc6 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Wed, 21 Oct 2009 21:48:19 +0000 Subject: - Change how ``bfg_view`` decorator works when used as a class method decorator. In 1.1a7, it actually tried to grope every class in scanned package at startup time looking for methods, which led to some strange symptoms (e.g. ``AttributeError: object has no attribute __provides__``). Now, instead of groping methods at startup time, we just cause the ``bfg_view`` decorator itself to populate its class' __dict__ when its used inside a class as a method decorator. This is essentially a reversion back to 1.1a6 "grokking" behavior plus some special magic for using the ``bfg_view`` decorator as method decorator inside the ``bfg_view`` class itself. --- repoze/bfg/tests/test_view.py | 19 ++++++++++++++++--- 1 file changed, 16 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 7b9597194..bbef24359 100644 --- a/repoze/bfg/tests/test_view.py +++ b/repoze/bfg/tests/test_view.py @@ -412,12 +412,25 @@ class TestBFGViewDecorator(unittest.TestCase): 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(len(foo.__bfg_view_settings__), 2) + settings1 = foo.__bfg_view_settings__[0] self.assertEqual(settings1['name'], '1') - settings2 = wrapped2.__bfg_view_settings__[1] + settings2 = foo.__bfg_view_settings__[1] self.assertEqual(settings2['name'], '2') + def test_call_as_method(self): + decorator = self._makeOne() + def foo(self): pass + def bar(self): pass + class foo(object): + """ docstring """ + foomethod = decorator(foo) + barmethod = decorator(bar) + settings = foo.__bfg_view_settings__ + self.assertEqual(len(settings), 2) + self.assertEqual(settings[0]['attr'], 'foo') + self.assertEqual(settings[1]['attr'], 'bar') + class TestDefaultForbiddenView(unittest.TestCase): def _callFUT(self, context, request): from repoze.bfg.view import default_forbidden_view -- cgit v1.2.3