diff options
| author | Chris McDonough <chrism@agendaless.com> | 2010-09-14 12:11:44 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2010-09-14 12:11:44 +0000 |
| commit | 70f1cda02f9acccf7ee1c8ad1a7ade36fba10dba (patch) | |
| tree | af2236494ee485c40575bb728d5755de1d579ace /repoze/bfg/url.py | |
| parent | 7edbac105bdde5cf27ea397343c748ec24b11bd8 (diff) | |
| download | pyramid-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.py | 13 |
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) |
