Skip to content

Commit 5de13a5

Browse files
committed
Fix REST API for WSGI
Add dictionary-like headers attribute. Similar to the apache implementation in same directory but we look up the given header in the wsgi environment. Environment entries are mangled (all uppercase, '-' replaced with '_', prefix HTTP_). So on lookup we mangle the given name first. This allows the rest implementation (and others) to look up headers.
1 parent 8ec7df8 commit 5de13a5

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

roundup/cgi/wsgi_handler.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@
2020
BaseHTTPRequestHandler = http_.server.BaseHTTPRequestHandler
2121
DEFAULT_ERROR_MESSAGE = http_.server.DEFAULT_ERROR_MESSAGE
2222

23+
class Headers(object):
24+
""" Idea more or less stolen from the 'apache.py' in same directory.
25+
Except that wsgi stores http headers in environment.
26+
"""
27+
def __init__(self, environ):
28+
self.environ = environ
29+
30+
def mangle_name(self, name):
31+
n = name.replace('-', '_').upper()
32+
return 'HTTP_' + n
33+
34+
def get(self, name, default = None):
35+
return self.environ.get(self.mangle_name(name), default)
36+
getheader = get
2337

2438
class Writer(object):
2539
'''Perform a start_response if need be when we start writing.'''
@@ -50,6 +64,7 @@ def __call__(self, environ, start_response):
5064

5165
request.wfile = Writer(request)
5266
request.__wfile = None
67+
request.headers = Headers(environ)
5368

5469
if environ ['REQUEST_METHOD'] == 'OPTIONS':
5570
code = 501

0 commit comments

Comments
 (0)