summaryrefslogtreecommitdiff
path: root/repoze/bfg/request.py
diff options
context:
space:
mode:
Diffstat (limited to 'repoze/bfg/request.py')
-rw-r--r--repoze/bfg/request.py80
1 files changed, 57 insertions, 23 deletions
diff --git a/repoze/bfg/request.py b/repoze/bfg/request.py
index e81710ae1..751d1fba1 100644
--- a/repoze/bfg/request.py
+++ b/repoze/bfg/request.py
@@ -24,29 +24,63 @@ class Request(WebobRequest):
__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:
- request = factory(environ)
- request.matchdict = environ['bfg.routes.matchdict']
- return request
- return Request(environ)
-
-def create_route_request_factory(name):
- iface = InterfaceClass('%s_IRequest' % name, (IRouteRequest,))
-
- class RouteRequest(WebobRequest):
- implements(iface)
- charset = 'utf-8'
-
- # override default WebOb "environ['adhoc_attr']" mutation behavior
- __getattr__ = object.__getattribute__
- __setattr__ = object.__setattr__
- __delattr__ = object.__delattr__
-
- return RouteRequest
+ # b/c dict interface for "root factory" code that expects a bare
+ # environ. Explicitly omitted dict methods: clear (unnecessary),
+ # copy (implemented by WebOb), fromkeys (unnecessary)
+
+ def __contains__(self, k):
+ return self.environ.__contains__(k)
+
+ def __delitem__(self, k):
+ return self.environ.__delitem__(k)
+
+ def __getitem__(self, k):
+ return self.environ.__getitem__(k)
+
+ def __iter__(self):
+ return iter(self.environ)
+
+ def __setitem__(self, k, v):
+ self.environ[k] = v
+
+ def get(self, k, default=None):
+ return self.environ.get(k, default)
+
+ def has_key(self, k):
+ return self.environ.has_key(k)
+
+ def items(self):
+ return self.environ.items()
+
+ def iteritems(self):
+ return self.environ.iteritems()
+
+ def iterkeys(self):
+ return self.environ.iterkeys()
+
+ def itervalues(self):
+ return self.environ.itervalues()
+
+ def keys(self):
+ return self.environ.keys()
+
+ def pop(self, k):
+ return self.environ.pop(k)
+
+ def popitem(self):
+ return self.environ.popitem()
+
+ def setdefault(self, v, default):
+ return self.environ.setdefault(v, default)
+
+ def update(self, v, **kw):
+ return self.environ.update(v, **kw)
+
+ def values(self):
+ return self.environ.values()
+
+def route_request_iface(name):
+ return InterfaceClass('%s_IRequest' % name, (IRouteRequest,))
def add_global_response_headers(request, headerlist):
attrs = request.__dict__