diff --git a/jupyter_server/kernelspecs/handlers.py b/jupyter_server/kernelspecs/handlers.py index 228694b8a5..f53cdcd840 100644 --- a/jupyter_server/kernelspecs/handlers.py +++ b/jupyter_server/kernelspecs/handlers.py @@ -14,8 +14,9 @@ def get(self, kernel_name, path, include_body=True): ksm = self.kernel_spec_manager try: self.root = ksm.get_kernel_spec(kernel_name).resource_dir - except KeyError: - raise web.HTTPError(404, u'Kernel spec %s not found' % kernel_name) + except KeyError as e: + raise web.HTTPError(404, u'Kernel spec %s not found' % + kernel_name) from e self.log.debug("Serving kernel resource from: %s", self.root) return web.StaticFileHandler.get(self, path, include_body=include_body) diff --git a/jupyter_server/nbconvert/handlers.py b/jupyter_server/nbconvert/handlers.py index fc8d9c961b..0c962e3c13 100644 --- a/jupyter_server/nbconvert/handlers.py +++ b/jupyter_server/nbconvert/handlers.py @@ -60,19 +60,19 @@ def get_exporter(format, **kwargs): try: from nbconvert.exporters.base import get_exporter except ImportError as e: - raise web.HTTPError(500, "Could not import nbconvert: %s" % e) + raise web.HTTPError(500, "Could not import nbconvert: %s" % e) from e try: Exporter = get_exporter(format) - except KeyError: + except KeyError as e: # should this be 400? - raise web.HTTPError(404, u"No exporter for format: %s" % format) + raise web.HTTPError(404, u"No exporter for format: %s" % format) from e try: return Exporter(**kwargs) except Exception as e: app_log.exception("Could not construct Exporter: %s", Exporter) - raise web.HTTPError(500, "Could not construct Exporter: %s" % e) + raise web.HTTPError(500, "Could not construct Exporter: %s" % e) from e class NbconvertFileHandler(JupyterHandler): @@ -125,7 +125,7 @@ def get(self, format, path): ) except Exception as e: self.log.exception("nbconvert failed: %s", e) - raise web.HTTPError(500, "nbconvert failed: %s" % e) + raise web.HTTPError(500, "nbconvert failed: %s" % e) from e if respond_zip(self, name, output, resources): return @@ -162,7 +162,7 @@ def post(self, format): "config_dir": self.application.settings['config_dir'], }) except Exception as e: - raise web.HTTPError(500, "nbconvert failed: %s" % e) + raise web.HTTPError(500, "nbconvert failed: %s" % e) from e if respond_zip(self, name, output, resources): return diff --git a/jupyter_server/services/contents/fileio.py b/jupyter_server/services/contents/fileio.py index 7e92497773..d1fdaefa2a 100644 --- a/jupyter_server/services/contents/fileio.py +++ b/jupyter_server/services/contents/fileio.py @@ -217,7 +217,7 @@ def perm_to_403(self, os_path=''): if not os_path: os_path = str_to_unicode(e.filename or 'unknown file') path = to_api_path(os_path, root=self.root_dir) - raise HTTPError(403, u'Permission denied: %s' % path) + raise HTTPError(403, u'Permission denied: %s' % path) from e else: raise @@ -301,13 +301,13 @@ def _read_file(self, os_path, format): # was explicitly requested. try: return bcontent.decode('utf8'), 'text' - except UnicodeError: + except UnicodeError as e: if format == 'text': raise HTTPError( 400, "%s is not UTF-8 encoded" % os_path, reason='bad format', - ) + ) from e return encodebytes(bcontent).decode('ascii'), 'base64' def _save_file(self, os_path, content, format): @@ -326,7 +326,7 @@ def _save_file(self, os_path, content, format): except Exception as e: raise HTTPError( 400, u'Encoding error saving %s: %s' % (os_path, e) - ) + ) from e with self.atomic_writing(os_path, text=False) as f: f.write(bcontent) diff --git a/jupyter_server/services/contents/filemanager.py b/jupyter_server/services/contents/filemanager.py index 0a62682f92..32bc0389c9 100644 --- a/jupyter_server/services/contents/filemanager.py +++ b/jupyter_server/services/contents/filemanager.py @@ -89,7 +89,8 @@ def run_post_save_hook(self, model, os_path): self.post_save_hook(os_path=os_path, model=model, contents_manager=self) except Exception as e: self.log.error("Post-save hook failed o-n %s", os_path, exc_info=True) - raise web.HTTPError(500, u'Unexpected error while running post hook save: %s' % e) + raise web.HTTPError(500, u'Unexpected error while running post hook save: %s' % + e) from e @validate('root_dir') def _validate_root_dir(self, proposal): @@ -437,7 +438,8 @@ def save(self, model, path=''): raise except Exception as e: self.log.error(u'Error while saving file: %s %s', path, e, exc_info=True) - raise web.HTTPError(500, u'Unexpected error while saving file: %s %s' % (path, e)) + raise web.HTTPError(500, u'Unexpected error while saving file: %s %s' + % (path, e)) from e validation_message = None if model['type'] == 'notebook': @@ -530,7 +532,8 @@ def rename_file(self, old_path, new_path): except web.HTTPError: raise except Exception as e: - raise web.HTTPError(500, u'Unknown error renaming file: %s %s' % (old_path, e)) + raise web.HTTPError(500, u'Unknown error renaming file: %s %s' % + (old_path, e)) from e def info_string(self): return _("Serving notebooks from local directory: %s") % self.root_dir diff --git a/jupyter_server/services/contents/largefilemanager.py b/jupyter_server/services/contents/largefilemanager.py index 5487047474..7359659ad4 100644 --- a/jupyter_server/services/contents/largefilemanager.py +++ b/jupyter_server/services/contents/largefilemanager.py @@ -35,7 +35,8 @@ def save(self, model, path=''): raise except Exception as e: self.log.error(u'Error while saving file: %s %s', path, e, exc_info=True) - raise web.HTTPError(500, u'Unexpected error while saving file: %s %s' % (path, e)) + raise web.HTTPError(500, u'Unexpected error while saving file: %s %s' % + (path, e)) from e model = self.get(path, content=False) @@ -62,7 +63,7 @@ def _save_large_file(self, os_path, content, format): except Exception as e: raise web.HTTPError( 400, u'Encoding error saving %s: %s' % (os_path, e) - ) + ) from e with self.perm_to_403(os_path): if os.path.islink(os_path): diff --git a/jupyter_server/services/kernelspecs/handlers.py b/jupyter_server/services/kernelspecs/handlers.py index 1c63122df4..310caec99f 100644 --- a/jupyter_server/services/kernelspecs/handlers.py +++ b/jupyter_server/services/kernelspecs/handlers.py @@ -85,8 +85,8 @@ async def get(self, kernel_name): kernel_name = url_unescape(kernel_name) try: spec = await ensure_async(ksm.get_kernel_spec(kernel_name)) - except KeyError: - raise web.HTTPError(404, u'Kernel spec %s not found' % kernel_name) + except KeyError as e: + raise web.HTTPError(404, u'Kernel spec %s not found' % kernel_name) from e if is_kernelspec_model(spec): model = spec else: diff --git a/jupyter_server/services/nbconvert/handlers.py b/jupyter_server/services/nbconvert/handlers.py index 63e731238f..97886f1878 100644 --- a/jupyter_server/services/nbconvert/handlers.py +++ b/jupyter_server/services/nbconvert/handlers.py @@ -12,7 +12,7 @@ def get(self): try: from nbconvert.exporters import base except ImportError as e: - raise web.HTTPError(500, "Could not import nbconvert: %s" % e) + raise web.HTTPError(500, "Could not import nbconvert: %s" % e) from e res = {} exporters = base.get_export_names() for exporter_name in exporters: diff --git a/jupyter_server/services/sessions/handlers.py b/jupyter_server/services/sessions/handlers.py index 6ce4b49287..c5fc17b070 100644 --- a/jupyter_server/services/sessions/handlers.py +++ b/jupyter_server/services/sessions/handlers.py @@ -42,13 +42,13 @@ async def post(self): try: path = model['path'] - except KeyError: - raise web.HTTPError(400, "Missing field in JSON data: path") + except KeyError as e: + raise web.HTTPError(400, "Missing field in JSON data: path") from e try: mtype = model['type'] - except KeyError: - raise web.HTTPError(400, "Missing field in JSON data: type") + except KeyError as e: + raise web.HTTPError(400, "Missing field in JSON data: type") from e name = model.get('name', None) kernel = model.get('kernel', {}) @@ -148,9 +148,9 @@ async def delete(self, session_id): sm = self.session_manager try: await sm.delete_session(session_id) - except KeyError: + except KeyError as e: # the kernel was deleted but the session wasn't! - raise web.HTTPError(410, "Kernel deleted before session") + raise web.HTTPError(410, "Kernel deleted before session") from e self.set_status(204) self.finish()