diff --git a/IPython/html/notebook/handlers.py b/IPython/html/notebook/handlers.py index fd0e3fac4..673001727 100644 --- a/IPython/html/notebook/handlers.py +++ b/IPython/html/notebook/handlers.py @@ -17,10 +17,10 @@ Authors: #----------------------------------------------------------------------------- import os +import json + from tornado import web HTTPError = web.HTTPError -from zmq.utils import jsonapi - from ..base.handlers import IPythonHandler from ..services.notebooks.handlers import _notebook_path_regex, _path_regex @@ -34,33 +34,14 @@ from urllib import quote class NotebookHandler(IPythonHandler): - @web.authenticated - def post(self): - """post either creates a new notebook if no json data is - sent to the server, or copies the data and returns a - copied notebook.""" - nbm = self.notebook_manager - data=self.request.body - if data: - data = jsonapi.loads(data) - notebook_name = nbm.copy_notebook(data['name']) - else: - notebook_name = nbm.new_notebook() - self.finish(jsonapi.dumps({"name": notebook_name})) - - -class NamedNotebookHandler(IPythonHandler): - @web.authenticated def get(self, path='', name=None): """get renders the notebook template if a name is given, or redirects to the '/files/' handler if the name is not given.""" nbm = self.notebook_manager if name is None: - url = url_path_join(self.base_project_url, 'files', path) - self.redirect(url) - return - + raise web.HTTPError(500, "This shouldn't be accessible: %s" % self.request.uri) + # 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)) @@ -75,20 +56,17 @@ class NamedNotebookHandler(IPythonHandler): ) ) - @web.authenticated - def post(self, path='', name=None): - """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.""" +class NotebookRedirectHandler(IPythonHandler): + def get(self, path=''): nbm = self.notebook_manager - data = self.request.body - if data: - data = jsonapi.loads(data) - notebook_name = nbm.copy_notebook(data['name'], notebook_path) + if nbm.path_exists(path): + # it's a *directory*, redirect to /tree + url = url_path_join(self.base_project_url, 'tree', path) else: - notebook_name = nbm.new_notebook(notebook_path) - self.finish(jsonapi.dumps({"name": notebook_name})) - + # otherwise, redirect to /files + # TODO: This should check if it's actually a file + url = url_path_join(self.base_project_url, 'files', path) + self.redirect(url) #----------------------------------------------------------------------------- # URL to handler mappings @@ -96,8 +74,7 @@ class NamedNotebookHandler(IPythonHandler): default_handlers = [ - (r"/notebooks/?%s" % _notebook_path_regex, NamedNotebookHandler), - (r"/notebooks/?%s" % _path_regex, NamedNotebookHandler), - (r"/notebooks/?", NotebookHandler), + (r"/notebooks/?%s" % _notebook_path_regex, NotebookHandler), + (r"/notebooks/?%s" % _path_regex, NotebookRedirectHandler), ]