summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2016-03-14 22:33:33 -0500
committerMichael Merickel <michael@merickel.org>2016-03-14 22:33:33 -0500
commitcbf686706bcc8e471977185a6b27678b924f4dc2 (patch)
tree0a9f7aa16710688eb13659f9c7333098e0134cf9
parentfdd1f8352fc341bc60e0b7d32dadd2b4109a2b41 (diff)
downloadpyramid-cbf686706bcc8e471977185a6b27678b924f4dc2.tar.gz
pyramid-cbf686706bcc8e471977185a6b27678b924f4dc2.tar.bz2
pyramid-cbf686706bcc8e471977185a6b27678b924f4dc2.zip
swap the order of view deriver arguments so that the name is implicit
-rw-r--r--pyramid/config/views.py14
-rw-r--r--pyramid/tests/test_config/test_derivations.py47
2 files changed, 37 insertions, 24 deletions
diff --git a/pyramid/config/views.py b/pyramid/config/views.py
index b762a711c..5455c29df 100644
--- a/pyramid/config/views.py
+++ b/pyramid/config/views.py
@@ -1091,11 +1091,15 @@ class ViewsConfiguratorMixin(object):
self.add_view_predicate(name, factory)
@action_method
- def add_view_deriver(self, name, deriver, under=None, over=None):
+ def add_view_deriver(self, deriver, name=None, under=None, over=None):
+ deriver = self.maybe_dotted(deriver)
+
if under is None and over is None:
over = 'decorated_view'
- deriver = self.maybe_dotted(deriver)
+ if name is None:
+ name = deriver.__name__
+
discriminator = ('view deriver', name)
intr = self.introspectable(
'view derivers',
@@ -1113,7 +1117,7 @@ class ViewsConfiguratorMixin(object):
self.registry.registerUtility(derivers, IViewDerivers)
derivers.add(name, deriver, after=under, before=over)
self.action(discriminator, register, introspectables=(intr,),
- order=PHASE1_CONFIG) # must be registered early
+ order=PHASE1_CONFIG) # must be registered before add_view
def add_default_view_derivers(self):
d = pyramid.config.derivations
@@ -1126,12 +1130,12 @@ class ViewsConfiguratorMixin(object):
]
after = pyramid.util.FIRST
for name, deriver in derivers:
- self.add_view_deriver(name, deriver, under=after)
+ self.add_view_deriver(deriver, name=name, under=after)
after = name
self.add_view_deriver(
- 'rendered_view',
d.rendered_view,
+ name='rendered_view',
under=pyramid.util.FIRST,
over='decorated_view',
)
diff --git a/pyramid/tests/test_config/test_derivations.py b/pyramid/tests/test_config/test_derivations.py
index 7202c5bb6..e1b6c8bc9 100644
--- a/pyramid/tests/test_config/test_derivations.py
+++ b/pyramid/tests/test_config/test_derivations.py
@@ -1102,9 +1102,9 @@ class TestDerivationOrder(unittest.TestCase):
def test_right_order_user_sorted(self):
from pyramid.interfaces import IViewDerivers
- self.config.add_view_deriver('deriv1', None)
- self.config.add_view_deriver('deriv2', None, over='deriv1')
- self.config.add_view_deriver('deriv3', None, under='deriv2')
+ self.config.add_view_deriver(None, 'deriv1')
+ self.config.add_view_deriver(None, 'deriv2', over='deriv1')
+ self.config.add_view_deriver(None, 'deriv3', under='deriv2')
derivers = self.config.registry.getUtility(IViewDerivers)
derivers_sorted = derivers.sorted()
@@ -1124,9 +1124,9 @@ class TestDerivationOrder(unittest.TestCase):
def test_right_order_implicit(self):
from pyramid.interfaces import IViewDerivers
- self.config.add_view_deriver('deriv1', None)
- self.config.add_view_deriver('deriv2', None)
- self.config.add_view_deriver('deriv3', None)
+ self.config.add_view_deriver(None, 'deriv1')
+ self.config.add_view_deriver(None, 'deriv2')
+ self.config.add_view_deriver(None, 'deriv3')
derivers = self.config.registry.getUtility(IViewDerivers)
derivers_sorted = derivers.sorted()
@@ -1146,7 +1146,7 @@ class TestDerivationOrder(unittest.TestCase):
def test_right_order_over_rendered_view(self):
from pyramid.interfaces import IViewDerivers
- self.config.add_view_deriver('deriv1', None, over='rendered_view')
+ self.config.add_view_deriver(None, 'deriv1', over='rendered_view')
derivers = self.config.registry.getUtility(IViewDerivers)
derivers_sorted = derivers.sorted()
@@ -1164,9 +1164,9 @@ class TestDerivationOrder(unittest.TestCase):
def test_right_order_over_rendered_view_others(self):
from pyramid.interfaces import IViewDerivers
- self.config.add_view_deriver('deriv1', None, over='rendered_view')
- self.config.add_view_deriver('deriv2', None)
- self.config.add_view_deriver('deriv3', None)
+ self.config.add_view_deriver(None, 'deriv1', over='rendered_view')
+ self.config.add_view_deriver(None, 'deriv2')
+ self.config.add_view_deriver(None, 'deriv3')
derivers = self.config.registry.getUtility(IViewDerivers)
derivers_sorted = derivers.sorted()
@@ -1204,7 +1204,7 @@ class TestAddDeriver(unittest.TestCase):
result = self.config._derive_view(view)
self.assertFalse(response.deriv)
- self.config.add_view_deriver('test_deriv', deriv)
+ self.config.add_view_deriver(deriv, 'test_deriv')
result = self.config._derive_view(view)
self.assertTrue(response.deriv)
@@ -1225,14 +1225,14 @@ class TestAddDeriver(unittest.TestCase):
return view
view1 = AView()
- self.config.add_view_deriver('test_deriv', deriv1)
+ self.config.add_view_deriver(deriv1, 'test_deriv')
result = self.config._derive_view(view1)
self.assertTrue(flags.get('deriv1'))
self.assertFalse(flags.get('deriv2'))
flags.clear()
view2 = AView()
- self.config.add_view_deriver('test_deriv', deriv2)
+ self.config.add_view_deriver(deriv2, 'test_deriv')
result = self.config._derive_view(view2)
self.assertFalse(flags.get('deriv1'))
self.assertTrue(flags.get('deriv2'))
@@ -1254,12 +1254,21 @@ class TestAddDeriver(unittest.TestCase):
response.deriv.append('deriv3')
return view
- self.config.add_view_deriver('deriv1', deriv1)
- self.config.add_view_deriver('deriv2', deriv2, over='deriv1')
- self.config.add_view_deriver('deriv3', deriv3, under='deriv2')
+ self.config.add_view_deriver(deriv1, 'deriv1')
+ self.config.add_view_deriver(deriv2, 'deriv2', over='deriv1')
+ self.config.add_view_deriver(deriv3, 'deriv3', under='deriv2')
result = self.config._derive_view(view)
self.assertEqual(response.deriv, ['deriv2', 'deriv3', 'deriv1'])
+ def test_add_deriver_without_name(self):
+ from pyramid.interfaces import IViewDerivers
+
+ derivers = self.config.registry.getUtility(IViewDerivers)
+ self.assertFalse('deriv' in derivers.names)
+ def deriv(view, info): pass
+ self.config.add_view_deriver(deriv)
+ self.assertTrue('deriv' in derivers.names)
+
class TestDeriverIntegration(unittest.TestCase):
def setUp(self):
@@ -1305,8 +1314,8 @@ class TestDeriverIntegration(unittest.TestCase):
return view
deriv2.options = ('deriv2',)
- self.config.add_view_deriver('deriv1', deriv1)
- self.config.add_view_deriver('deriv2', deriv2)
+ self.config.add_view_deriver(deriv1, 'deriv1')
+ self.config.add_view_deriver(deriv2, 'deriv2')
self.config.add_view(view, deriv1='test1', deriv2='test2')
wrapper = self._getViewCallable(self.config)
@@ -1318,7 +1327,7 @@ class TestDeriverIntegration(unittest.TestCase):
def test_unexpected_view_options(self):
from pyramid.exceptions import ConfigurationError
def deriv1(view, info): pass
- self.config.add_view_deriver('deriv1', deriv1)
+ self.config.add_view_deriver(deriv1, 'deriv1')
self.assertRaises(
ConfigurationError,
lambda: self.config.add_view(lambda r: {}, deriv1='test1'))