From 09f3a52239f4b191dcda746dffc19fbce8a17803 Mon Sep 17 00:00:00 2001 From: donovan Date: Tue, 29 Apr 2008 18:33:47 -0700 Subject: [PATCH] Work on python 2.3 --- eventlet/wsgi.py | 59 +++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/eventlet/wsgi.py b/eventlet/wsgi.py index 414adbe..22c3f9c 100644 --- a/eventlet/wsgi.py +++ b/eventlet/wsgi.py @@ -158,7 +158,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): try: result = self.server.app(self.environ, start_response) except Exception, e: - exc = traceback.format_exc() + exc = ''.join(traceback.format_exception(*sys.exc_info())) print exc if not headers_set: start_response("500 Internal Server Error", [('Content-type', 'text/plain')]) @@ -170,38 +170,41 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): except (TypeError, AttributeError, NotImplementedError): if self.protocol_version == 'HTTP/1.1': use_chunked = True - try: - towrite = [] try: - for data in result: - if data: - towrite.append(data) - if reduce( - lambda x, y: x + y, - map( - lambda x: len(x), towrite)) > 4096: - write(''.join(towrite)) - del towrite[:] + towrite = [] + try: + for data in result: + if data: + towrite.append(data) + if reduce( + lambda x, y: x + y, + map( + lambda x: len(x), towrite)) > 4096: + write(''.join(towrite)) + del towrite[:] + except Exception, e: + exc = traceback.format_exc() + print exc + if not headers_set: + start_response("500 Internal Server Error", [('Content-type', 'text/plain')]) + write(exc) + return + + if towrite: + write(''.join(towrite)) + if use_chunked: + wfile.write('0\r\n\r\n') + if not headers_sent: + write('') except Exception, e: - exc = traceback.format_exc() - print exc - if not headers_set: - start_response("500 Internal Server Error", [('Content-type', 'text/plain')]) - write(exc) - return - - if towrite: - write(''.join(towrite)) - if use_chunked: - wfile.write('0\r\n\r\n') - if not headers_sent: - write('') - except Exception, e: - traceback.print_exc() + traceback.print_exc() finally: if hasattr(result, 'close'): result.close() + if self.environ['eventlet.input'].position < self.environ.get('CONTENT_LENGTH', 0): + ## Read and discard body + self.environ['eventlet.input'].read() def get_environ(self): env = self.server.get_environ() @@ -249,7 +252,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): else: wfile = None wfile_line = None - env['wsgi.input'] = Input( + env['wsgi.input'] = env['eventlet.input'] = Input( self.rfile, length, wfile=wfile, wfile_line=wfile_line) return env