summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert JW Regeer <bertjw@regeer.org>2013-09-08 15:12:51 -0600
committerBert JW Regeer <bertjw@regeer.org>2013-09-08 15:12:51 -0600
commitb098c223a3574988d6e8855a6c4764587a46b067 (patch)
treeb2b42dfbc2d68fc6c7e708fcf4ffab122f0f5877
parente7575491cb6d63e887dcdc40c2d86bb30ff775ca (diff)
downloadpyramid-b098c223a3574988d6e8855a6c4764587a46b067.tar.gz
pyramid-b098c223a3574988d6e8855a6c4764587a46b067.tar.bz2
pyramid-b098c223a3574988d6e8855a6c4764587a46b067.zip
Small change to allow predicates to be Python Dotted Names
This allows a {view,route,subscriber} predicate factory to be named as a python dotted name that is then automatically resolved. Includes tests.
-rw-r--r--pyramid/config/__init__.py2
-rw-r--r--pyramid/tests/test_config/test_util.py46
2 files changed, 40 insertions, 8 deletions
diff --git a/pyramid/config/__init__.py b/pyramid/config/__init__.py
index d4557d6b1..f1f24fbc1 100644
--- a/pyramid/config/__init__.py
+++ b/pyramid/config/__init__.py
@@ -512,7 +512,7 @@ class Configurator(
'%s predicate named %s' % (type, name),
'%s predicate' % type)
intr['name'] = name
- intr['factory'] = factory
+ intr['factory'] = self.maybe_dotted(factory)
intr['weighs_more_than'] = weighs_more_than
intr['weighs_less_than'] = weighs_less_than
def register():
diff --git a/pyramid/tests/test_config/test_util.py b/pyramid/tests/test_config/test_util.py
index f6cd414fb..939a51216 100644
--- a/pyramid/tests/test_config/test_util.py
+++ b/pyramid/tests/test_config/test_util.py
@@ -380,8 +380,8 @@ class TestPredicateList(unittest.TestCase):
self.assertEqual(predicates[2].text(), '!header header')
self.assertEqual(predicates[1](None, request), True)
self.assertEqual(predicates[2](None, request), True)
-
-
+
+
class Test_takes_one_arg(unittest.TestCase):
def _callFUT(self, view, attr=None, argname=None):
from pyramid.config.util import takes_one_arg
@@ -560,7 +560,7 @@ class Test_takes_one_arg(unittest.TestCase):
class Foo: pass
foo = Foo()
self.assertFalse(self._callFUT(foo))
-
+
def test_method_onearg_named_request(self):
class Foo:
def method(self, request):
@@ -586,11 +586,43 @@ class TestNotted(unittest.TestCase):
self.assertEqual(inst.text(), '')
self.assertEqual(inst.phash(), '')
self.assertEqual(inst(None, None), True)
-
+
+class TestDotted(unittest.TestCase):
+
+
+ def _makeOne(self, *arg, **kw):
+ self.action_called = False
+ from pyramid.config import Configurator
+ config = Configurator(*arg, **kw)
+ return config
+
+ def test_it_without_dots(self):
+ config = self._makeOne()
+
+ def _fakeAction(discriminator, callable=None, args=(), kw=None, order=0, introspectables=(), **extra):
+ self.assertEqual(len(introspectables), 1)
+ self.assertEqual(introspectables[0]['name'], 'testing')
+ self.assertEqual(introspectables[0]['factory'], DummyPredicate)
+
+ config.action = _fakeAction
+ config._add_predicate('route', 'testing', DummyPredicate)
+
+ def test_it_with_dots(self):
+ config = self._makeOne()
+
+ def _fakeAction(discriminator, callable=None, args=(), kw=None, order=0, introspectables=(), **extra):
+ self.assertEqual(len(introspectables), 1)
+ self.assertEqual(introspectables[0]['name'], 'testing')
+ self.assertEqual(introspectables[0]['factory'], DummyPredicate)
+
+ config.action = _fakeAction
+ config._add_predicate('route', 'testing', 'pyramid.tests.test_config.test_util.DummyPredicate')
+
+
class DummyPredicate(object):
def __init__(self, result):
self.result = result
-
+
def text(self):
return self.result
@@ -598,7 +630,7 @@ class DummyPredicate(object):
def __call__(self, context, request):
return True
-
+
class DummyCustomPredicate(object):
def __init__(self):
self.__text__ = 'custom predicate'
@@ -626,4 +658,4 @@ class DummyRequest:
class DummyConfigurator(object):
def maybe_dotted(self, thing):
return thing
-
+