diff options
| -rw-r--r-- | CHANGES.txt | 4 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_urldispatch.py | 29 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_zcml.py | 16 | ||||
| -rw-r--r-- | repoze/bfg/urldispatch.py | 11 | ||||
| -rw-r--r-- | repoze/bfg/zcml.py | 6 |
5 files changed, 40 insertions, 26 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 173204a9c..ee231391f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,10 @@ Next release ============ +- Change urldispatch internals: Route object is now constructed using + a path, a name, and a factory instead of a name, a matcher, a + generator, and a factory. + - Allow ``repoze.bfg.traversal.find_interface`` API to use a class object as the argument to compare against the ``model`` passed in. This means you can now do ``find_interface(model, SomeClass)`` and diff --git a/repoze/bfg/tests/test_urldispatch.py b/repoze/bfg/tests/test_urldispatch.py index 606bd109b..1de3d6f3b 100644 --- a/repoze/bfg/tests/test_urldispatch.py +++ b/repoze/bfg/tests/test_urldispatch.py @@ -10,22 +10,33 @@ class TestRoute(unittest.TestCase): return self._getTargetClass()(*arg) def test_ctor(self): - route = self._makeOne('name', 'matcher', 'generator', 'factory') + route = self._makeOne(':path', 'name', 'factory') + self.assertEqual(route.path, ':path') self.assertEqual(route.name, 'name') - self.assertEqual(route.matcher, 'matcher') - self.assertEqual(route.generator, 'generator') self.assertEqual(route.factory, 'factory') + self.failUnless(route.generator) + self.failUnless(route.matcher) + + def test_ctor_defaults(self): + route = self._makeOne(':path') + self.assertEqual(route.path, ':path') + self.assertEqual(route.name, None) + self.assertEqual(route.factory, None) + self.failUnless(route.generator) + self.failUnless(route.matcher) def test_match(self): def matcher(path): return 123 - route = self._makeOne('name', matcher, 'generator', 'factory') + route = self._makeOne(':path') + route.matcher = matcher self.assertEqual(route.match('whatever'), 123) def test_generate(self): def generator(path): return 123 - route = self._makeOne('name', 'matcher', generator, 'factory') + route = self._makeOne(':path') + route.generator = generator self.assertEqual(route.generate({}), 123) class RoutesRootFactoryTests(unittest.TestCase): @@ -63,7 +74,7 @@ class RoutesRootFactoryTests(unittest.TestCase): def test_route_matches(self): get_root = DummyRootFactory(123) mapper = self._makeOne(get_root) - mapper.connect('foo', 'archives/:action/:article') + mapper.connect('archives/:action/:article', 'foo') environ = self._getEnviron(PATH_INFO='/archives/action1/article1') result = mapper(environ) self.assertEqual(result, 123) @@ -76,7 +87,7 @@ class RoutesRootFactoryTests(unittest.TestCase): def test_root_route_matches(self): root_factory = DummyRootFactory(123) mapper = self._makeOne(root_factory) - mapper.connect('root', '') + mapper.connect('', 'root') environ = self._getEnviron(PATH_INFO='/') result = mapper(environ) self.assertEqual(result, 123) @@ -87,7 +98,7 @@ class RoutesRootFactoryTests(unittest.TestCase): def test_root_route_matches2(self): root_factory = DummyRootFactory(123) mapper = self._makeOne(root_factory) - mapper.connect('root', '/') + mapper.connect('/', 'root') environ = self._getEnviron(PATH_INFO='/') result = mapper(environ) self.assertEqual(result, 123) @@ -98,7 +109,7 @@ class RoutesRootFactoryTests(unittest.TestCase): def test_fallback_to_default_root_factory(self): root_factory = DummyRootFactory(123) mapper = self._makeOne(root_factory) - mapper.connect('wont', 'wont/:be/:found') + mapper.connect('wont/:be/:found', 'wont') environ = self._getEnviron(PATH_INFO='/archives/action1/article1') result = mapper(environ) self.assertEqual(result, 123) diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index 726824152..556f22983 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -874,9 +874,9 @@ class TestConnectRouteFunction(unittest.TestCase): def tearDown(self): cleanUp() - def _callFUT(self, name, path, factory): + def _callFUT(self, path, name, factory): from repoze.bfg.zcml import connect_route - return connect_route(name, path, factory) + return connect_route(path, name, factory) def _registerRoutesMapper(self): from zope.component import getGlobalSiteManager @@ -888,8 +888,8 @@ class TestConnectRouteFunction(unittest.TestCase): def test_defaults(self): mapper = self._registerRoutesMapper() - self._callFUT('name', 'path', 'factory') - self.assertEqual(mapper.connections, [('name', 'path', 'factory')]) + self._callFUT('path', 'name', 'factory') + self.assertEqual(mapper.connections, [('path', 'name', 'factory')]) class TestRouteDirective(unittest.TestCase): def setUp(self): @@ -950,7 +950,7 @@ class TestRouteDirective(unittest.TestCase): self.assertEqual(route_discriminator[1], 'name') self.assertEqual(route_discriminator[2], None) self.assertEqual(route_discriminator[3], None) - self.assertEqual(route_args, ('name', 'path', None)) + self.assertEqual(route_args, ('path', 'name', None)) def test_with_view_and_view_for(self): from zope.component import getUtility @@ -993,7 +993,7 @@ class TestRouteDirective(unittest.TestCase): self.assertEqual(route_discriminator[1], 'name') self.assertEqual(route_discriminator[2], IDummy) self.assertEqual(route_discriminator[3], None) - self.assertEqual(route_args, ('name', 'path', None,)) + self.assertEqual(route_args, ('path', 'name', None,)) def test_without_view(self): from repoze.bfg.zcml import connect_route @@ -1014,7 +1014,7 @@ class TestRouteDirective(unittest.TestCase): self.assertEqual(route_discriminator[1], 'name') self.assertEqual(route_discriminator[2], None) self.assertEqual(route_discriminator[3], None) - self.assertEqual(route_args, ('name','path', None)) + self.assertEqual(route_args, ('path', 'name', None)) def test_with_request_type(self): from repoze.bfg.zcml import connect_route @@ -1035,7 +1035,7 @@ class TestRouteDirective(unittest.TestCase): self.assertEqual(route_discriminator[1], 'name') self.assertEqual(route_discriminator[2], None) self.assertEqual(route_discriminator[3], 'GET') - self.assertEqual(route_args, ('name','path', None)) + self.assertEqual(route_args, ('path', 'name', None)) class TestResourceDirective(unittest.TestCase): def setUp(self): diff --git a/repoze/bfg/urldispatch.py b/repoze/bfg/urldispatch.py index 7a35f76f1..747faace7 100644 --- a/repoze/bfg/urldispatch.py +++ b/repoze/bfg/urldispatch.py @@ -8,10 +8,10 @@ from repoze.bfg.traversal import quote_path_segment _marker = object() class Route(object): - def __init__(self, name, matcher, generator, factory): + def __init__(self, path, name=None, factory=None): + self.path = path + self.matcher, self.generator = _compile_route(path) self.name = name - self.matcher = matcher - self.generator = generator self.factory = factory def match(self, path): @@ -29,9 +29,8 @@ class RoutesRootFactory(object): def has_routes(self): return bool(self.routelist) - def connect(self, name, path, factory=None): - matcher, generator = _compile_route(path) - route = Route(name, matcher, generator, factory) + def connect(self, path, name, factory=None): + route = Route(path, name, factory) self.routelist.append(route) self.routes[name] = route return route diff --git a/repoze/bfg/zcml.py b/repoze/bfg/zcml.py index 0ce38997d..7c1a74ec2 100644 --- a/repoze/bfg/zcml.py +++ b/repoze/bfg/zcml.py @@ -331,12 +331,12 @@ def route(_context, name, path, view=None, view_for=None, permission=None, _context.action( discriminator = ('route', name, view_for, request_type), callable = connect_route, - args = (name, path, factory), + args = (path, name, factory), ) -def connect_route(name, path, factory): +def connect_route(path, name, factory): mapper = getUtility(IRoutesMapper) - mapper.connect(name, path, factory) + mapper.connect(path, name, factory) class IViewDirective(Interface): for_ = GlobalObject( |
