##// END OF EJS Templates
add tests for session api
add tests for session api

File last commit:

r13044:0fd7254d
r13044:0fd7254d
Show More
handlers.py
217 lines | 8.3 KiB | text/x-python | PythonLexer
Brian E. Granger
Splitting handlers into different files....
r10642 """Tornado handlers for the notebooks web service.
Brian E. Granger
Adding new files.
r10641
Authors:
* Brian Granger
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2011 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
MinRK
remove notebook read-only view...
r11644 from ...base.handlers import IPythonHandler
Brian E. Granger
Adding new files.
r10641
#-----------------------------------------------------------------------------
# Notebook web service handlers
#-----------------------------------------------------------------------------
Zachary Sailer
manual rebase notebooks web services
r12984
Brian E. Granger
Adding new files.
r10641 class NotebookRootHandler(IPythonHandler):
MinRK
remove notebook read-only view...
r11644 @web.authenticated
Brian E. Granger
Adding new files.
r10641 def get(self):
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 """get returns a list of notebooks from the location
where the server was started."""
Brian E. Granger
Adding new files.
r10641 nbm = self.notebook_manager
Zachary Sailer
Added notebooks API tests.
r13041 notebooks = nbm.list_notebooks("/")
Zachary Sailer
manual rebase notebooks web services
r12984 self.finish(jsonapi.dumps(notebooks))
Brian E. Granger
Adding new files.
r10641
@web.authenticated
def post(self):
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 """post creates a notebooks in the directory where the
server was started"""
Brian E. Granger
Adding new files.
r10641 nbm = self.notebook_manager
Zachary Sailer
add tests for session api
r13044 self.log.info(nbm.notebook_dir)
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 body = self.request.body.strip()
format = self.get_argument('format', default='json')
name = self.get_argument('name', default=None)
if body:
Zachary Sailer
fix bug in test_contentmanager
r13039 fname = nbm.save_new_notebook(body, notebook_path='/', name=name, format=format)
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 else:
Zachary Sailer
fix bug in test_contentmanager
r13039 fname = nbm.new_notebook(notebook_path='/')
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 self.set_header('Location', nbm.notebook_dir + fname)
model = nbm.notebook_model(fname)
Zachary Sailer
Added notebooks API tests.
r13041 self.set_header('Location', '{0}api/notebooks/{1}'.format(self.base_project_url, fname))
Zachary Sailer
manual rebase notebooks web services
r12984 self.finish(jsonapi.dumps(model))
Zachary Sailer
allow spaces in notebook path
r13012
Brian E. Granger
Adding new files.
r10641 class NotebookHandler(IPythonHandler):
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 SUPPORTED_METHODS = ('GET', 'PUT', 'PATCH', 'POST','DELETE')
Brian E. Granger
Adding new files.
r10641
MinRK
remove notebook read-only view...
r11644 @web.authenticated
Zachary Sailer
manual rebase notebooks web services
r12984 def get(self, notebook_path):
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 """get checks if a notebook is not named, an returns a list of notebooks
in the notebook path given. If a name is given, return
the notebook representation"""
Brian E. Granger
Adding new files.
r10641 nbm = self.notebook_manager
Zachary Sailer
manual rebase notebooks web services
r12984 name, path = nbm.named_notebook_path(notebook_path)
Brian E. Granger
Adding new files.
r10641
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 # Check to see if a notebook name was given
if name is None:
# List notebooks in 'notebook_path'
Zachary Sailer
Add 'patch' to session & notebook, rename working
r12997 notebooks = nbm.list_notebooks(path)
Zachary Sailer
manual rebase notebooks web services
r12984 self.finish(jsonapi.dumps(notebooks))
else:
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 # get and return notebook representation
Zachary Sailer
manual rebase notebooks web services
r12984 format = self.get_argument('format', default='json')
Zachary Sailer
proper '.py' and '.ipynb' download files
r13001 download = self.get_argument('download', default='False')
Zachary Sailer
Added notebooks API tests.
r13041 model = nbm.notebook_model(name, path)
Zachary Sailer
Download '.py' fixed, deleted debugging output
r13000 last_mod, representation, name = nbm.get_notebook(name, path, format)
Zachary Sailer
proper '.py' and '.ipynb' download files
r13001 self.set_header('Last-Modified', last_mod)
if download == 'True':
if format == u'json':
self.set_header('Content-Type', 'application/json')
self.set_header('Content-Disposition','attachment; filename="%s.ipynb"' % name)
self.finish(representation)
elif format == u'py':
self.set_header('Content-Type', 'application/x-python')
self.set_header('Content-Disposition','attachment; filename="%s.py"' % name)
self.finish(representation)
else:
self.finish(jsonapi.dumps(model))
Brian E. Granger
Adding new files.
r10641
@web.authenticated
Zachary Sailer
Add 'patch' to session & notebook, rename working
r12997 def patch(self, notebook_path):
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 """patch is currently used strictly for notebook renaming.
Changes the notebook name to the name given in data."""
Zachary Sailer
Add 'patch' to session & notebook, rename working
r12997 nbm = self.notebook_manager
Paul Ivanov
named_notebook_path: consistent usage convention
r13029 name, path = nbm.named_notebook_path(notebook_path)
Zachary Sailer
Add 'patch' to session & notebook, rename working
r12997 data = jsonapi.loads(self.request.body)
Zachary Sailer
Added notebooks API tests.
r13041 model = nbm.change_notebook(data, name, path)
Zachary Sailer
Add 'patch' to session & notebook, rename working
r12997 self.finish(jsonapi.dumps(model))
@web.authenticated
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 def post(self,notebook_path):
"""Create a new notebook in the location given by 'notebook_path'."""
Brian E. Granger
Adding new files.
r10641 nbm = self.notebook_manager
Paul Ivanov
named_notebook_path: consistent usage convention
r13029 fname, path = nbm.named_notebook_path(notebook_path)
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 body = self.request.body.strip()
format = self.get_argument('format', default='json')
name = self.get_argument('name', default=None)
if body:
fname = nbm.save_new_notebook(body, notebook_path=path, name=name, format=format)
else:
fname = nbm.new_notebook(notebook_path=path)
self.set_header('Location', nbm.notebook_dir + path + fname)
model = nbm.notebook_model(fname, path)
self.finish(jsonapi.dumps(model))
@web.authenticated
def put(self, notebook_path):
"""saves the notebook in the location given by 'notebook_path'."""
nbm = self.notebook_manager
name, path = nbm.named_notebook_path(notebook_path)
format = self.get_argument('format', default='json')
nbm.save_notebook(self.request.body, notebook_path=path, name=name, format=format)
model = nbm.notebook_model(name, path)
self.set_status(204)
self.finish(jsonapi.dumps(model))
Brian E. Granger
Adding new files.
r10641
@web.authenticated
Zachary Sailer
manual rebase notebooks web services
r12984 def delete(self, notebook_path):
Zachary Sailer
cleaning nb handlers, adding doc-strings/comments
r13036 """delete rmoves the notebook in the given notebook path"""
Zachary Sailer
manual rebase notebooks web services
r12984 nbm = self.notebook_manager
name, path = nbm.named_notebook_path(notebook_path)
Zachary Sailer
fixing some bugs after rebase
r12991 nbm.delete_notebook(name, path)
Brian E. Granger
Adding new files.
r10641 self.set_status(204)
self.finish()
class NotebookCheckpointsHandler(IPythonHandler):
SUPPORTED_METHODS = ('GET', 'POST')
@web.authenticated
Zachary Sailer
manual rebase notebooks web services
r12984 def get(self, notebook_path):
Brian E. Granger
Adding new files.
r10641 """get lists checkpoints for a notebook"""
nbm = self.notebook_manager
Zachary Sailer
manual rebase notebooks web services
r12984 name, path = nbm.named_notebook_path(notebook_path)
checkpoints = nbm.list_checkpoints(name, path)
Brian E. Granger
Adding new files.
r10641 data = jsonapi.dumps(checkpoints, default=date_default)
self.finish(data)
@web.authenticated
Zachary Sailer
manual rebase notebooks web services
r12984 def post(self, notebook_path):
Brian E. Granger
Adding new files.
r10641 """post creates a new checkpoint"""
nbm = self.notebook_manager
Zachary Sailer
manual rebase notebooks web services
r12984 name, path = nbm.named_notebook_path(notebook_path)
checkpoint = nbm.create_checkpoint(name, path)
Brian E. Granger
Adding new files.
r10641 data = jsonapi.dumps(checkpoint, default=date_default)
Zachary Sailer
manual rebase notebooks web services
r12984 if path == None:
self.set_header('Location', '{0}notebooks/{1}/checkpoints/{2}'.format(
self.base_project_url, name, checkpoint['checkpoint_id']
))
else:
self.set_header('Location', '{0}notebooks/{1}/{2}/checkpoints/{3}'.format(
self.base_project_url, path, name, checkpoint['checkpoint_id']
))
Brian E. Granger
Adding new files.
r10641 self.finish(data)
class ModifyNotebookCheckpointsHandler(IPythonHandler):
SUPPORTED_METHODS = ('POST', 'DELETE')
@web.authenticated
Zachary Sailer
manual rebase notebooks web services
r12984 def post(self, notebook_path, checkpoint_id):
Brian E. Granger
Adding new files.
r10641 """post restores a notebook from a checkpoint"""
nbm = self.notebook_manager
Zachary Sailer
manual rebase notebooks web services
r12984 name, path = nbm.named_notebook_path(notebook_path)
nbm.restore_checkpoint(name, checkpoint_id, path)
Brian E. Granger
Adding new files.
r10641 self.set_status(204)
self.finish()
@web.authenticated
Zachary Sailer
manual rebase notebooks web services
r12984 def delete(self, notebook_path, checkpoint_id):
Brian E. Granger
Adding new files.
r10641 """delete clears a checkpoint for a given notebook"""
nbm = self.notebook_manager
Zachary Sailer
manual rebase notebooks web services
r12984 name, path = nbm.named_notebook_path(notebook_path)
nbm.delete_checkpoint(name, checkpoint_id, path)
Brian E. Granger
Adding new files.
r10641 self.set_status(204)
self.finish()
Zachary Sailer
manual rebase notebooks web services
r12984
Brian E. Granger
More work on the handlers
r10647 #-----------------------------------------------------------------------------
# URL to handler mappings
#-----------------------------------------------------------------------------
Zachary Sailer
manual rebase notebooks web services
r12984 _notebook_path_regex = r"(?P<notebook_path>.+)"
Brian E. Granger
More work on the handlers
r10647 _checkpoint_id_regex = r"(?P<checkpoint_id>[\w-]+)"
default_handlers = [
Zachary Sailer
manual rebase notebooks web services
r12984 (r"api/notebooks/%s/checkpoints" % _notebook_path_regex, NotebookCheckpointsHandler),
(r"api/notebooks/%s/checkpoints/%s" % (_notebook_path_regex, _checkpoint_id_regex),
ModifyNotebookCheckpointsHandler),
Zachary Sailer
fixing broken links from recent changes....
r13033 (r"api/notebooks/%s/" % _notebook_path_regex, NotebookHandler),
Zachary Sailer
manual rebase notebooks web services
r12984 (r"api/notebooks/%s" % _notebook_path_regex, NotebookHandler),
Zachary Sailer
Added notebooks API tests.
r13041 (r"api/notebooks/", NotebookRootHandler),
Zachary Sailer
manual rebase notebooks web services
r12984 (r"api/notebooks", NotebookRootHandler),
Brian E. Granger
More work on the handlers
r10647 ]
Brian E. Granger
Adding new files.
r10641