##// END OF EJS Templates
Fix imports of builtins module
Fix imports of builtins module

File last commit:

r13346:b31eb2f2 merge
r13351:bc5975b5
Show More
current.py
200 lines | 5.5 KiB | text/x-python | PythonLexer
Brian E. Granger
More review changes....
r4609 """The official API for working with notebooks in the current format version.
Authors:
* Brian Granger
Jonathan Frederic
Notebook version conversions done right?
r12493 * 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
Implemented metadata for notebook format.
r4637 from __future__ import print_function
Jonathan Frederic
Notebook version conversions done right?
r12493
Brian E. Granger
Full versioning added to nbformat.
r4406 from xml.etree import ElementTree as ET
import re
Brian Granger
Changing rst->plaintext in nbformat.
r6025 from IPython.nbformat.v3 import (
Brian E. Granger
Massive work on the notebook document format....
r4484 NotebookNode,
Brian E. Granger
Created new notebook magic that can export/convert notebooks....
r4520 new_code_cell, new_text_cell, new_notebook, new_output, new_worksheet,
MinRK
add nbformat_minor for minor revisions to nbformat
r7545 parse_filename, new_metadata, new_author, new_heading_cell, nbformat,
Brian E. Granger
Review and refactoring of notebooks web service.
r13051 nbformat_minor, to_notebook_json
Brian E. Granger
Massive work on the notebook document format....
r4484 )
Jonathan Frederic
Relative import
r12753 from .reader import reads as reader_reads
from .reader import versions
Jonathan Frederic
Notebook version conversions done right?
r12493 from .convert import convert
Brian E. Granger
More review changes....
r4609 #-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
Brian E. Granger
Full versioning added to nbformat.
r4406
Brian Granger
Proper error handling for nbformat versions in client code....
r6061 current_nbformat = nbformat
MinRK
add nbformat_minor for minor revisions to nbformat
r7545 current_nbformat_minor = nbformat_minor
Brian E. Granger
Full versioning added to nbformat.
r4406
MinRK
better message when notebook format is not supported...
r11643 class NBFormatError(ValueError):
pass
Brian E. Granger
Full versioning added to nbformat.
r4406
def parse_py(s, **kwargs):
"""Parse a string into a (nbformat, string) tuple."""
MinRK
add minor-version support to .py export
r7566 nbf = current_nbformat
nbm = current_nbformat_minor
pattern = r'# <nbformat>(?P<nbformat>\d+[\.\d+]*)</nbformat>'
Brian E. Granger
Full versioning added to nbformat.
r4406 m = re.search(pattern,s)
if m is not None:
MinRK
add minor-version support to .py export
r7566 digits = m.group('nbformat').split('.')
nbf = int(digits[0])
if len(digits) > 1:
nbm = int(digits[1])
return nbf, nbm, s
Brian E. Granger
Full versioning added to nbformat.
r4406
def reads_json(s, **kwargs):
"""Read a JSON notebook from a string and return the NotebookNode object."""
Jonathan Frederic
Relative import
r12753 return convert(reader_reads(s), current_nbformat)
Brian E. Granger
Full versioning added to nbformat.
r4406
def writes_json(nb, **kwargs):
Jonathan Frederic
Relative import
r12753 return versions[current_nbformat].writes_json(nb, **kwargs)
Brian E. Granger
Full versioning added to nbformat.
r4406
def reads_py(s, **kwargs):
"""Read a .py notebook from a string and return the NotebookNode object."""
MinRK
add minor-version support to .py export
r7566 nbf, nbm, s = parse_py(s, **kwargs)
Jonathan Frederic
Some small fixes and changes of nb version conversion
r12755 if nbf in (2, 3):
Jonathan Frederic
Relative import
r12753 nb = versions[nbf].to_notebook_py(s, **kwargs)
Brian E. Granger
Full versioning added to nbformat.
r4406 else:
Brian Granger
Proper error handling for nbformat versions in client code....
r6061 raise NBFormatError('Unsupported PY nbformat version: %i' % nbf)
Brian E. Granger
Full versioning added to nbformat.
r4406 return nb
def writes_py(nb, **kwargs):
Jonathan Frederic
Notebook version conversions done right?
r12493 # nbformat 3 is the latest format that supports py
Jonathan Frederic
Relative import
r12753 return versions[3].writes_py(nb, **kwargs)
Brian E. Granger
Full versioning added to nbformat.
r4406
# High level API
def reads(s, format, **kwargs):
"""Read a notebook from a string and return the NotebookNode object.
This function properly handles notebooks of any version. The notebook
returned will always be in the current version's format.
Parameters
----------
Brian E. Granger
Implemented metadata for notebook format.
r4637 s : unicode
The raw unicode string to read the notebook from.
format : (u'json', u'ipynb', u'py')
Brian E. Granger
Full versioning added to nbformat.
r4406 The format that the string is in.
Returns
-------
nb : NotebookNode
The notebook that was read.
"""
Brian E. Granger
Implemented metadata for notebook format.
r4637 format = unicode(format)
Brian Granger
Removing old xml notebook format.
r6021 if format == u'json' or format == u'ipynb':
Brian E. Granger
Full versioning added to nbformat.
r4406 return reads_json(s, **kwargs)
Brian E. Granger
Implemented metadata for notebook format.
r4637 elif format == u'py':
Brian E. Granger
Full versioning added to nbformat.
r4406 return reads_py(s, **kwargs)
else:
raise NBFormatError('Unsupported format: %s' % format)
def writes(nb, format, **kwargs):
"""Write a notebook to a string in a given format in the current nbformat version.
This function always writes the notebook in the current nbformat version.
Parameters
----------
nb : NotebookNode
The notebook to write.
Brian E. Granger
Implemented metadata for notebook format.
r4637 format : (u'json', u'ipynb', u'py')
Brian E. Granger
Full versioning added to nbformat.
r4406 The format to write the notebook in.
Returns
-------
Brian E. Granger
Implemented metadata for notebook format.
r4637 s : unicode
Brian E. Granger
Full versioning added to nbformat.
r4406 The notebook string.
"""
Brian E. Granger
Implemented metadata for notebook format.
r4637 format = unicode(format)
Brian Granger
Removing old xml notebook format.
r6021 if format == u'json' or format == u'ipynb':
Brian E. Granger
Full versioning added to nbformat.
r4406 return writes_json(nb, **kwargs)
Brian E. Granger
Implemented metadata for notebook format.
r4637 elif format == u'py':
Brian E. Granger
Full versioning added to nbformat.
r4406 return writes_py(nb, **kwargs)
else:
raise NBFormatError('Unsupported format: %s' % format)
def read(fp, format, **kwargs):
"""Read a notebook from a file and return the NotebookNode object.
This function properly handles notebooks of any version. The notebook
returned will always be in the current version's format.
Parameters
----------
fp : file
Any file-like object with a read method.
Brian E. Granger
Implemented metadata for notebook format.
r4637 format : (u'json', u'ipynb', u'py')
Brian E. Granger
Full versioning added to nbformat.
r4406 The format that the string is in.
Returns
-------
nb : NotebookNode
The notebook that was read.
"""
return reads(fp.read(), format, **kwargs)
def write(nb, fp, format, **kwargs):
"""Write a notebook to a file in a given format in the current nbformat version.
This function always writes the notebook in the current nbformat version.
Parameters
----------
nb : NotebookNode
The notebook to write.
fp : file
Any file-like object with a write method.
Brian E. Granger
Implemented metadata for notebook format.
r4637 format : (u'json', u'ipynb', u'py')
Brian E. Granger
Full versioning added to nbformat.
r4406 The format to write the notebook in.
Returns
-------
Brian E. Granger
Implemented metadata for notebook format.
r4637 s : unicode
Brian E. Granger
Full versioning added to nbformat.
r4406 The notebook string.
"""
return fp.write(writes(nb, format, **kwargs))
Brian E. Granger
Implemented metadata for notebook format.
r4637 def _convert_to_metadata():
"""Convert to a notebook having notebook metadata."""
import glob
for fname in glob.glob('*.ipynb'):
print('Converting file:',fname)
with open(fname,'r') as f:
nb = read(f,u'json')
md = new_metadata()
if u'name' in nb:
md.name = nb.name
del nb[u'name']
nb.metadata = md
with open(fname,'w') as f:
write(nb, f, u'json')
Brian E. Granger
Full versioning added to nbformat.
r4406