diff --git a/IPython/html/services/contents/checkpoints.py b/IPython/html/services/contents/checkpoints.py
index 6cea13c1d..d87b7cc95 100644
--- a/IPython/html/services/contents/checkpoints.py
+++ b/IPython/html/services/contents/checkpoints.py
@@ -5,6 +5,8 @@ Classes for managing Checkpoints.
# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
+from tornado.web import HTTPError
+
from IPython.config.configurable import LoggingConfigurable
@@ -59,17 +61,18 @@ class GenericCheckpointsMixin(object):
Provides a ContentsManager-agnostic implementation of `create_checkpoint`
and `restore_checkpoint` in terms of the following operations:
- create_file_checkpoint(self, content, format, path)
- create_notebook_checkpoint(self, nb, path)
- get_checkpoint(self, checkpoint_id, path, type)
+ - create_file_checkpoint(self, content, format, path)
+ - create_notebook_checkpoint(self, nb, path)
+ - get_file_checkpoint(self, checkpoint_id, path)
+ - get_notebook_checkpoint(self, checkpoint_id, path)
To create a generic CheckpointManager, add this mixin to a class that
implement the above three methods plus the remaining Checkpoints API
methods:
- delete_checkpoint(self, checkpoint_id, path)
- list_checkpoints(self, path)
- rename_checkpoint(self, checkpoint_id, old_path, new_path)
+ - delete_checkpoint(self, checkpoint_id, path)
+ - list_checkpoints(self, path)
+ - rename_checkpoint(self, checkpoint_id, old_path, new_path)
"""
def create_checkpoint(self, contents_mgr, path):
@@ -86,11 +89,18 @@ class GenericCheckpointsMixin(object):
model['format'],
path,
)
+ else:
+ raise HTTPError(500, u'Unexpected type %s' % type)
def restore_checkpoint(self, contents_mgr, checkpoint_id, path):
"""Restore a checkpoint."""
type = contents_mgr.get(path, content=False)['type']
- model = self.get_checkpoint(checkpoint_id, path, type)
+ if type == 'notebook':
+ model = self.get_notebook_checkpoint(checkpoint_id, path)
+ elif type == 'file':
+ model = self.get_file_checkpoint(checkpoint_id, path)
+ else:
+ raise HTTPError(500, u'Unexpected type %s' % type)
contents_mgr.save(model, path)
# Required Methods
diff --git a/IPython/html/services/contents/filecheckpoints.py b/IPython/html/services/contents/filecheckpoints.py
index 17774836e..425bae359 100644
--- a/IPython/html/services/contents/filecheckpoints.py
+++ b/IPython/html/services/contents/filecheckpoints.py
@@ -167,31 +167,34 @@ class GenericFileCheckpoints(GenericCheckpointsMixin, FileCheckpoints):
# return the checkpoint info
return self.checkpoint_model(checkpoint_id, os_checkpoint_path)
- def get_checkpoint(self, checkpoint_id, path, type):
- """Get the content of a checkpoint.
+ def get_notebook_checkpoint(self, checkpoint_id, path):
- Returns a model suitable for passing to ContentsManager.save.
- """
path = path.strip('/')
self.log.info("restoring %s from checkpoint %s", path, checkpoint_id)
os_checkpoint_path = self.checkpoint_path(checkpoint_id, path)
+
if not os.path.isfile(os_checkpoint_path):
self.no_such_checkpoint(path, checkpoint_id)
- if type == 'notebook':
- return {
- 'type': type,
- 'content': self._read_notebook(
- os_checkpoint_path,
- as_version=4,
- ),
- }
- elif type == 'file':
- content, format = self._read_file(os_checkpoint_path, format=None)
- return {
- 'type': type,
- 'content': content,
- 'format': format,
- }
- else:
- raise HTTPError(500, u'Unexpected type %s' % type)
+ return {
+ 'type': 'notebook',
+ 'content': self._read_notebook(
+ os_checkpoint_path,
+ as_version=4,
+ ),
+ }
+
+ def get_file_checkpoint(self, checkpoint_id, path):
+ path = path.strip('/')
+ self.log.info("restoring %s from checkpoint %s", path, checkpoint_id)
+ os_checkpoint_path = self.checkpoint_path(checkpoint_id, path)
+
+ if not os.path.isfile(os_checkpoint_path):
+ self.no_such_checkpoint(path, checkpoint_id)
+
+ content, format = self._read_file(os_checkpoint_path, format=None)
+ return {
+ 'type': 'file',
+ 'content': content,
+ 'format': format,
+ }