diff options
| author | Bert JW Regeer <bertjw@regeer.org> | 2013-09-08 15:12:51 -0600 |
|---|---|---|
| committer | Bert JW Regeer <bertjw@regeer.org> | 2013-09-08 15:12:51 -0600 |
| commit | b098c223a3574988d6e8855a6c4764587a46b067 (patch) | |
| tree | b2b42dfbc2d68fc6c7e708fcf4ffab122f0f5877 | |
| parent | e7575491cb6d63e887dcdc40c2d86bb30ff775ca (diff) | |
| download | pyramid-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__.py | 2 | ||||
| -rw-r--r-- | pyramid/tests/test_config/test_util.py | 46 |
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 - + |
