diff --git a/IPython/html/nbconvert/handlers.py b/IPython/html/nbconvert/handlers.py index 472e60e..9fa4482 100644 --- a/IPython/html/nbconvert/handlers.py +++ b/IPython/html/nbconvert/handlers.py @@ -13,7 +13,7 @@ from ..base.handlers import ( IPythonHandler, FilesRedirectHandler, notebook_path_regex, path_regex, ) -from IPython.nbformat.current import from_dict +from IPython.nbformat import from_dict from IPython.utils.py3compat import cast_bytes diff --git a/IPython/html/nbconvert/tests/test_nbconvert_handlers.py b/IPython/html/nbconvert/tests/test_nbconvert_handlers.py index 87ce4ba..ffeb723 100644 --- a/IPython/html/nbconvert/tests/test_nbconvert_handlers.py +++ b/IPython/html/nbconvert/tests/test_nbconvert_handlers.py @@ -10,9 +10,10 @@ import requests from IPython.html.utils import url_path_join from IPython.html.tests.launchnotebook import NotebookTestBase, assert_http_error -from IPython.nbformat.current import (new_notebook, write, - new_markdown_cell, new_code_cell, - new_output) +from IPython.nbformat import write +from IPython.nbformat.v4 import ( + new_notebook, new_markdown_cell, new_code_cell, new_output, +) from IPython.testing.decorators import onlyif_cmds_exist @@ -66,7 +67,7 @@ class APITest(NotebookTestBase): with io.open(pjoin(nbdir, 'foo', 'testnb.ipynb'), 'w', encoding='utf-8') as f: - write(nb, f) + write(f, nb, version=4) self.nbconvert_api = NbconvertAPI(self.base_url()) diff --git a/IPython/html/services/contents/filemanager.py b/IPython/html/services/contents/filemanager.py index 7131b5b..cd077f1 100644 --- a/IPython/html/services/contents/filemanager.py +++ b/IPython/html/services/contents/filemanager.py @@ -12,7 +12,7 @@ import shutil from tornado import web from .manager import ContentsManager -from IPython.nbformat import current +from IPython import nbformat from IPython.utils.io import atomic_writing from IPython.utils.path import ensure_dir_exists from IPython.utils.traitlets import Unicode, Bool, TraitError @@ -253,7 +253,7 @@ class FileContentsManager(ContentsManager): os_path = self._get_os_path(name, path) with io.open(os_path, 'r', encoding='utf-8') as f: try: - nb = current.read(f, u'json') + nb = nbformat.read(f, as_version=4) except Exception as e: raise web.HTTPError(400, u"Unreadable Notebook: %s %r" % (os_path, e)) self.mark_trusted_cells(nb, name, path) @@ -295,7 +295,7 @@ class FileContentsManager(ContentsManager): def _save_notebook(self, os_path, model, name='', path=''): """save a notebook file""" # Save the notebook file - nb = current.from_dict(model['content']) + nb = nbformat.from_dict(model['content']) self.check_and_sign(nb, name, path) @@ -303,7 +303,7 @@ class FileContentsManager(ContentsManager): nb['metadata']['name'] = u'' with atomic_writing(os_path, encoding='utf-8') as f: - current.write(nb, f, version=nb.nbformat) + nbformat.write(f, nb, version=nbformat.NO_CONVERT) def _save_file(self, os_path, model, name='', path=''): """save a non-notebook file""" @@ -522,7 +522,7 @@ class FileContentsManager(ContentsManager): # ensure notebook is readable (never restore from an unreadable notebook) if cp_path.endswith('.ipynb'): with io.open(cp_path, 'r', encoding='utf-8') as f: - current.read(f, u'json') + nbformat.read(f, as_version=4) self._copy(cp_path, nb_path) self.log.debug("copying %s -> %s", cp_path, nb_path) diff --git a/IPython/html/services/contents/manager.py b/IPython/html/services/contents/manager.py index ba06072..6d52b10 100644 --- a/IPython/html/services/contents/manager.py +++ b/IPython/html/services/contents/manager.py @@ -11,7 +11,8 @@ import os from tornado.web import HTTPError from IPython.config.configurable import LoggingConfigurable -from IPython.nbformat import current, sign +from IPython.nbformat import sign, validate, ValidationError +from IPython.nbformat.v4 import new_notebook from IPython.utils.traitlets import Instance, Unicode, List @@ -220,8 +221,8 @@ class ContentsManager(LoggingConfigurable): def validate_notebook_model(self, model): """Add failed-validation message to model""" try: - current.validate(model['content']) - except current.ValidationError as e: + validate(model['content']) + except ValidationError as e: model['message'] = 'Notebook Validation failed: {}:\n{}'.format( e.message, json.dumps(e.instance, indent=1, default=lambda obj: '<UNKNOWN>'), ) @@ -234,7 +235,7 @@ class ContentsManager(LoggingConfigurable): model = {} if 'content' not in model and model.get('type', None) != 'directory': if ext == '.ipynb': - model['content'] = current.new_notebook() + model['content'] = new_notebook() model['type'] = 'notebook' model['format'] = 'json' else: @@ -308,13 +309,14 @@ class ContentsManager(LoggingConfigurable): Parameters ---------- nb : dict - The notebook object (in nbformat.current format) + The notebook object (in current nbformat) name : string The filename of the notebook (for logging) path : string The notebook's directory (for logging) """ - if nb['nbformat'] != current.nbformat: + # can't sign old notebooks + if nb['nbformat'] != 4: return if self.notary.check_cells(nb): self.notary.sign(nb) @@ -329,7 +331,7 @@ class ContentsManager(LoggingConfigurable): Parameters ---------- nb : dict - The notebook object (in nbformat.current format) + The notebook object (in current nbformat) name : string The filename of the notebook (for logging) path : string diff --git a/IPython/html/services/contents/tests/test_contents_api.py b/IPython/html/services/contents/tests/test_contents_api.py index 2870295..c2ef6a1 100644 --- a/IPython/html/services/contents/tests/test_contents_api.py +++ b/IPython/html/services/contents/tests/test_contents_api.py @@ -14,9 +14,10 @@ import requests from IPython.html.utils import url_path_join, url_escape from IPython.html.tests.launchnotebook import NotebookTestBase, assert_http_error -from IPython.nbformat import current -from IPython.nbformat.current import (new_notebook, write, read, - new_markdown_cell, from_dict) +from IPython.nbformat import read, write, from_dict +from IPython.nbformat.v4 import ( + new_notebook, new_markdown_cell, +) from IPython.nbformat import v2 from IPython.utils import py3compat from IPython.utils.data import uniq_stable @@ -143,7 +144,7 @@ class APITest(NotebookTestBase): with io.open(pjoin(nbdir, d, '%s.ipynb' % name), 'w', encoding='utf-8') as f: nb = new_notebook() - write(nb, f, format='ipynb') + write(f, nb, version=4) # create a text file with io.open(pjoin(nbdir, d, '%s.txt' % name), 'w', @@ -354,7 +355,7 @@ class APITest(NotebookTestBase): self._check_created(resp, u'Upload tést.ipynb', u'å b') resp = self.api.read(u'Upload tést.ipynb', u'å b') data = resp.json() - self.assertEqual(data['content']['nbformat'], current.nbformat) + self.assertEqual(data['content']['nbformat'], 4) def test_copy_untitled(self): resp = self.api.copy_untitled(u'ç d.ipynb', path=u'å b') @@ -422,7 +423,7 @@ class APITest(NotebookTestBase): nbfile = pjoin(self.notebook_dir.name, 'foo', 'a.ipynb') with io.open(nbfile, 'r', encoding='utf-8') as f: - newnb = read(f, format='ipynb') + newnb = read(f, as_version=4) self.assertEqual(newnb.cells[0].source, u'Created by test ³') nbcontent = self.api.read('a.ipynb', 'foo').json()['content'] diff --git a/IPython/html/services/contents/tests/test_manager.py b/IPython/html/services/contents/tests/test_manager.py index 558f73a..1d419bf 100644 --- a/IPython/html/services/contents/tests/test_manager.py +++ b/IPython/html/services/contents/tests/test_manager.py @@ -9,7 +9,7 @@ from tornado.web import HTTPError from unittest import TestCase from tempfile import NamedTemporaryFile -from IPython.nbformat import current +from IPython.nbformat import v4 as nbformat from IPython.utils.tempdir import TemporaryDirectory from IPython.utils.traitlets import TraitError @@ -95,8 +95,8 @@ class TestContentsManager(TestCase): return os_path def add_code_cell(self, nb): - output = current.new_output("display_data", {'application/javascript': "alert('hi');"}) - cell = current.new_code_cell("print('hi')", outputs=[output]) + output = nbformat.new_output("display_data", {'application/javascript': "alert('hi');"}) + cell = nbformat.new_code_cell("print('hi')", outputs=[output]) nb.cells.append(cell) def new_notebook(self): diff --git a/IPython/html/services/sessions/tests/test_sessions_api.py b/IPython/html/services/sessions/tests/test_sessions_api.py index 643fd68..ad5ef71 100644 --- a/IPython/html/services/sessions/tests/test_sessions_api.py +++ b/IPython/html/services/sessions/tests/test_sessions_api.py @@ -11,7 +11,8 @@ pjoin = os.path.join from IPython.html.utils import url_path_join from IPython.html.tests.launchnotebook import NotebookTestBase, assert_http_error -from IPython.nbformat.current import new_notebook, write +from IPython.nbformat.v4 import new_notebook +from IPython.nbformat import write class SessionAPI(object): """Wrapper for notebook API calls.""" @@ -63,7 +64,7 @@ class SessionAPITest(NotebookTestBase): with io.open(pjoin(nbdir, 'foo', 'nb1.ipynb'), 'w', encoding='utf-8') as f: nb = new_notebook() - write(nb, f, format='ipynb') + write(f, nb, version=4) self.sess_api = SessionAPI(self.base_url()) diff --git a/IPython/html/tests/test_files.py b/IPython/html/tests/test_files.py index b891618..4c75f5b 100644 --- a/IPython/html/tests/test_files.py +++ b/IPython/html/tests/test_files.py @@ -10,7 +10,8 @@ pjoin = os.path.join import requests import json -from IPython.nbformat.current import (new_notebook, write, +from IPython.nbformat import write +from IPython.nbformat.v4 import (new_notebook, new_markdown_cell, new_code_cell, new_output) @@ -73,7 +74,7 @@ class FilesTest(NotebookTestBase): with io.open(pjoin(nbdir, 'testnb.ipynb'), 'w', encoding='utf-8') as f: - write(nb, f) + write(f, nb, version=4) with io.open(pjoin(nbdir, 'test.bin'), 'wb') as f: f.write(b'\xff' + os.urandom(5))