summaryrefslogtreecommitdiff
path: root/eventlet/wsgi.py
diff options
context:
space:
mode:
Diffstat (limited to 'eventlet/wsgi.py')
-rw-r--r--eventlet/wsgi.py30
1 files changed, 9 insertions, 21 deletions
diff --git a/eventlet/wsgi.py b/eventlet/wsgi.py
index a17de17..807b413 100644
--- a/eventlet/wsgi.py
+++ b/eventlet/wsgi.py
@@ -69,11 +69,13 @@ class Input(object):
def __init__(self,
rfile,
content_length,
+ sock,
wfile=None,
wfile_line=None,
chunked_input=False):
self.rfile = rfile
+ self._sock = sock
if content_length is not None:
content_length = int(content_length)
self.content_length = content_length
@@ -193,7 +195,7 @@ class Input(object):
return iter(self.read, b'')
def get_socket(self):
- return self.rfile._sock
+ return self._sock
def set_hundred_continue_response_headers(self, headers,
capitalize_response_headers=True):
@@ -387,24 +389,8 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
towrite.append(six.b("%x" % (len(data),)) + b"\r\n" + data + b"\r\n")
else:
towrite.append(data)
- try:
- _writelines(towrite)
- length[0] = length[0] + sum(map(len, towrite))
- except UnicodeEncodeError:
- self.server.log_message(
- "Encountered non-ascii unicode while attempting to write"
- "wsgi response: %r" %
- [x for x in towrite if isinstance(x, six.text_type)])
- self.server.log_message(traceback.format_exc())
- _writelines(
- ["HTTP/1.1 500 Internal Server Error\r\n",
- "Connection: close\r\n",
- "Content-type: text/plain\r\n",
- "Content-length: 98\r\n",
- "Date: %s\r\n" % format_date_time(time.time()),
- "\r\n",
- ("Internal Server Error: wsgi application passed "
- "a unicode object to the server instead of a string.")])
+ _writelines(towrite)
+ length[0] = length[0] + sum(map(len, towrite))
def start_response(status, response_headers, exc_info=None):
status_code[0] = status.split()[0]
@@ -448,6 +434,8 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
minimum_write_chunk_size = int(self.environ.get(
'eventlet.minimum_write_chunk_size', self.minimum_chunk_size))
for data in result:
+ if not isinstance(data, six.binary_type):
+ raise Exception('The result iterable has to return bytestrings')
towrite.append(data)
towrite_size += len(data)
if towrite_size >= minimum_write_chunk_size:
@@ -464,7 +452,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
self.close_connection = 1
tb = traceback.format_exc()
self.server.log_message(tb)
- if not headers_set:
+ if not headers_sent:
err_body =six.b(tb) if self.server.debug else b''
start_response("500 Internal Server Error",
[('Content-type', 'text/plain'),
@@ -564,7 +552,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
wfile_line = None
chunked = env.get('HTTP_TRANSFER_ENCODING', '').lower() == 'chunked'
env['wsgi.input'] = env['eventlet.input'] = Input(
- self.rfile, length, wfile=wfile, wfile_line=wfile_line,
+ self.rfile, length, self.connection, wfile=wfile, wfile_line=wfile_line,
chunked_input=chunked)
env['eventlet.posthooks'] = []