summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests/test_view.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-10-21 21:48:19 +0000
committerChris McDonough <chrism@agendaless.com>2009-10-21 21:48:19 +0000
commitb2f9291bfb55f9305f59b8ba0e3fe04ff6f31cc6 (patch)
tree5afe13809e933cc16ea5e2cca7908a0b6c0caab2 /repoze/bfg/tests/test_view.py
parentb06b260b83bfc2f40105c6e730f5e7e8eccd61d9 (diff)
downloadpyramid-b2f9291bfb55f9305f59b8ba0e3fe04ff6f31cc6.tar.gz
pyramid-b2f9291bfb55f9305f59b8ba0e3fe04ff6f31cc6.tar.bz2
pyramid-b2f9291bfb55f9305f59b8ba0e3fe04ff6f31cc6.zip
- 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.
Diffstat (limited to 'repoze/bfg/tests/test_view.py')
-rw-r--r--repoze/bfg/tests/test_view.py19
1 files changed, 16 insertions, 3 deletions
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