correctly handle base64 and json, improve bin-file test

Manuel Riel 12 years ago
parent dc352a334b
commit c6d548fbeb

@ -6,6 +6,7 @@
import logging
import os
import mimetypes
import json
try:
# py3
from http.client import responses
@ -34,7 +35,9 @@ class FilesHandler(IPythonHandler):
raise web.HTTPError(404)
path, name = os.path.split(path)
if name.endswith('.ipynb'):
model = cm.get_model(name, path)
if model['type'] == 'notebook':
self.set_header('Content-Type', 'application/json')
else:
cur_mime = mimetypes.guess_type(name)[0]
@ -42,6 +45,12 @@ class FilesHandler(IPythonHandler):
self.set_header('Content-Type', cur_mime)
self.set_header('Content-Disposition','attachment; filename="%s"' % name)
self.write(cm.get_model(name, path)['content'])
if model['format'] == 'base64':
self.write(model['content'].decode('base64'))
elif model['format'] == 'json':
self.write(json.dumps(model['content']))
else:
self.write(model['content'])
self.flush()

@ -76,7 +76,7 @@ class FilesTest(NotebookTestBase):
write(nb, f, format='ipynb')
with io.open(pjoin(nbdir, 'test.bin'), 'wb') as f:
f.write(b'\xFF' + os.urandom(5))
f.write(b'\xff' + os.urandom(5))
f.close()
with io.open(pjoin(nbdir, 'test.txt'), 'w') as f:
@ -91,7 +91,9 @@ class FilesTest(NotebookTestBase):
r = requests.get(url_path_join(base, 'files', 'test.bin'))
self.assertEqual(r.status_code, 200)
self.assertEqual(r.headers['content-type'], 'application/octet-stream')
self.assertTrue(r.content.startswith(b'\xFF'))
self.assertEqual("{:02x}".format(ord(r.content[0])), 'ff')
self.assertEqual(len(r.content), 6)
r = requests.get(url_path_join(base, 'files', 'test.txt'))
self.assertEqual(r.status_code, 200)

Loading…
Cancel
Save