diff --git a/IPython/html/static/base/js/utils.js b/IPython/html/static/base/js/utils.js index b8aba88..6b731c1 100644 --- a/IPython/html/static/base/js/utils.js +++ b/IPython/html/static/base/js/utils.js @@ -488,15 +488,20 @@ IPython.utils = (function (IPython) { } } + var ajax_error_msg = function (jqXHR) { + // Return a JSON error message if there is one, + // otherwise the basic HTTP status text. + if (jqXHR.responseJSON && jqXHR.responseJSON.message) { + return jqXHR.responseJSON.message; + } else { + return jqXHR.statusText; + } + } var log_ajax_error = function (jqXHR, status, error) { // log ajax failures with informative messages var msg = "API request failed (" + jqXHR.status + "): "; console.log(jqXHR); - if (jqXHR.responseJSON && jqXHR.responseJSON.message) { - msg += jqXHR.responseJSON.message; - } else { - msg += jqXHR.statusText; - } + msg += ajax_error_msg(jqXHR); console.log(msg); }; @@ -519,6 +524,7 @@ IPython.utils = (function (IPython) { platform: platform, is_or_has : is_or_has, is_focused : is_focused, + ajax_error_msg : ajax_error_msg, log_ajax_error : log_ajax_error, }; diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js index 7eb913e..1fdb103 100644 --- a/IPython/html/static/notebook/js/notebook.js +++ b/IPython/html/static/notebook/js/notebook.js @@ -2125,13 +2125,14 @@ var IPython = (function (IPython) { */ Notebook.prototype.load_notebook_error = function (xhr, status, error) { $([IPython.events]).trigger('notebook_load_failed.Notebook', [xhr, status, error]); - var msg; + utils.log_ajax_error(xhr, status, error); + var msg = $("
"); if (xhr.status === 400) { - msg = error; + msg.text(utils.ajax_error_msg(xhr)); } else if (xhr.status === 500) { - msg = "An unknown error occurred while loading this notebook. " + + msg.text("An unknown error occurred while loading this notebook. " + "This version can load notebook formats " + - "v" + this.nbformat + " or earlier."; + "v" + this.nbformat + " or earlier. See the server log for details."); } IPython.dialog.modal({ title: "Error loading notebook", @@ -2402,10 +2403,10 @@ var IPython = (function (IPython) { * @method delete_checkpoint_error * @param {jqXHR} xhr jQuery Ajax object * @param {String} status Description of response status - * @param {String} error_msg HTTP error message + * @param {String} error HTTP error message */ - Notebook.prototype.delete_checkpoint_error = function (xhr, status, error_msg) { - $([IPython.events]).trigger('checkpoint_delete_failed.Notebook'); + Notebook.prototype.delete_checkpoint_error = function (xhr, status, error) { + $([IPython.events]).trigger('checkpoint_delete_failed.Notebook', [xhr, status, error]); }; diff --git a/IPython/nbformat/reader.py b/IPython/nbformat/reader.py index 78e8a1d..ded716c 100644 --- a/IPython/nbformat/reader.py +++ b/IPython/nbformat/reader.py @@ -80,6 +80,8 @@ def reads(s, **kwargs): nb : NotebookNode The notebook that was read. """ + from .current import NBFormatError + nb_dict = parse_json(s, **kwargs) (major, minor) = get_version(nb_dict) if major in versions: