summaryrefslogtreecommitdiff
path: root/repoze
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-06-18 06:35:21 +0000
committerChris McDonough <chrism@agendaless.com>2009-06-18 06:35:21 +0000
commitf8dbdee6167b3b4ab1ee4b2138a3e04e47a7c9df (patch)
tree2c03802fe9b3ab56d8e8bd067e437d3f29b92006 /repoze
parent95a9cfc326f0fcb3bdfce1efe5c25748a7f8f077 (diff)
downloadpyramid-f8dbdee6167b3b4ab1ee4b2138a3e04e47a7c9df.tar.gz
pyramid-f8dbdee6167b3b4ab1ee4b2138a3e04e47a7c9df.tar.bz2
pyramid-f8dbdee6167b3b4ab1ee4b2138a3e04e47a7c9df.zip
- The matchdict related to the matching of a Routes route is available
on the request as the ``matchdict`` attribute: ``request.matchdict``. If no route matched, this attribute will be None.
Diffstat (limited to 'repoze')
-rw-r--r--repoze/bfg/tests/test_traversal.py11
-rw-r--r--repoze/bfg/traversal.py12
2 files changed, 19 insertions, 4 deletions
diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py
index 00b3cc99f..a36cbb1dc 100644
--- a/repoze/bfg/tests/test_traversal.py
+++ b/repoze/bfg/tests/test_traversal.py
@@ -90,6 +90,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [])
self.assertEqual(result['virtual_root'], policy.root)
self.assertEqual(result['virtual_root_path'], [])
+ self.assertEqual(result['matchdict'], None)
def test_call_pathel_with_no_getitem(self):
policy = self._makeOne(None)
@@ -101,6 +102,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [])
self.assertEqual(result['virtual_root'], policy.root)
self.assertEqual(result['virtual_root_path'], [])
+ self.assertEqual(result['matchdict'], None)
def test_call_withconn_getitem_emptypath_nosubpath(self):
root = DummyContext()
@@ -113,6 +115,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [])
self.assertEqual(result['virtual_root'], root)
self.assertEqual(result['virtual_root_path'], [])
+ self.assertEqual(result['matchdict'], None)
def test_call_withconn_getitem_withpath_nosubpath(self):
foo = DummyContext()
@@ -126,6 +129,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [u'foo'])
self.assertEqual(result['virtual_root'], root)
self.assertEqual(result['virtual_root_path'], [])
+ self.assertEqual(result['matchdict'], None)
def test_call_withconn_getitem_withpath_withsubpath(self):
foo = DummyContext()
@@ -139,6 +143,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [u'foo'])
self.assertEqual(result['virtual_root'], root)
self.assertEqual(result['virtual_root_path'], [])
+ self.assertEqual(result['matchdict'], None)
def test_call_with_explicit_viewname(self):
foo = DummyContext()
@@ -152,6 +157,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [])
self.assertEqual(result['virtual_root'], root)
self.assertEqual(result['virtual_root_path'], [])
+ self.assertEqual(result['matchdict'], None)
def test_call_with_vh_root(self):
environ = self._getEnviron(PATH_INFO='/baz',
@@ -172,6 +178,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [u'foo', u'bar', u'baz'])
self.assertEqual(result['virtual_root'], bar)
self.assertEqual(result['virtual_root_path'], [u'foo', u'bar'])
+ self.assertEqual(result['matchdict'], None)
def test_non_utf8_path_segment_unicode_path_segments_fails(self):
foo = DummyContext()
@@ -201,6 +208,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [])
self.assertEqual(result['virtual_root'], model)
self.assertEqual(result['virtual_root_path'], [])
+ self.assertEqual(result['matchdict'], {})
def test_withroute_with_subpath(self):
model = DummyContext()
@@ -213,6 +221,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [])
self.assertEqual(result['virtual_root'], model)
self.assertEqual(result['virtual_root_path'], [])
+ self.assertEqual(result['matchdict'], {'subpath':'/a/b/c'})
def test_withroute_with_path_info(self):
model = DummyContext()
@@ -228,6 +237,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['virtual_root_path'], [])
self.assertEqual(environ['PATH_INFO'], '/foo/bar')
self.assertEqual(environ['SCRIPT_NAME'], '/a/b')
+ self.assertEqual(result['matchdict'], {'path_info':'foo/bar'})
def test_withroute_with_path_info_PATH_INFO_w_extra_slash(self):
model = DummyContext()
@@ -249,6 +259,7 @@ class ModelGraphTraverserTests(unittest.TestCase):
self.assertEqual(result['traversed'], [])
self.assertEqual(result['virtual_root'], model)
self.assertEqual(result['virtual_root_path'], [])
+ self.assertEqual(result['matchdict'], {'traverse':'foo/bar'})
class FindInterfaceTests(unittest.TestCase):
def _callFUT(self, context, iface):
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index 40f65901f..63fd71e74 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -493,6 +493,7 @@ class ModelGraphTraverser(object):
self.root = root
def __call__(self, environ, _marker=_marker):
+ matchdict = None
if 'bfg.routes.matchdict' in environ:
# this request matched a Routes route
matchdict = environ['bfg.routes.matchdict']
@@ -541,19 +542,22 @@ class ModelGraphTraverser(object):
if segment[:2] =='@@':
return dict(context=ob, view_name=segment[2:], subpath=path[i:],
traversed=traversed, virtual_root=vroot,
- virtual_root_path=vroot_path, root=self.root)
+ virtual_root_path=vroot_path, root=self.root,
+ matchdict=matchdict)
try:
getitem = ob.__getitem__
except AttributeError:
return dict(context=ob, view_name=segment, subpath=path[i:],
traversed=traversed, virtual_root=vroot,
- virtual_root_path=vroot_path, root=self.root)
+ virtual_root_path=vroot_path, root=self.root,
+ matchdict=matchdict)
try:
next = getitem(segment)
except KeyError:
return dict(context=ob, view_name=segment, subpath=path[i:],
traversed=traversed, virtual_root=vroot,
- virtual_root_path=vroot_path, root=self.root)
+ virtual_root_path=vroot_path, root=self.root,
+ matchdict=matchdict)
if vroot_idx == i-1:
vroot = ob
traversed.append(segment)
@@ -563,7 +567,7 @@ class ModelGraphTraverser(object):
return dict(context=ob, view_name=u'', subpath=subpath,
traversed=traversed, virtual_root=vroot,
virtual_root_path=vroot_path,
- root=self.root)
+ root=self.root, matchdict=matchdict)
class TraversalContextURL(object):
""" The IContextURL adapter used to generate URLs for a context