eventlet.wsgi no longer prints error messages, it instead uses the logfile. Brought the unicode exception under test coverage.
This commit is contained in:
@@ -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'),
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user