summaryrefslogtreecommitdiff
path: root/repoze/bfg/request.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-10-29 23:07:48 +0000
committerChris McDonough <chrism@agendaless.com>2009-10-29 23:07:48 +0000
commit1646770c4eee27f37e53dcb50f8a271d5c278abf (patch)
tree9021b72a986148b17b4eb74c66ccacbe00be2b55 /repoze/bfg/request.py
parentd8c776df0ff6a194be696c95d921caf2084194c6 (diff)
downloadpyramid-1646770c4eee27f37e53dcb50f8a271d5c278abf.tar.gz
pyramid-1646770c4eee27f37e53dcb50f8a271d5c278abf.tar.bz2
pyramid-1646770c4eee27f37e53dcb50f8a271d5c278abf.zip
- The ``repoze.bfg.request.Request`` class, which is a subclass of
``webob.Request`` now defines its own ``__setattr__``, ``__getattr__`` and ``__delattr__`` methods, which override the default WebOb behavior. The default WebOb behavior stores attributes of the request in ``self.environ['webob.adhoc_attrs']``, and retrieves them from that dictionary during a ``__getattr__``. This behavior was undesirable for speed and "expectation" reasons. Now attributes of the ``request`` are stored in ``request.__dict__`` (as you otherwise might expect from an object that did not override these methods). - The router no longer calls ``repoze.bfg.traversal._traverse`` and does its work "inline" (speed).
Diffstat (limited to 'repoze/bfg/request.py')
-rw-r--r--repoze/bfg/request.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/repoze/bfg/request.py b/repoze/bfg/request.py
index 416413c33..e81710ae1 100644
--- a/repoze/bfg/request.py
+++ b/repoze/bfg/request.py
@@ -19,12 +19,19 @@ class Request(WebobRequest):
implements(IRequest)
charset = 'utf-8'
+ # override default WebOb "environ['adhoc_attr']" mutation behavior
+ __getattr__ = object.__getattribute__
+ __setattr__ = object.__setattr__
+ __delattr__ = object.__delattr__
+
def request_factory(environ):
if 'bfg.routes.route' in environ:
route = environ['bfg.routes.route']
factory = queryUtility(IRouteRequest, name=route.name)
if factory is not None:
- return factory(environ)
+ request = factory(environ)
+ request.matchdict = environ['bfg.routes.matchdict']
+ return request
return Request(environ)
def create_route_request_factory(name):
@@ -34,10 +41,15 @@ def create_route_request_factory(name):
implements(iface)
charset = 'utf-8'
+ # override default WebOb "environ['adhoc_attr']" mutation behavior
+ __getattr__ = object.__getattribute__
+ __setattr__ = object.__setattr__
+ __delattr__ = object.__delattr__
+
return RouteRequest
def add_global_response_headers(request, headerlist):
- attrs = request.environ.setdefault('webob.adhoc_attrs', {})
+ attrs = request.__dict__
response_headers = attrs.setdefault('global_response_headers', [])
response_headers.extend(headerlist)