summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt4
-rw-r--r--repoze/bfg/tests/test_urldispatch.py29
-rw-r--r--repoze/bfg/tests/test_zcml.py16
-rw-r--r--repoze/bfg/urldispatch.py11
-rw-r--r--repoze/bfg/zcml.py6
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(