summaryrefslogtreecommitdiff
path: root/repoze/bfg/url.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2010-09-14 12:11:44 +0000
committerChris McDonough <chrism@agendaless.com>2010-09-14 12:11:44 +0000
commit70f1cda02f9acccf7ee1c8ad1a7ade36fba10dba (patch)
treeaf2236494ee485c40575bb728d5755de1d579ace /repoze/bfg/url.py
parent7edbac105bdde5cf27ea397343c748ec24b11bd8 (diff)
downloadpyramid-70f1cda02f9acccf7ee1c8ad1a7ade36fba10dba.tar.gz
pyramid-70f1cda02f9acccf7ee1c8ad1a7ade36fba10dba.tar.bz2
pyramid-70f1cda02f9acccf7ee1c8ad1a7ade36fba10dba.zip
- The ``add_route`` method of a Configurator now accepts a
``pregenerator`` argument. The pregenerator for the resulting route is called by ``route_url`` in order to adjust the set of arguments passed to it by the user for special purposes, such as Pylons 'subdomain' support. It will influence the URL returned by ``route_url``. See the ``repoze.bfg.interfaces.IRoutePregenerator`` interface for more information.
Diffstat (limited to 'repoze/bfg/url.py')
-rw-r--r--repoze/bfg/url.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/repoze/bfg/url.py b/repoze/bfg/url.py
index 920e82d53..4f501dd7a 100644
--- a/repoze/bfg/url.py
+++ b/repoze/bfg/url.py
@@ -101,12 +101,23 @@ def route_url(route_name, request, *elements, **kw):
This function raises a :exc:`KeyError` if the URL cannot be
generated due to missing replacement names. Extra replacement
names are ignored.
+
+ If the route object which matches the ``route_name`` argument has
+ a :term:`pregenerator`, the ``*elements`` and ``**kw`` arguments
+ arguments passed to this function might be augmented or changed.
"""
try:
reg = request.registry
except AttributeError:
reg = get_current_registry() # b/c
mapper = reg.getUtility(IRoutesMapper)
+ route = mapper.get_route(route_name)
+
+ if route is None:
+ raise KeyError('No such route named %s' % route_name)
+
+ if route.pregenerator:
+ elements, kw = route.pregenerator(request, elements, kw)
anchor = ''
qs = ''
@@ -124,7 +135,7 @@ def route_url(route_name, request, *elements, **kw):
if '_app_url' in kw:
app_url = kw.pop('_app_url')
- path = mapper.generate(route_name, kw) # raises KeyError if generate fails
+ path = route.generate(kw) # raises KeyError if generate fails
if elements:
suffix = _join_elements(elements)