##// END OF EJS Templates
review fixes on tests, add extra kernel api test
review fixes on tests, add extra kernel api test

File last commit:

r13044:0fd7254d
r13045:cc15133f
Show More
handlers.py
114 lines | 4.0 KiB | text/x-python | PythonLexer
"""Tornado handlers for the sessions web service.
Authors:
* Zach Sailer
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2013 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
from tornado import web
from zmq.utils import jsonapi
from IPython.utils.jsonutil import date_default
from ...base.handlers import IPythonHandler
#-----------------------------------------------------------------------------
# Session web service handlers
#-----------------------------------------------------------------------------
class SessionRootHandler(IPythonHandler):
@web.authenticated
def get(self):
# Return a list of running sessions
sm = self.session_manager
nbm = self.notebook_manager
km = self.kernel_manager
sessions = sm.list_sessions()
self.finish(jsonapi.dumps(sessions))
@web.authenticated
def post(self):
# Creates a new session
#(unless a session already exists for the named nb)
sm = self.session_manager
nbm = self.notebook_manager
km = self.kernel_manager
notebook_path = self.get_argument('notebook_path', default=None)
name, path = nbm.named_notebook_path(notebook_path)
# Check to see if session exists
if sm.session_exists(name=name, path=path):
model = sm.get_session(name=name, path=path)
kernel_id = model['kernel']['id']
km.start_kernel(kernel_id, cwd=nbm.notebook_dir)
else:
session_id = sm.get_session_id()
sm.save_session(session_id=session_id, name=name, path=path)
kernel_id = km.start_kernel(cwd=nbm.notebook_dir)
kernel = km.kernel_model(kernel_id, self.ws_url)
sm.update_session(session_id, kernel=kernel_id)
model = sm.get_session(id=session_id)
self.set_header('Location', '{0}kernels/{1}'.format(self.base_kernel_url, kernel_id))
self.finish(jsonapi.dumps(model))
class SessionHandler(IPythonHandler):
SUPPORTED_METHODS = ('GET', 'PATCH', 'DELETE')
@web.authenticated
def get(self, session_id):
# Returns the JSON model for a single session
sm = self.session_manager
model = sm.get_session(id=session_id)
self.finish(jsonapi.dumps(model))
@web.authenticated
def patch(self, session_id):
# Currently, this handler is strictly for renaming notebooks
sm = self.session_manager
nbm = self.notebook_manager
km = self.kernel_manager
data = jsonapi.loads(self.request.body)
name, path = nbm.named_notebook_path(data['notebook_path'])
sm.update_session(session_id, name=name)
model = sm.get_session(id=session_id)
self.finish(jsonapi.dumps(model))
@web.authenticated
def delete(self, session_id):
# Deletes the session with given session_id
sm = self.session_manager
nbm = self.notebook_manager
km = self.kernel_manager
session = sm.get_session(id=session_id)
sm.delete_session(session_id)
km.shutdown_kernel(session['kernel']['id'])
self.set_status(204)
self.finish()
#-----------------------------------------------------------------------------
# URL to handler mappings
#-----------------------------------------------------------------------------
_session_id_regex = r"(?P<session_id>\w+-\w+-\w+-\w+-\w+)"
default_handlers = [
(r"api/sessions/%s/" % _session_id_regex, SessionHandler),
(r"api/sessions/%s" % _session_id_regex, SessionHandler),
(r"api/sessions/", SessionRootHandler),
(r"api/sessions", SessionRootHandler)
]