From 6e8c4a325332a816a2a94e869f6337dd17de05e7 2013-10-18 23:35:03 From: MinRK Date: 2013-10-18 23:35:03 Subject: [PATCH] copy_from in json, not in url param --- diff --git a/IPython/html/services/notebooks/handlers.py b/IPython/html/services/notebooks/handlers.py index adcd852..e52e559 100644 --- a/IPython/html/services/notebooks/handlers.py +++ b/IPython/html/services/notebooks/handlers.py @@ -150,15 +150,19 @@ class NotebookHandler(IPythonHandler): POST /api/notebooks/path?copy=OtherNotebook.ipynb : new copy of OtherNotebook in path """ - model = self.get_json_body() - copy = self.get_argument("copy", default="") if name is not None: - raise web.HTTPError(400, "Only POST to directories. Use PUT for full names") + raise web.HTTPError(400, "Only POST to directories. Use PUT for full names.") + + model = self.get_json_body() - if copy: - self._copy_notebook(copy, path) - elif model: - self._upload_notebook(model, path) + if model is not None: + copy_from = model.get('copy_from') + if copy_from: + if model.get('content'): + raise web.HTTPError(400, "Can't upload and copy at the same time.") + self._copy_notebook(copy_from, path) + else: + self._upload_notebook(model, path) else: self._create_empty_notebook(path) @@ -178,14 +182,15 @@ class NotebookHandler(IPythonHandler): """ if name is None: raise web.HTTPError(400, "Only PUT to full names. Use POST for directories.") + model = self.get_json_body() - copy = self.get_argument("copy", default="") - if copy: - if model is not None: - raise web.HTTPError(400) - self._copy_notebook(copy, path, name) - elif model: - if self.notebook_manager.notebook_exists(name, path): + if model: + copy_from = model.get('copy_from') + if copy_from: + if model.get('content'): + raise web.HTTPError(400, "Can't upload and copy at the same time.") + self._copy_notebook(copy_from, path, name) + elif self.notebook_manager.notebook_exists(name, path): self._save_notebook(model, path, name) else: self._upload_notebook(model, path, name) diff --git a/IPython/html/services/notebooks/tests/test_notebooks_api.py b/IPython/html/services/notebooks/tests/test_notebooks_api.py index 16aefa8..06c5327 100644 --- a/IPython/html/services/notebooks/tests/test_notebooks_api.py +++ b/IPython/html/services/notebooks/tests/test_notebooks_api.py @@ -2,6 +2,7 @@ """Test the notebooks webservice API.""" import io +import json import os import shutil from unicodedata import normalize @@ -25,11 +26,10 @@ class NBAPI(object): def __init__(self, base_url): self.base_url = base_url - def _req(self, verb, path, body=None, params=None): + def _req(self, verb, path, body=None): response = requests.request(verb, url_path_join(self.base_url, 'api/notebooks', path), data=body, - params=params, ) response.raise_for_status() return response @@ -47,7 +47,8 @@ class NBAPI(object): return self._req('POST', path, body) def copy_untitled(self, copy_from, path='/'): - return self._req('POST', path, params={'copy':copy_from}) + body = json.dumps({'copy_from':copy_from}) + return self._req('POST', path, body) def create(self, name, path='/'): return self._req('PUT', url_path_join(path, name)) @@ -56,7 +57,8 @@ class NBAPI(object): return self._req('PUT', url_path_join(path, name), body) def copy(self, copy_from, copy_to, path='/'): - return self._req('PUT', url_path_join(path, copy_to), params={'copy':copy_from}) + body = json.dumps({'copy_from':copy_from}) + return self._req('PUT', url_path_join(path, copy_to), body) def save(self, name, body, path='/'): return self._req('PUT', url_path_join(path, name), body)