diff --git a/IPython/html/base/handlers.py b/IPython/html/base/handlers.py
index cd4e8d49f..d66137d0d 100644
--- a/IPython/html/base/handlers.py
+++ b/IPython/html/base/handlers.py
@@ -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