Skip to content

Commit a837ae8

Browse files
authored
Merge pull request #246 from cool-RR/2020-06-20-raise-from
Fix exception causes all over the codebase
2 parents e3bb5eb + 6b7b1cd commit a837ae8

File tree

8 files changed

+31
-26
lines changed

8 files changed

+31
-26
lines changed

jupyter_server/kernelspecs/handlers.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ def get(self, kernel_name, path, include_body=True):
1414
ksm = self.kernel_spec_manager
1515
try:
1616
self.root = ksm.get_kernel_spec(kernel_name).resource_dir
17-
except KeyError:
18-
raise web.HTTPError(404, u'Kernel spec %s not found' % kernel_name)
17+
except KeyError as e:
18+
raise web.HTTPError(404, u'Kernel spec %s not found' %
19+
kernel_name) from e
1920
self.log.debug("Serving kernel resource from: %s", self.root)
2021
return web.StaticFileHandler.get(self, path, include_body=include_body)
2122

jupyter_server/nbconvert/handlers.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,19 @@ def get_exporter(format, **kwargs):
6060
try:
6161
from nbconvert.exporters.base import get_exporter
6262
except ImportError as e:
63-
raise web.HTTPError(500, "Could not import nbconvert: %s" % e)
63+
raise web.HTTPError(500, "Could not import nbconvert: %s" % e) from e
6464

6565
try:
6666
Exporter = get_exporter(format)
67-
except KeyError:
67+
except KeyError as e:
6868
# should this be 400?
69-
raise web.HTTPError(404, u"No exporter for format: %s" % format)
69+
raise web.HTTPError(404, u"No exporter for format: %s" % format) from e
7070

7171
try:
7272
return Exporter(**kwargs)
7373
except Exception as e:
7474
app_log.exception("Could not construct Exporter: %s", Exporter)
75-
raise web.HTTPError(500, "Could not construct Exporter: %s" % e)
75+
raise web.HTTPError(500, "Could not construct Exporter: %s" % e) from e
7676

7777

7878
class NbconvertFileHandler(JupyterHandler):
@@ -125,7 +125,7 @@ def get(self, format, path):
125125
)
126126
except Exception as e:
127127
self.log.exception("nbconvert failed: %s", e)
128-
raise web.HTTPError(500, "nbconvert failed: %s" % e)
128+
raise web.HTTPError(500, "nbconvert failed: %s" % e) from e
129129

130130
if respond_zip(self, name, output, resources):
131131
return
@@ -162,7 +162,7 @@ def post(self, format):
162162
"config_dir": self.application.settings['config_dir'],
163163
})
164164
except Exception as e:
165-
raise web.HTTPError(500, "nbconvert failed: %s" % e)
165+
raise web.HTTPError(500, "nbconvert failed: %s" % e) from e
166166

167167
if respond_zip(self, name, output, resources):
168168
return

jupyter_server/services/contents/fileio.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def perm_to_403(self, os_path=''):
217217
if not os_path:
218218
os_path = str_to_unicode(e.filename or 'unknown file')
219219
path = to_api_path(os_path, root=self.root_dir)
220-
raise HTTPError(403, u'Permission denied: %s' % path)
220+
raise HTTPError(403, u'Permission denied: %s' % path) from e
221221
else:
222222
raise
223223

@@ -301,13 +301,13 @@ def _read_file(self, os_path, format):
301301
# was explicitly requested.
302302
try:
303303
return bcontent.decode('utf8'), 'text'
304-
except UnicodeError:
304+
except UnicodeError as e:
305305
if format == 'text':
306306
raise HTTPError(
307307
400,
308308
"%s is not UTF-8 encoded" % os_path,
309309
reason='bad format',
310-
)
310+
) from e
311311
return encodebytes(bcontent).decode('ascii'), 'base64'
312312

313313
def _save_file(self, os_path, content, format):
@@ -326,7 +326,7 @@ def _save_file(self, os_path, content, format):
326326
except Exception as e:
327327
raise HTTPError(
328328
400, u'Encoding error saving %s: %s' % (os_path, e)
329-
)
329+
) from e
330330

331331
with self.atomic_writing(os_path, text=False) as f:
332332
f.write(bcontent)

