# HG changeset patch # User Tero Marttila # Date 1234741245 -7200 # Node ID 5160b9e0edf1ab643a10fc38ef39448dd1503a5e # Parent 0162c2b21dc513c037d04d997a659dc03c079b17 move wsgi.Application error handling to handle_error method diff -r 0162c2b21dc5 -r 5160b9e0edf1 wsgi.py --- a/wsgi.py Mon Feb 16 01:40:26 2009 +0200 +++ b/wsgi.py Mon Feb 16 01:40:45 2009 +0200 @@ -46,6 +46,23 @@ # send respones data yield response.get_data() + def handle_error (self, exc_info, env, start_response) : + """ + Handle errors thrown by handle_request. This should call start_response with the exc_info and return the + error message (i.e. str), otherwise the error will be thrown up yet another level. + + Note that e.g. unicode is a failure... + """ + + # try and send 500 ISE to browser, if no headers yet... + start_response("500 Internal Server Error", [('Content-type', "text/plain; charset=UTF-8")], exc_info) + + # format traceback + data = ''.join(traceback.format_exception(*exc_info)) + + # no unicode, kplzthx + return data.encode('utf-8') + def __call__ (self, env, start_response) : """ Wraps handle_request to trap errors @@ -60,9 +77,6 @@ # execption info info = sys.exc_info() - # try and send 500 ISE to browser, if no headers yet... - start_response("500 Internal Server Error", [('Content-type', "text/plain; charset=utf8")], info) + # handle + yield self.handle_error(info, env, start_response) - # send traceback - yield traceback.format_exc() -