update json_errors decorator

separate handling of HTTPError and unhanded exceptions
pull/37/head
MinRK 12 years ago
parent 141d088a51
commit cded90efe3

@ -272,7 +272,7 @@ class AuthenticatedFileHandler(IPythonHandler, web.StaticFileHandler):
def json_errors(method):
"""Decorate methods with this to return GitHub style JSON errors.
This should be used on any handler method that can raise HTTPErrors.
This should be used on any JSON API on any handler method that can raise HTTPErrors.
This will grab the latest HTTPError exception using sys.exc_info
and then:
@ -285,18 +285,20 @@ def json_errors(method):
def wrapper(self, *args, **kwargs):
try:
result = method(self, *args, **kwargs)
except:
except web.HTTPError as e:
status = e.status_code
message = e.log_message
self.set_status(e.status_code)
self.finish(json.dumps(dict(message=message)))
except Exception:
self.log.error("Unhandled error in API request", exc_info=True)
status = 500
message = "Unknown server error"
t, value, tb = sys.exc_info()
if isinstance(value, web.HTTPError):
status = value.status_code
message = value.log_message
else:
status = 400
message = u"Unknown server error"
self.set_status(status)
tb_text = ''.join(traceback.format_exception(t, value, tb))
reply = dict(message=message, traceback=tb_text)
self.finish(json.dumps(reply, default=date_default))
self.finish(json.dumps(reply))
else:
return result
return wrapper

Loading…
Cancel
Save