summaryrefslogtreecommitdiff
path: root/repoze/bfg/router.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-01-25 03:33:08 +0000
committerChris McDonough <chrism@agendaless.com>2009-01-25 03:33:08 +0000
commite5cf7dbec2ccda7d2e4d79815ac441acf2ab1061 (patch)
tree789899cd0c8f1e9075ee71145375fd9a2d6fcdd1 /repoze/bfg/router.py
parentde49699ef9eeccc6339f29d2e197d6f26d4904dc (diff)
downloadpyramid-e5cf7dbec2ccda7d2e4d79815ac441acf2ab1061.tar.gz
pyramid-e5cf7dbec2ccda7d2e4d79815ac441acf2ab1061.tar.bz2
pyramid-e5cf7dbec2ccda7d2e4d79815ac441acf2ab1061.zip
Do an end-run around webob.Request.__setitem__ until it gets sped up.
Diffstat (limited to 'repoze/bfg/router.py')
-rw-r--r--repoze/bfg/router.py21
1 files changed, 16 insertions, 5 deletions
diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py
index c7c38e1d1..bc4a8cf7b 100644
--- a/repoze/bfg/router.py
+++ b/repoze/bfg/router.py
@@ -1,4 +1,5 @@
import sys
+from webob import Request as WebObRequest
from zope.component.event import dispatch
@@ -100,11 +101,21 @@ class Router(object):
traverser = registry.getAdapter(root, ITraverserFactory)
context, view_name, subpath = traverser(environ)
- # XXX webob.Request's __setattr__ is slow here: investigate.
- request.root = root
- request.context = context
- request.view_name = view_name
- request.subpath = subpath
+ if isinstance(request, WebObRequest):
+ # webob.Request's __setattr__ (as of 0.9.5 and lower)
+ # is a bottleneck; if we're sure we're using a
+ # webob.Request, go around its back and set stuff into
+ # the environ directly
+ attrs = environ.setdefault('webob.adhoc_attrs', {})
+ attrs['root'] = root
+ attrs['context'] = context
+ attrs['view_name'] = view_name
+ attrs['subpath'] = subpath
+ else:
+ request.root = root
+ request.context = context
+ request.view_name = view_name
+ request.subpath = subpath
security_policy = self.security_policy