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)