summaryrefslogtreecommitdiff
path: root/repoze/bfg/urldispatch.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2010-06-30 02:47:16 +0000
committerChris McDonough <chrism@agendaless.com>2010-06-30 02:47:16 +0000
commit44bc118a61e2e9d93a65b8edd5be9118fb478741 (patch)
tree2ecc1bf62e7a1cd06ac303228c9f6f7be6d3caa2 /repoze/bfg/urldispatch.py
parentfc80bdfeff567a16304721d5af3b80a38121a44d (diff)
downloadpyramid-44bc118a61e2e9d93a65b8edd5be9118fb478741.tar.gz
pyramid-44bc118a61e2e9d93a65b8edd5be9118fb478741.tar.bz2
pyramid-44bc118a61e2e9d93a65b8edd5be9118fb478741.zip
- In earlier versions, a custom route predicate associated with a url
dispatch route (each of the predicate functions fed to the ``custom_predicates`` argument of ``repoze.bfg.configuration.Configurator.add_route``) has always required a 2-positional argument signature, e.g. ``(context, request)``. Before this release, the ``context`` argument was always ``None``. As of this release, the first argument passed to a predicate is now a dictionary conventionally named ``info`` consisting of ``match``, ``route``, and ``mapper``. ``match`` is a dictionary: it represents the arguments matched in the URL by the route. ``route`` is an object representing the route that matched. ``mapper`` is the url dispatch route mapper object. This is useful when predicates need access to the route match. For example:: def any_of(segment_name, *args): def predicate(info, request): if info['match'][segment_name] in args: return True num_one_two_or_three = any_of('num, 'one', 'two', 'three') add_route('/:num', custom_predicates=(num_one_two_or_three,))
Diffstat (limited to 'repoze/bfg/urldispatch.py')
-rw-r--r--repoze/bfg/urldispatch.py5
1 files changed, 3 insertions, 2 deletions
diff --git a/repoze/bfg/urldispatch.py b/repoze/bfg/urldispatch.py
index becde3ea2..458f1a7a5 100644
--- a/repoze/bfg/urldispatch.py
+++ b/repoze/bfg/urldispatch.py
@@ -51,9 +51,10 @@ class RoutesMapper(object):
match = route.match(path)
if match is not None:
preds = route.predicates
- if preds and not all((p(None, request) for p in preds)):
+ info = {'route':route, 'match':match}
+ if preds and not all((p(info, request) for p in preds)):
continue
- return {'route':route, 'match':match}
+ return info
return {'route':None, 'match':None}