jupyter_server/services/contents/filemanager.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ def run_post_save_hook(self, model, os_path):
8989
self.post_save_hook(os_path=os_path, model=model, contents_manager=self)
9090
except Exception as e:
9191
self.log.error("Post-save hook failed o-n %s", os_path, exc_info=True)
92-
raise web.HTTPError(500, u'Unexpected error while running post hook save: %s' % e)
92+
raise web.HTTPError(500, u'Unexpected error while running post hook save: %s' %
93+
e) from e
9394

9495
@validate('root_dir')
9596
def _validate_root_dir(self, proposal):
@@ -437,7 +438,8 @@ def save(self, model, path=''):
437438
raise
438439
except Exception as e:
439440
self.log.error(u'Error while saving file: %s %s', path, e, exc_info=True)
440-
raise web.HTTPError(500, u'Unexpected error while saving file: %s %s' % (path, e))
441+
raise web.HTTPError(500, u'Unexpected error while saving file: %s %s'
442+
% (path, e)) from e
441443

442444
validation_message = None
443445
if model['type'] == 'notebook':
@@ -530,7 +532,8 @@ def rename_file(self, old_path, new_path):
530532
except web.HTTPError:
531533
raise
532534
except Exception as e:
533-
raise web.HTTPError(500, u'Unknown error renaming file: %s %s' % (old_path, e))
535+
raise web.HTTPError(500, u'Unknown error renaming file: %s %s' %
536+
(old_path, e)) from e
534537

535538
def info_string(self):
536539
return _("Serving notebooks from local directory: %s") % self.root_dir

jupyter_server/services/contents/largefilemanager.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ def save(self, model, path=''):
3535
raise
3636
except Exception as e:
3737
self.log.error(u'Error while saving file: %s %s', path, e, exc_info=True)
38-
raise web.HTTPError(500, u'Unexpected error while saving file: %s %s' % (path, e))
38+
raise web.HTTPError(500, u'Unexpected error while saving file: %s %s' %
39+
(path, e)) from e
3940

4041
model = self.get(path, content=False)
4142

@@ -62,7 +63,7 @@ def _save_large_file(self, os_path, content, format):
6263
except Exception as e:
6364
raise web.HTTPError(
6465
400, u'Encoding error saving %s: %s' % (os_path, e)
65-
)
66+
) from e
6667

6768
with self.perm_to_403(os_path):
6869
if os.path.islink(os_path):

jupyter_server/services/kernelspecs/handlers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ async def get(self, kernel_name):
8585
kernel_name = url_unescape(kernel_name)
8686
try:
8787
spec = await ensure_async(ksm.get_kernel_spec(kernel_name))
88-
except KeyError:
89-
raise web.HTTPError(404, u'Kernel spec %s not found' % kernel_name)
88+
except KeyError as e:
89+
raise web.HTTPError(404, u'Kernel spec %s not found' % kernel_name) from e
9090
if is_kernelspec_model(spec):
9191
model = spec
9292
else:

jupyter_server/services/nbconvert/handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def get(self):
1212
try:
1313
from nbconvert.exporters import base
1414
except ImportError as e:
15-
raise web.HTTPError(500, "Could not import nbconvert: %s" % e)
15+
raise web.HTTPError(500, "Could not import nbconvert: %s" % e) from e
1616
res = {}
1717
exporters = base.get_export_names()
1818
for exporter_name in exporters:

jupyter_server/services/sessions/handlers.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ async def post(self):
4242

4343
try:
4444
path = model['path']
45-
except KeyError:
46-
raise web.HTTPError(400, "Missing field in JSON data: path")
45+
except KeyError as e:
46+
raise web.HTTPError(400, "Missing field in JSON data: path") from e
4747

4848
try:
4949
mtype = model['type']
50-
except KeyError:
51-
raise web.HTTPError(400, "Missing field in JSON data: type")
50+
except KeyError as e:
51+
raise web.HTTPError(400, "Missing field in JSON data: type") from e
5252

5353
name = model.get('name', None)
5454
kernel = model.get('kernel', {})
@@ -148,9 +148,9 @@ async def delete(self, session_id):
148148
sm = self.session_manager
149149
try:
150150
await sm.delete_session(session_id)
151-
except KeyError:
151+
except KeyError as e:
152152
# the kernel was deleted but the session wasn't!
153-
raise web.HTTPError(410, "Kernel deleted before session")
153+
raise web.HTTPError(410, "Kernel deleted before session") from e
154154
self.set_status(204)
155155
self.finish()
156156

0 commit comments

Comments
 (0)