##// END OF EJS Templates
one more bit
one more bit

File last commit:

r12493:45906317
r17327:020d9649
Show More
convert.py
89 lines | 2.7 KiB | text/x-python | PythonLexer
Brian E. Granger
More review changes....
r4609 """Code for converting notebooks to and from the v2 format.
Authors:
* Brian Granger
Jonathan Frederic
Notebook version conversions done right?
r12493 * Min RK
* Jonathan Frederic
Brian E. Granger
More review changes....
r4609 """
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2011 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
#-----------------------------------------------------------------------------
Brian E. Granger
Full versioning added to nbformat.
r4406 from .nbbase import (
MinRK
add nbformat_minor for minor revisions to nbformat
r7545 new_code_cell, new_text_cell, new_worksheet, new_notebook, new_output,
nbformat, nbformat_minor
Brian E. Granger
Full versioning added to nbformat.
r4406 )
Brian Granger
More work updating nbformat....
r6026 from IPython.nbformat import v2
Brian E. Granger
More review changes....
r4609 #-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
Jonathan Frederic
Notebook version conversions done right?
r12493 def upgrade(nb, from_version=2, from_minor=0):
"""Convert a notebook to v3.
Brian E. Granger
More review changes....
r4609
Parameters
----------
nb : NotebookNode
The Python representation of the notebook to convert.
Jonathan Frederic
Notebook version conversions done right?
r12493 from_version : int
Brian E. Granger
More review changes....
r4609 The original version of the notebook to convert.
Jonathan Frederic
Notebook version conversions done right?
r12493 from_minor : int
MinRK
add nbformat_minor for minor revisions to nbformat
r7545 The original minor version of the notebook to convert (only relevant for v >= 3).
Brian E. Granger
More review changes....
r4609 """
Jonathan Frederic
Notebook version conversions done right?
r12493 if from_version == 2:
Brian Granger
Proper error handling for nbformat versions in client code....
r6061 # Mark the original nbformat so consumers know it has been converted.
MinRK
add nbformat_minor for minor revisions to nbformat
r7545 nb.nbformat = nbformat
nb.nbformat_minor = nbformat_minor
Brian Granger
Proper error handling for nbformat versions in client code....
r6061 nb.orig_nbformat = 2
Brian Granger
More work updating nbformat....
r6026 return nb
Jonathan Frederic
Notebook version conversions done right?
r12493 elif from_version == 3:
if from_minor != nbformat_minor:
nb.orig_nbformat_minor = from_minor
MinRK
add nbformat_minor for minor revisions to nbformat
r7545 nb.nbformat_minor = nbformat_minor
Brian Granger
More work updating nbformat....
r6026 return nb
Brian E. Granger
Full versioning added to nbformat.
r4406 else:
Jonathan Frederic
Notebook version conversions done right?
r12493 raise ValueError('Cannot convert a notebook directly from v%s to v3. ' \
'Try using the IPython.nbformat.convert module.' % from_version)
Brian E. Granger
Full versioning added to nbformat.
r4406
Jonathan Frederic
Notebook version conversions done right?
r12493 def heading_to_md(cell):
"""turn heading cell into corresponding markdown"""
cell.cell_type = "markdown"
level = cell.pop('level', 1)
cell.source = '#'*level + ' ' + cell.source
def raw_to_md(cell):
"""let raw passthrough as markdown"""
cell.cell_type = "markdown"
def downgrade(nb):
"""Convert a v3 notebook to v2.
Parameters
----------
nb : NotebookNode
The Python representation of the notebook to convert.
"""
if nb.nbformat != 3:
return nb
nb.nbformat = 2
for ws in nb.worksheets:
for cell in ws.cells:
if cell.cell_type == 'heading':
heading_to_md(cell)
elif cell.cell_type == 'raw':
raw_to_md(cell)
return nb