diff --git a/IPython/html/services/notebooks/azurenbmanager.py b/IPython/html/services/notebooks/azurenbmanager.py deleted file mode 100644 index 1d23e1d..0000000 --- a/IPython/html/services/notebooks/azurenbmanager.py +++ /dev/null @@ -1,143 +0,0 @@ -"""A notebook manager that uses Azure blob storage. - -Authors: - -* Brian Granger -""" - -#----------------------------------------------------------------------------- -# Copyright (C) 2012 The IPython Development Team -# -# Distributed under the terms of the BSD License. The full license is in -# the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- - -#----------------------------------------------------------------------------- -# Imports -#----------------------------------------------------------------------------- - -import datetime - -import azure -from azure.storage import BlobService - -from tornado import web - -from .nbmanager import NotebookManager -from IPython.nbformat import current -from IPython.utils.traitlets import Unicode, Instance -from IPython.utils import tz - -#----------------------------------------------------------------------------- -# Classes -#----------------------------------------------------------------------------- - -class AzureNotebookManager(NotebookManager): - - account_name = Unicode('', config=True, help='Azure storage account name.') - account_key = Unicode('', config=True, help='Azure storage account key.') - container = Unicode('', config=True, help='Container name for notebooks.') - - blob_service_host_base = Unicode('.blob.core.windows.net', config=True, - help='The basename for the blob service URL. If running on the preview site this ' - 'will be .blob.core.azure-preview.com.') - def _blob_service_host_base_changed(self, new): - self._update_service_host_base(new) - - blob_service = Instance('azure.storage.BlobService') - def _blob_service_default(self): - return BlobService(account_name=self.account_name, account_key=self.account_key) - - def __init__(self, **kwargs): - super(AzureNotebookManager, self).__init__(**kwargs) - self._update_service_host_base(self.blob_service_host_base) - self._create_container() - - def _update_service_host_base(self, shb): - azure.BLOB_SERVICE_HOST_BASE = shb - - def _create_container(self): - self.blob_service.create_container(self.container) - - def load_notebook_names(self): - """On startup load the notebook ids and names from Azure. - - The blob names are the notebook ids and the notebook names are stored - as blob metadata. - """ - self.mapping = {} - blobs = self.blob_service.list_blobs(self.container) - ids = [blob.name for blob in blobs] - - for id in ids: - md = self.blob_service.get_blob_metadata(self.container, id) - name = md['x-ms-meta-nbname'] - self.mapping[id] = name - - def list_notebooks(self): - """List all notebooks in the container. - - This version uses `self.mapping` as the authoritative notebook list. - """ - data = [dict(notebook_id=id,name=name) for id, name in self.mapping.items()] - data = sorted(data, key=lambda item: item['name']) - return data - - def read_notebook_object(self, notebook_id): - """Get the object representation of a notebook by notebook_id.""" - if not self.notebook_exists(notebook_id): - raise web.HTTPError(404, u'Notebook does not exist: %s' % notebook_id) - try: - s = self.blob_service.get_blob(self.container, notebook_id) - except: - raise web.HTTPError(500, u'Notebook cannot be read.') - try: - # v1 and v2 and json in the .ipynb files. - nb = current.reads(s, u'json') - except: - raise web.HTTPError(500, u'Unreadable JSON notebook.') - # Todo: The last modified should actually be saved in the notebook document. - # We are just using the current datetime until that is implemented. - last_modified = tz.utcnow() - return last_modified, nb - - def write_notebook_object(self, nb, notebook_id=None): - """Save an existing notebook object by notebook_id.""" - try: - new_name = nb.metadata.name - except AttributeError: - raise web.HTTPError(400, u'Missing notebook name') - - if notebook_id is None: - notebook_id = self.new_notebook_id(new_name) - - if notebook_id not in self.mapping: - raise web.HTTPError(404, u'Notebook does not exist: %s' % notebook_id) - - try: - data = current.writes(nb, u'json') - except Exception as e: - raise web.HTTPError(400, u'Unexpected error while saving notebook: %s' % e) - - metadata = {'nbname': new_name} - try: - self.blob_service.put_blob(self.container, notebook_id, data, 'BlockBlob', x_ms_meta_name_values=metadata) - except Exception as e: - raise web.HTTPError(400, u'Unexpected error while saving notebook: %s' % e) - - self.mapping[notebook_id] = new_name - return notebook_id - - def delete_notebook(self, notebook_id): - """Delete notebook by notebook_id.""" - if not self.notebook_exists(notebook_id): - raise web.HTTPError(404, u'Notebook does not exist: %s' % notebook_id) - try: - self.blob_service.delete_blob(self.container, notebook_id) - except Exception as e: - raise web.HTTPError(400, u'Unexpected error while deleting notebook: %s' % e) - else: - self.delete_notebook_id(notebook_id) - - def info_string(self): - return "Serving notebooks from Azure storage: %s, %s" % (self.account_name, self.container)