diff options
| author | Chris McDonough <chrism@plope.com> | 2011-01-02 20:19:57 -0500 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2011-01-02 20:19:57 -0500 |
| commit | 8f2db27ffe8376c313d09e5c3608d326bb4f0e25 (patch) | |
| tree | 0aac7a915306b6efc27ffcd7da0023323abf04aa | |
| parent | 1d9ade4f8bf93dd88f38daba868e7a619919a98e (diff) | |
| download | pyramid-8f2db27ffe8376c313d09e5c3608d326bb4f0e25.tar.gz pyramid-8f2db27ffe8376c313d09e5c3608d326bb4f0e25.tar.bz2 pyramid-8f2db27ffe8376c313d09e5c3608d326bb4f0e25.zip | |
- Allow view callables to specify their preferred view mapper by respecting a
``__view_mapper__`` attribute. This setting can still be overridden by
configuration-specified ``view_mapper`` argument to ``add_view``.
| -rw-r--r-- | pyramid/config.py | 6 | ||||
| -rw-r--r-- | pyramid/tests/test_config.py | 47 |
2 files changed, 51 insertions, 2 deletions
diff --git a/pyramid/config.py b/pyramid/config.py index 78cb13b65..338be2a98 100644 --- a/pyramid/config.py +++ b/pyramid/config.py @@ -2793,9 +2793,11 @@ class ViewDeriver(object): def mapped_view(self, view): mapper = self.kw.get('view_mapper') if mapper is None: - mapper = self.registry.queryUtility(IViewMapperFactory) + mapper = getattr(view, '__view_mapper__', None) if mapper is None: - mapper = DefaultViewMapper + mapper = self.registry.queryUtility(IViewMapperFactory) + if mapper is None: + mapper = DefaultViewMapper mapped_view = mapper(**self.kw)(view) return mapped_view diff --git a/pyramid/tests/test_config.py b/pyramid/tests/test_config.py index 52760d6d7..1632a4e5c 100644 --- a/pyramid/tests/test_config.py +++ b/pyramid/tests/test_config.py @@ -3790,6 +3790,53 @@ class TestViewDeriver(unittest.TestCase): context = testing.DummyResource() self.assertEqual(result(context, request), {'a':'1'}) + def test_with_view_mapper_config_specified(self): + class mapper(object): + def __init__(self, **kw): + self.kw = kw + def __call__(self, view): + def wrapped(context, request): + return 'OK' + return wrapped + def view(context, request): + return 'NOTOK' + deriver = self._makeOne(view_mapper=mapper) + result = deriver(view) + self.failIf(result is view) + self.assertEqual(result(None, None), 'OK') + + def test_with_view_mapper_view_specified(self): + def mapper(**kw): + def inner(view): + def superinner(context, request): + self.assertEqual(request, None) + return 'OK' + return superinner + return inner + def view(context, request): + return 'NOTOK' + view.__view_mapper__ = mapper + deriver = self._makeOne() + result = deriver(view) + self.failIf(result is view) + self.assertEqual(result(None, None), 'OK') + + def test_with_view_mapper_default_mapper_specified(self): + def mapper(**kw): + def inner(view): + def superinner(context, request): + self.assertEqual(request, None) + return 'OK' + return superinner + return inner + self.config.set_view_mapper(mapper) + def view(context, request): + return 'NOTOK' + deriver = self._makeOne() + result = deriver(view) + self.failIf(result is view) + self.assertEqual(result(None, None), 'OK') + class TestDefaultViewMapper(unittest.TestCase): def setUp(self): self.config = testing.setUp() |
