convert.py
89 lines
| 2.7 KiB
| text/x-python
|
PythonLexer
Brian E. Granger
|
r4609 | """Code for converting notebooks to and from the v2 format. | |
Authors: | |||
* Brian Granger | |||
Jonathan Frederic
|
r12493 | * Min RK | |
* Jonathan Frederic | |||
Brian E. Granger
|
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
|
r4406 | from .nbbase import ( | |
MinRK
|
r7545 | new_code_cell, new_text_cell, new_worksheet, new_notebook, new_output, | |
nbformat, nbformat_minor | |||
Brian E. Granger
|
r4406 | ) | |
Brian Granger
|
r6026 | from IPython.nbformat import v2 | |
Brian E. Granger
|
r4609 | #----------------------------------------------------------------------------- | |
# Code | |||
#----------------------------------------------------------------------------- | |||
Jonathan Frederic
|
r12493 | def upgrade(nb, from_version=2, from_minor=0): | |
"""Convert a notebook to v3. | |||
Brian E. Granger
|
r4609 | ||
Parameters | |||
---------- | |||
nb : NotebookNode | |||
The Python representation of the notebook to convert. | |||
Jonathan Frederic
|
r12493 | from_version : int | |
Brian E. Granger
|
r4609 | The original version of the notebook to convert. | |
Jonathan Frederic
|
r12493 | from_minor : int | |
MinRK
|
r7545 | The original minor version of the notebook to convert (only relevant for v >= 3). | |
Brian E. Granger
|
r4609 | """ | |
Jonathan Frederic
|
r12493 | if from_version == 2: | |
Brian Granger
|
r6061 | # Mark the original nbformat so consumers know it has been converted. | |
MinRK
|
r7545 | nb.nbformat = nbformat | |
nb.nbformat_minor = nbformat_minor | |||
Brian Granger
|
r6061 | nb.orig_nbformat = 2 | |
Brian Granger
|
r6026 | return nb | |
Jonathan Frederic
|
r12493 | elif from_version == 3: | |
if from_minor != nbformat_minor: | |||
nb.orig_nbformat_minor = from_minor | |||
MinRK
|
r7545 | nb.nbformat_minor = nbformat_minor | |
Brian Granger
|
r6026 | return nb | |
Brian E. Granger
|
r4406 | else: | |
Jonathan Frederic
|
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
|
r4406 | ||
Jonathan Frederic
|
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 |