##// END OF EJS Templates
Merge pull request #4979 from minrk/clear-output-msgspec...
Merge pull request #4979 from minrk/clear-output-msgspec add versioning notes to small message spec changes

File last commit:

r13587:210d5e2f
r15001:cf7b62ae merge
Show More
convert.py
72 lines | 2.7 KiB | text/x-python | PythonLexer
Jonathan Frederic
Added top level convert class, updated init.py to load v#s
r12490 """API for converting notebooks between versions.
Authors:
* Jonathan Frederic
"""
#-----------------------------------------------------------------------------
Jonathan Frederic
Notebook version conversions done right?
r12493 # Copyright (C) 2013 The IPython Development Team
Jonathan Frederic
Added top level convert class, updated init.py to load v#s
r12490 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import re
Jonathan Frederic
Notebook version conversions done right?
r12493 from .reader import get_version, versions
Jonathan Frederic
Added top level convert class, updated init.py to load v#s
r12490
#-----------------------------------------------------------------------------
# Functions
#-----------------------------------------------------------------------------
Jonathan Frederic
Notebook version conversions done right?
r12493 def convert(nb, to_version):
"""Convert a notebook node object to a specific version. Assumes that
all the versions starting from 1 to the latest major X are implemented.
In other words, there should never be a case where v1 v2 v3 v5 exist without
a v4. Also assumes that all conversions can be made in one step increments
between major versions and ignores minor revisions.
Thomas Kluyver
Clean up numpydoc section headers
r13587 Parameters
----------
Jonathan Frederic
Notebook version conversions done right?
r12493 nb : NotebookNode
to_version : int
Major revision to convert the notebook to. Can either be an upgrade or
a downgrade.
"""
Jonathan Frederic
Added top level convert class, updated init.py to load v#s
r12490
# Get input notebook version.
Jonathan Frederic
Notebook version conversions done right?
r12493 (version, version_minor) = get_version(nb)
Jonathan Frederic
Added top level convert class, updated init.py to load v#s
r12490
# Check if destination is current version, if so return contents
Jonathan Frederic
Notebook version conversions done right?
r12493 if version == to_version:
Jonathan Frederic
Added top level convert class, updated init.py to load v#s
r12490 return nb
Jonathan Frederic
Notebook version conversions done right?
r12493 # If the version exist, try to convert to it one step at a time.
Jonathan Frederic
Added nbformat ver conv tests, fixed some bugs
r12781 elif to_version in versions:
Jonathan Frederic
Notebook version conversions done right?
r12493
# Get the the version that this recursion will convert to as a step
# closer to the final revision. Make sure the newer of the conversion
# functions is used to perform the conversion.
if to_version > version:
step_version = version + 1
convert_function = versions[step_version].upgrade
Jonathan Frederic
Added top level convert class, updated init.py to load v#s
r12490 else:
Jonathan Frederic
Notebook version conversions done right?
r12493 step_version = version - 1
convert_function = versions[version].downgrade
# Convert and make sure version changed during conversion.
Jonathan Frederic
Added test nbs to setup and removed todo
r12787 converted = convert_function(nb)
Jonathan Frederic
Notebook version conversions done right?
r12493 if converted.get('nbformat', 1) == version:
raise Exception("Cannot convert notebook from v%d to v%d. Operation" \
"failed silently." % (major, step_version))
Jonathan Frederic
Added top level convert class, updated init.py to load v#s
r12490
Jonathan Frederic
Spelling/typos fixes
r12921 # Recursively convert until target version is reached.
Jonathan Frederic
Notebook version conversions done right?
r12493 return convert(converted, to_version)
Jonathan Frederic
Added top level convert class, updated init.py to load v#s
r12490 else:
Jonathan Frederic
Notebook version conversions done right?
r12493 raise Exception("Cannot convert notebook to v%d because that " \
"version doesn't exist" % (to_version))