blob: e81710ae18377ecb54e2effe0817aae3bd2fb243 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
from zope.component import queryUtility
from zope.deprecation import deprecated
from zope.interface import implements
from zope.interface.interface import InterfaceClass
from webob import Request as WebobRequest
from repoze.bfg.interfaces import IRequest
from repoze.bfg.interfaces import IRouteRequest
def make_request_ascii(event):
""" An event handler that causes the request charset to be ASCII;
used as an INewRequest subscriber so code written before 0.7.0 can
continue to work without a change"""
request = event.request
request.charset = None
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:
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
def add_global_response_headers(request, headerlist):
attrs = request.__dict__
response_headers = attrs.setdefault('global_response_headers', [])
response_headers.extend(headerlist)
from repoze.bfg.threadlocal import get_current_request as get_request # b/c
deprecated('get_request',
'As of repoze.bfg 1.0, any import of get_request from'
'``repoze.bfg.request`` is '
'deprecated. Use ``from repoze.bfg.threadlocal import '
'get_current_request instead.')
|