diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-10-18 05:50:54 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-10-18 05:50:54 +0000 |
| commit | 1dc3907e59995852d5ee0251c1c92a360f03ed35 (patch) | |
| tree | 38da7879503f2b55b995cee89a2aebe6c7d6f076 /repoze/bfg/tests/test_zcml.py | |
| parent | 2cce431f02a37c119eacfc3dfa94af9fe3305de1 (diff) | |
| download | pyramid-1dc3907e59995852d5ee0251c1c92a360f03ed35.tar.gz pyramid-1dc3907e59995852d5ee0251c1c92a360f03ed35.tar.bz2 pyramid-1dc3907e59995852d5ee0251c1c92a360f03ed35.zip | |
- The ``@bfg_view`` decorator can now be used against a class method::
from webob import Response
from repoze.bfg.view import bfg_view
class MyView(object):
def __init__(self, context, request):
self.context = context
self.request = request
@bfg_view(name='hello')
def amethod(self):
return Response('hello from %s!' % self.context)
When the bfg_view decorator is used against a class method, a view
is registered for the *class* (it's a "class view" where the "attr"
happens to be the method they're attached to), so the view class
must have a suitable constructor.
Diffstat (limited to 'repoze/bfg/tests/test_zcml.py')
| -rw-r--r-- | repoze/bfg/tests/test_zcml.py | 94 |
1 files changed, 93 insertions, 1 deletions
diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index 7538072ca..282c27472 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -2388,7 +2388,7 @@ class TestBFGViewGrokker(unittest.TestCase): request_type=IRequest, route_name=None, request_method=None, request_param=None, containment=None, attr=None, renderer=None, - wrapper_viewname=None, xhr=False, header=None, + wrapper=None, xhr=False, header=None, accept=None) obj.__bfg_view_settings__ = [settings] context = DummyContext() @@ -2413,6 +2413,98 @@ class TestBFGViewGrokker(unittest.TestCase): actions = context.actions self.assertEqual(len(actions), 0) +class TestBFGClassGrokker(unittest.TestCase): + def setUp(self): + cleanUp() + + def tearDown(self): + cleanUp() + + def _getTargetClass(self): + from repoze.bfg.zcml import BFGClassGrokker + return BFGClassGrokker + + def _makeOne(self, *arg, **kw): + return self._getTargetClass()(*arg, **kw) + + def test_calls_bfg_view_grokker(self): + from zope.component import getSiteManager + from repoze.bfg.interfaces import IRequest + from repoze.bfg.interfaces import IView + from zope.interface import Interface + class obj: + def __init__(self, context, request): + pass + def __call__(self): + return 'OK' + settings = dict(permission='foo', for_=Interface, name='foo.html', + request_type=IRequest, route_name=None, + request_method=None, request_param=None, + containment=None, attr=None, renderer=None, + wrapper=None, xhr=False, header=None, + accept=None) + obj.__bfg_view_settings__ = [settings] + grokker = self._makeOne() + context = DummyContext() + result = grokker.grok('name', obj, context=context) + self.assertEqual(result, True) + actions = context.actions + self.assertEqual(len(actions), 1) + register = actions[0]['callable'] + register() + sm = getSiteManager() + wrapped = sm.adapters.lookup((Interface, IRequest), IView, + name='foo.html') + self.assertEqual(wrapped(None, None), 'OK') + + def test_it(self): + from repoze.bfg.interfaces import IRequest + from zope.component import getSiteManager + from zope.interface import Interface + from repoze.bfg.interfaces import IView + class base(object): + def basemethod(self): + """ """ + basemethod.__bfg_view_settings__ = [ + dict(permission=None, for_=Interface, name='basemethod', + request_type=IRequest, route_name=None, + request_method=None, request_param=None, + containment=None, attr=None, renderer=None, + wrapper=None, xhr=False, header=None, + accept=None) + ] + + class obj(base): + def __init__(self, context, request): + pass + def foo(self): + return 'OK' + foo.__bfg_view_settings__ = [ + dict(permission=None, for_=Interface, name='foo', + request_type=IRequest, route_name=None, + request_method=None, request_param=None, + containment=None, attr=None, renderer=None, + wrapper=None, xhr=False, header=None, + accept=None) + ] + + grokker = self._makeOne() + context = DummyContext() + result = grokker.grok('name', obj, context=context) + self.assertEqual(result, True) + actions = context.actions + self.assertEqual(len(actions), 1) + register = actions[0]['callable'] + register() + sm = getSiteManager() + wrapped = sm.adapters.lookup((Interface, IRequest), IView, + name='foo') + self.assertEqual(wrapped(None, None), 'OK') + wrapped = sm.adapters.lookup((Interface, IRequest), IView, + name='basemethod') + # base methods not grokked + self.assertEqual(wrapped, None) + class TestZCMLScanDirective(unittest.TestCase): def setUp(self): cleanUp() |
