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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
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
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__
# 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)
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.')
|