handlers.py
94 lines
| 2.9 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 | ||
|
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): | ||
|
r13017 | nbm = self.notebook_manager | ||
data=self.request.body | ||||
if data == "": | ||||
notebook_name = nbm.new_notebook() | ||||
else: | ||||
data = jsonapi.loads(data) | ||||
notebook_name = nbm.copy_notebook(data['name']) | ||||
|
r13016 | self.finish(jsonapi.dumps({"name": notebook_name})) | ||
|
r10642 | |||
|
r10641 | |||
class NamedNotebookHandler(IPythonHandler): | ||||
|
r11644 | @web.authenticated | ||
|
r12981 | def get(self, notebook_path): | ||
|
r10641 | nbm = self.notebook_manager | ||
|
r12981 | name, path = nbm.named_notebook_path(notebook_path) | ||
|
r13008 | if name != None: | ||
|
r13013 | name = nbm.url_encode(name) | ||
|
r12981 | if path == None: | ||
project = self.project + '/' + name | ||||
else: | ||||
project = self.project + '/' + path +'/'+ name | ||||
|
r13013 | path = nbm.url_encode(path) | ||
|
r13006 | if not nbm.notebook_exists(notebook_path): | ||
|
r13012 | raise web.HTTPError(404, u'Notebook does not exist: %s' % name) | ||
|
r10723 | self.write(self.render_template('notebook.html', | ||
|
r12981 | project=project, | ||
notebook_path=path, | ||||
notebook_name=name, | ||||
|
r10641 | kill_kernel=False, | ||
mathjax_url=self.mathjax_url, | ||||
) | ||||
) | ||||
|
r13016 | |||
|
r13011 | @web.authenticated | ||
def post(self, notebook_path): | ||||
|
r13017 | nbm = self.notebook_manager | ||
data = self.request.body | ||||
if data == "": | ||||
notebook_name = nbm.new_notebook(notebook_path) | ||||
else: | ||||
data = jsonapi.loads(data) | ||||
notebook_name = nbm.copy_notebook(data['name'], notebook_path) | ||||
|
r13016 | self.finish(jsonapi.dumps({"name": notebook_name})) | ||
|
r10641 | |||
|
r10647 | #----------------------------------------------------------------------------- | ||
# URL to handler mappings | ||||
#----------------------------------------------------------------------------- | ||||
|
r12981 | _notebook_path_regex = r"(?P<notebook_path>.+)" | ||
|
r10647 | |||
default_handlers = [ | ||||
|
r13016 | (r"/notebooks/%s" % _notebook_path_regex, NamedNotebookHandler), | ||
(r"/notebooks/", NotebookHandler) | ||||
|
r10647 | ] | ||