Skip to content

Commit

Permalink
Merge pull request #246 from cool-RR/2020-06-20-raise-from
Browse files Browse the repository at this point in the history
Fix exception causes all over the codebase
  • Loading branch information
blink1073 authored Jun 27, 2020
2 parents e3bb5eb + 6b7b1cd commit a837ae8
Show file tree
Hide file tree
Showing 8 changed files with 31 additions and 26 deletions.
5 changes: 3 additions & 2 deletions jupyter_server/kernelspecs/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
12 changes: 6 additions & 6 deletions jupyter_server/nbconvert/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions jupyter_server/services/contents/fileio.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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):
Expand All @@ -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)
9 changes: 6 additions & 3 deletions jupyter_server/services/contents/filemanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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':
Expand Down Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions jupyter_server/services/contents/largefilemanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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):
Expand Down
4 changes: 2 additions & 2 deletions jupyter_server/services/kernelspecs/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion jupyter_server/services/nbconvert/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
12 changes: 6 additions & 6 deletions jupyter_server/services/sessions/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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', {})
Expand Down Expand Up @@ -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()

Expand Down

0 comments on commit a837ae8

Please sign in to comment.