handlers.py
103 lines
| 3.4 KiB
| text/x-python
|
PythonLexer
|
r10642 | """Tornado handlers for the live notebook view. | ||
|
r10641 | |||
Authors: | ||||
* Brian Granger | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
|
r10642 | # Copyright (C) 2011 The IPython Development Team | ||
|
r10641 | # | ||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
import os | ||||
from tornado import web | ||||
|
r10642 | HTTPError = web.HTTPError | ||
|
r13016 | from zmq.utils import jsonapi | ||
|
r10641 | |||
|
r11644 | from ..base.handlers import IPythonHandler | ||
|
r13067 | from ..services.notebooks.handlers import _notebook_path_regex, _path_regex | ||
|
r10642 | from ..utils import url_path_join | ||
|
r13008 | from urllib import quote | ||
|
r10641 | |||
#----------------------------------------------------------------------------- | ||||
|
r10642 | # Handlers | ||
|
r10641 | #----------------------------------------------------------------------------- | ||
|
r13016 | class NotebookHandler(IPythonHandler): | ||
|
r10641 | |||
@web.authenticated | ||||
|
r13016 | def post(self): | ||
|
r13029 | """post either creates a new notebook if no json data is | ||
sent to the server, or copies the data and returns a | ||||
copied notebook.""" | ||||
|
r13017 | nbm = self.notebook_manager | ||
data=self.request.body | ||||
|
r13029 | if data: | ||
|
r13017 | data = jsonapi.loads(data) | ||
notebook_name = nbm.copy_notebook(data['name']) | ||||
|
r13029 | else: | ||
notebook_name = nbm.new_notebook() | ||||
|
r13016 | self.finish(jsonapi.dumps({"name": notebook_name})) | ||
|
r10642 | |||
|
r10641 | |||
class NamedNotebookHandler(IPythonHandler): | ||||
|
r11644 | @web.authenticated | ||
|
r13067 | def get(self, path='', name=None): | ||
|
r13029 | """get renders the notebook template if a name is given, or | ||
redirects to the '/files/' handler if the name is not given.""" | ||||
|
r10641 | nbm = self.notebook_manager | ||
|
r13067 | if name is None: | ||
url = url_path_join(self.base_project_url, 'files', path) | ||||
|
r13029 | self.redirect(url) | ||
|
r13067 | return | ||
|
r13029 | |||
|
r13067 | # a .ipynb filename was given | ||
if not nbm.notebook_exists(name, path): | ||||
raise web.HTTPError(404, u'Notebook does not exist: %s/%s' % (path, name)) | ||||
name = nbm.url_encode(name) | ||||
path = nbm.url_encode(path) | ||||
self.write(self.render_template('notebook.html', | ||||
project=self.project_dir, | ||||
notebook_path=path, | ||||
notebook_name=name, | ||||
kill_kernel=False, | ||||
mathjax_url=self.mathjax_url, | ||||
) | ||||
) | ||||
|
r13016 | |||
|
r13011 | @web.authenticated | ||
|
r13067 | def post(self, path='', name=None): | ||
|
r13029 | """post either creates a new notebook if no json data is | ||
sent to the server, or copies the data and returns a | ||||
copied notebook in the location given by 'notebook_path.""" | ||||
|
r13017 | nbm = self.notebook_manager | ||
data = self.request.body | ||||
|
r13029 | if data: | ||
|
r13017 | data = jsonapi.loads(data) | ||
notebook_name = nbm.copy_notebook(data['name'], notebook_path) | ||||
|
r13029 | else: | ||
notebook_name = nbm.new_notebook(notebook_path) | ||||
|
r13016 | self.finish(jsonapi.dumps({"name": notebook_name})) | ||
|
r10641 | |||
|
r10647 | #----------------------------------------------------------------------------- | ||
# URL to handler mappings | ||||
#----------------------------------------------------------------------------- | ||||
default_handlers = [ | ||||
|
r13067 | (r"/notebooks/?%s" % _notebook_path_regex, NamedNotebookHandler), | ||
(r"/notebooks/?%s" % _path_regex, NamedNotebookHandler), | ||||
(r"/notebooks/?", NotebookHandler), | ||||
|
r13033 | ] | ||