diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-05-16 20:59:41 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-05-16 20:59:41 +0000 |
| commit | def444c2c310c8cb117e0c5181bf74f5beed064c (patch) | |
| tree | 7415757b8463512dd62923c6c7b400cee0eb8be8 /repoze/bfg/urldispatch.py | |
| parent | 090f6b77dcc8cd738caba4dbb3885ccb6ddb3d41 (diff) | |
| download | pyramid-def444c2c310c8cb117e0c5181bf74f5beed064c.tar.gz pyramid-def444c2c310c8cb117e0c5181bf74f5beed064c.tar.bz2 pyramid-def444c2c310c8cb117e0c5181bf74f5beed064c.zip | |
Speed up common case (use default factory).
Diffstat (limited to 'repoze/bfg/urldispatch.py')
| -rw-r--r-- | repoze/bfg/urldispatch.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/repoze/bfg/urldispatch.py b/repoze/bfg/urldispatch.py index 2ad482c89..4c3bc2ed3 100644 --- a/repoze/bfg/urldispatch.py +++ b/repoze/bfg/urldispatch.py @@ -1,8 +1,11 @@ import re +from zope.component import queryUtility + +from zope.deprecation import deprecated + from zope.interface import implements from zope.interface import alsoProvides - from zope.interface import classProvides from routes import Mapper @@ -12,11 +15,10 @@ from routes import url_for from repoze.bfg.interfaces import IContextNotFound from repoze.bfg.interfaces import IContextURL from repoze.bfg.interfaces import IRoutesContext +from repoze.bfg.interfaces import IRoutesContextFactory from repoze.bfg.interfaces import ITraverser from repoze.bfg.interfaces import ITraverserFactory -from zope.deprecation import deprecated - _marker = () class DefaultRoutesContext(object): @@ -53,6 +55,7 @@ class RoutesRootFactory(Mapper): present as Routes match arguments dictionary keys. If no Routes route matches the current request, the 'fallback' get_root is called.""" + decorate_context = True def __init__(self, get_root=None, **kw): self.get_root = get_root kw['controller_scan'] = None @@ -61,6 +64,11 @@ class RoutesRootFactory(Mapper): kw['explicit'] = True Mapper.__init__(self, **kw) self._regs_created = False + context_factory = queryUtility(IRoutesContextFactory, + default=DefaultRoutesContext) + if IRoutesContext.implementedBy(context_factory): + self.decorate_context = False + self.default_context_factory = context_factory def has_routes(self): return bool(self.matchlist) @@ -103,8 +111,9 @@ class RoutesRootFactory(Mapper): kw[k] = v factory = route._factory if factory is None: - factory = DefaultRoutesContext - context = factory(**kw) + context = self.default_context_factory(**kw) + if self.decorate_context: + alsoProvides(context, IRoutesContext) else: context = factory(**kw) alsoProvides(context, IRoutesContext) |
