##// END OF EJS Templates
Merge branch 'htmlnotebook' of github.com:ipython/ipython into htmlnotebook...
Merge branch 'htmlnotebook' of github.com:ipython/ipython into htmlnotebook Conflicts: setupbase.py

File last commit:

r4484:65666c0b
r4485:d77eb2c8 merge
Show More
handlers.py
125 lines | 4.1 KiB | text/x-python | PythonLexer
"""Tornado handlers for the notebook."""
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import json
import logging
import urllib
from tornado import web
from tornado import websocket
#-----------------------------------------------------------------------------
# Handlers
#-----------------------------------------------------------------------------
class MainHandler(web.RequestHandler):
def get(self):
notebook_id = self.application.notebook_manager.new_notebook()
self.render('notebook.html', notebook_id=notebook_id)
class NamedNotebookHandler(web.RequestHandler):
def get(self, notebook_id):
nbm = self.application.notebook_manager
if not nbm.notebook_exists(notebook_id):
raise web.HTTPError(404)
self.render('notebook.html', notebook_id=notebook_id)
class KernelHandler(web.RequestHandler):
def get(self):
self.write(json.dumps(self.application.kernel_ids))
def post(self):
kernel_id = self.application.start_kernel()
self.set_header('Location', '/'+kernel_id)
self.write(json.dumps(kernel_id))
class KernelActionHandler(web.RequestHandler):
def post(self, kernel_id, action):
# TODO: figure out a better way of handling RPC style calls.
if action == 'interrupt':
self.application.interrupt_kernel(kernel_id)
if action == 'restart':
new_kernel_id = self.application.restart_kernel(kernel_id)
self.write(json.dumps(new_kernel_id))
class ZMQStreamHandler(websocket.WebSocketHandler):
def initialize(self, stream_name):
self.stream_name = stream_name
def open(self, kernel_id):
self.router = self.application.get_router(kernel_id, self.stream_name)
self.client_id = self.router.register_client(self)
logging.info("Connection open: %s, %s" % (kernel_id, self.client_id))
def on_message(self, msg):
self.router.forward_msg(self.client_id, msg)
def on_close(self):
self.router.unregister_client(self.client_id)
logging.info("Connection closed: %s" % self.client_id)
class NotebookRootHandler(web.RequestHandler):
def get(self):
nbm = self.application.notebook_manager
files = nbm.list_notebooks()
self.write(json.dumps(files))
def post(self):
nbm = self.application.notebook_manager
body = self.request.body.strip()
format = self.get_argument('format', default='json')
if body:
notebook_id = nbm.save_new_notebook(body, format)
else:
notebook_id = nbm.new_notebook()
self.set_header('Location', '/'+notebook_id)
self.write(json.dumps(notebook_id))
class NotebookHandler(web.RequestHandler):
SUPPORTED_METHODS = ('GET', 'PUT', 'DELETE')
def get(self, notebook_id):
nbm = self.application.notebook_manager
format = self.get_argument('format', default='json')
last_mod, name, data = nbm.get_notebook(notebook_id, format)
if format == u'json':
self.set_header('Content-Type', 'application/json')
self.set_header('Content-Disposition','attachment; filename=%s.json' % name)
elif format == u'xml':
self.set_header('Content-Type', 'text/xml')
self.set_header('Content-Disposition','attachment; filename=%s.ipynb' % name)
elif format == u'py':
self.set_header('Content-Type', 'text/plain')
self.set_header('Content-Disposition','attachment; filename=%s.py' % name)
self.set_header('Last-Modified', last_mod)
self.finish(data)
def put(self, notebook_id):
nbm = self.application.notebook_manager
format = self.get_argument('format', default='json')
nbm.save_notebook(notebook_id, self.request.body, format)
self.set_status(204)
self.finish()
def delete(self, notebook_id):
nbm = self.application.notebook_manager
nbm.delete_notebook(notebook_id)
self.set_status(204)
self.finish()