diff options
| -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() |
