diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-05-21 16:01:58 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-05-21 16:01:58 +0000 |
| commit | 5a11e2ad0828b7c763d0c81211f686a85bc0324c (patch) | |
| tree | 750deaa5086279a1cd0baa28c0d5bdaa17414463 /repoze/bfg/tests/test_zcml.py | |
| parent | 385084582eeff5f2f1a93f3b90c091dc1a4ad50e (diff) | |
| download | pyramid-5a11e2ad0828b7c763d0c81211f686a85bc0324c.tar.gz pyramid-5a11e2ad0828b7c763d0c81211f686a85bc0324c.tar.bz2 pyramid-5a11e2ad0828b7c763d0c81211f686a85bc0324c.zip | |
- Class objects may now be used as view callables (both via ZCML and
via use of the ``bfg_view`` decorator in Python 2.6 as a class
decorator). The calling semantics when using a class as a view
callable is similar to that of using a class as a Zope "browser
view": the class' ``__init__`` must accept two positional parameters
(conventionally named ``context``, and ``request``). The resulting
instance must be callable (it must have a ``__call__`` method).
When called, the instance should return a response. For example::
from webob import Response
class MyView(object):
def __init__(self, context, request):
self.context = context
self.request = request
def __call__(self):
return Response('hello from %s!' % self.context)
See the "Views" chapter in the documentation and the
``repoze.bfg.view`` API documentation for more information.
Diffstat (limited to 'repoze/bfg/tests/test_zcml.py')
| -rw-r--r-- | repoze/bfg/tests/test_zcml.py | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index c2703f7c1..e44fe1307 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -19,7 +19,7 @@ class TestViewDirective(unittest.TestCase): self.assertRaises(ConfigurationError, self._callFUT, context, 'repoze.view', None) - def test_only_view(self): + def test_view_as_function(self): context = DummyContext() class IFoo: pass @@ -58,6 +58,57 @@ class TestViewDirective(unittest.TestCase): self.assertEqual(regadapt['args'][4], '') self.assertEqual(regadapt['args'][5], None) + def test_view_as_oldstyle_class(self): + context = DummyContext() + class IFoo: + pass + class view: + def __init__(self, context, request): + self.context = context + self.request = request + + def __call__(self): + return self + self._callFUT(context, 'repoze.view', IFoo, view=view) + actions = context.actions + from repoze.bfg.interfaces import IRequest + from repoze.bfg.interfaces import IView + from repoze.bfg.interfaces import IViewPermission + from repoze.bfg.security import ViewPermissionFactory + from repoze.bfg.zcml import handler + + self.assertEqual(len(actions), 2) + + permission = actions[0] + permission_discriminator = ('permission', IFoo, '', IRequest, + IViewPermission) + self.assertEqual(permission['discriminator'], permission_discriminator) + self.assertEqual(permission['callable'], handler) + self.assertEqual(permission['args'][0], 'registerAdapter') + self.failUnless(isinstance(permission['args'][1],ViewPermissionFactory)) + self.assertEqual(permission['args'][1].permission_name, 'repoze.view') + self.assertEqual(permission['args'][2], (IFoo, IRequest)) + self.assertEqual(permission['args'][3], IViewPermission) + self.assertEqual(permission['args'][4], '') + self.assertEqual(permission['args'][5], None) + + regadapt = actions[1] + regadapt_discriminator = ('view', IFoo, '', IRequest, IView) + self.assertEqual(regadapt['discriminator'], regadapt_discriminator) + self.assertEqual(regadapt['callable'], handler) + self.assertEqual(regadapt['args'][0], 'registerAdapter') + wrapper = regadapt['args'][1] + self.assertEqual(wrapper.__module__, view.__module__) + self.assertEqual(wrapper.__name__, view.__name__) + self.assertEqual(wrapper.__doc__, view.__doc__) + result = wrapper(None, None) + self.assertEqual(result.context, None) + self.assertEqual(result.request, None) + self.assertEqual(regadapt['args'][2], (IFoo, IRequest)) + self.assertEqual(regadapt['args'][3], IView) + self.assertEqual(regadapt['args'][4], '') + self.assertEqual(regadapt['args'][5], None) + def test_request_type(self): context = DummyContext() class IFoo: |
