diff --git a/IPython/html/services/contents/filemanager.py b/IPython/html/services/contents/filemanager.py
index 25c2201..9a1ab9f 100644
--- a/IPython/html/services/contents/filemanager.py
+++ b/IPython/html/services/contents/filemanager.py
@@ -512,19 +512,6 @@ class FileContentsManager(ContentsManager):
return model
- def update(self, model, path):
- """Update the file's path
-
- For use in PATCH requests, to enable renaming a file without
- re-uploading its contents. Only used for renaming at the moment.
- """
- path = path.strip('/')
- new_path = model.get('path', path).strip('/')
- if path != new_path:
- self.rename(path, new_path)
- model = self.get(new_path, content=False)
- return model
-
def delete(self, path):
"""Delete file at path."""
path = path.strip('/')
diff --git a/IPython/html/services/contents/manager.py b/IPython/html/services/contents/manager.py
index 82b87ad..d876c09 100644
--- a/IPython/html/services/contents/manager.py
+++ b/IPython/html/services/contents/manager.py
@@ -186,14 +186,6 @@ class ContentsManager(LoggingConfigurable):
"""
raise NotImplementedError('must be implemented in a subclass')
- def update(self, model, path):
- """Update the file or directory and return the model with no content.
-
- For use in PATCH requests, to enable renaming a file without
- re-uploading its contents. Only used for renaming at the moment.
- """
- raise NotImplementedError('must be implemented in a subclass')
-
def delete(self, path):
"""Delete file or directory by path."""
raise NotImplementedError('must be implemented in a subclass')
@@ -220,6 +212,19 @@ class ContentsManager(LoggingConfigurable):
# ContentsManager API part 2: methods that have useable default
# implementations, but can be overridden in subclasses.
+ def update(self, model, path):
+ """Update the file's path
+
+ For use in PATCH requests, to enable renaming a file without
+ re-uploading its contents. Only used for renaming at the moment.
+ """
+ path = path.strip('/')
+ new_path = model.get('path', path).strip('/')
+ if path != new_path:
+ self.rename(path, new_path)
+ model = self.get(new_path, content=False)
+ return model
+
def info_string(self):
return "Serving contents"