summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pyramid/config.py6
-rw-r--r--pyramid/tests/test_config.py47
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()