diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-10-29 23:07:48 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-10-29 23:07:48 +0000 |
| commit | 1646770c4eee27f37e53dcb50f8a271d5c278abf (patch) | |
| tree | 9021b72a986148b17b4eb74c66ccacbe00be2b55 /repoze/bfg/request.py | |
| parent | d8c776df0ff6a194be696c95d921caf2084194c6 (diff) | |
| download | pyramid-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.py | 16 |
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) |
