From 6cf84cf5c156141c8023ec0acb027a1995840f92 Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Wed, 11 Aug 2010 17:13:10 -0700 Subject: [PATCH] eventlet.wsgi no longer prints error messages, it instead uses the logfile. Brought the unicode exception under test coverage. --- eventlet/wsgi.py | 10 +++++----- tests/wsgi_test.py | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/eventlet/wsgi.py b/eventlet/wsgi.py index 23af3b6..5c74386 100644 --- a/eventlet/wsgi.py +++ b/eventlet/wsgi.py @@ -301,14 +301,14 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): _writelines(towrite) length[0] = length[0] + sum(map(len, towrite)) except UnicodeEncodeError: - print "Encountered unicode while attempting to write wsgi response: ", \ - [x for x in towrite if isinstance(x, unicode)] - traceback.print_exc() + self.server.log_message("Encountered non-ascii unicode while attempting to write wsgi response: %r" % [x for x in towrite if isinstance(x, unicode)]) + self.server.log_message(traceback.format_exc()) _writelines( - ["HTTP/1.0 500 Internal Server Error\r\n", + ["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.")]) @@ -360,7 +360,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): except Exception: self.close_connection = 1 exc = traceback.format_exc() - print exc + self.server.log_message(exc) if not headers_set: start_response("500 Internal Server Error", [('Content-type', 'text/plain'), diff --git a/tests/wsgi_test.py b/tests/wsgi_test.py index 438f61d..6ca068b 100644 --- a/tests/wsgi_test.py +++ b/tests/wsgi_test.py @@ -937,6 +937,20 @@ class TestHttpd(_TestBase): self.assertEqual(headers['connection'], 'close') self.assert_('transfer-encoding' not in headers) + def test_unicode_raises_error(self): + def wsgi_app(environ, start_response): + start_response("200 OK", []) + yield u"oh hai" + yield u"non-encodable unicode: \u0230" + self.site.application = wsgi_app + sock = eventlet.connect(('localhost', self.port)) + fd = sock.makefile('rw') + fd.write('GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n') + fd.flush() + response_line, headers, body = read_http(sock) + self.assert_(response_line.startswith('HTTP/1.1 500 Internal Server Error')) + self.assertEqual(headers['connection'], 'close') + self.assert_('unicode' in body) def read_headers(sock): fd = sock.makefile()