summaryrefslogtreecommitdiff
path: root/repoze/bfg/urldispatch.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-05-16 20:59:41 +0000
committerChris McDonough <chrism@agendaless.com>2009-05-16 20:59:41 +0000
commitdef444c2c310c8cb117e0c5181bf74f5beed064c (patch)
tree7415757b8463512dd62923c6c7b400cee0eb8be8 /repoze/bfg/urldispatch.py
parent090f6b77dcc8cd738caba4dbb3885ccb6ddb3d41 (diff)
downloadpyramid-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.py19
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)