##// END OF EJS Templates
Massive work on the notebook document format....
Massive work on the notebook document format. * Finished nbformat work and debugged the versioning API. * Integrated the nbformat with the notebook. Save/New/Open/Export are all now working.

File last commit:

r4484:65666c0b
r4484:65666c0b
Show More
nbpy.py
56 lines | 1.6 KiB | text/x-python | PythonLexer
Brian E. Granger
Adding nbformat subpackage.
r4392 """Read and write notebooks as regular .py files."""
Brian E. Granger
Initial draft of more formal notebook format....
r4401 from .rwbase import NotebookReader, NotebookWriter
from .nbbase import new_code_cell, new_worksheet, new_notebook
Brian E. Granger
Adding nbformat subpackage.
r4392
class PyReader(NotebookReader):
Brian E. Granger
Initial draft of more formal notebook format....
r4401 def reads(self, s, **kwargs):
Brian E. Granger
Full versioning added to nbformat.
r4406 return self.to_notebook(s,**kwargs)
def to_notebook(self, s, **kwargs):
Brian E. Granger
Adding nbformat subpackage.
r4392 lines = s.splitlines()
cells = []
cell_lines = []
for line in lines:
Brian E. Granger
Initial draft of more formal notebook format....
r4401 if line.startswith(u'# <codecell>'):
Brian E. Granger
Full versioning added to nbformat.
r4406 cell_lines = []
if line.startswith(u'# </codecell>'):
Brian E. Granger
Initial draft of more formal notebook format....
r4401 code = u'\n'.join(cell_lines)
code = code.strip(u'\n')
Brian E. Granger
Adding nbformat subpackage.
r4392 if code:
cells.append(new_code_cell(input=code))
else:
cell_lines.append(line)
ws = new_worksheet(cells=cells)
nb = new_notebook(worksheets=[ws])
return nb
class PyWriter(NotebookWriter):
Brian E. Granger
Initial draft of more formal notebook format....
r4401 def writes(self, nb, **kwargs):
Brian E. Granger
Adding nbformat subpackage.
r4392 lines = []
Brian E. Granger
Full versioning added to nbformat.
r4406 lines.extend(['# <nbformat>2</nbformat>',''])
Brian E. Granger
Initial draft of more formal notebook format....
r4401 for ws in nb.worksheets:
for cell in ws.cells:
if cell.cell_type == 'code':
Brian E. Granger
Massive work on the notebook document format....
r4484 input = cell.get('input')
if input is not None:
lines.extend([u'# <codecell>',u''])
lines.extend(input.splitlines())
lines.extend([u'',u'# </codecell>'])
Brian E. Granger
Full versioning added to nbformat.
r4406 lines.append('')
Brian E. Granger
Initial draft of more formal notebook format....
r4401 return unicode('\n'.join(lines))
Brian E. Granger
Adding nbformat subpackage.
r4392
_reader = PyReader()
_writer = PyWriter()
reads = _reader.reads
read = _reader.read
Brian E. Granger
Full versioning added to nbformat.
r4406 to_notebook = _reader.to_notebook
Brian E. Granger
Adding nbformat subpackage.
r4392 write = _writer.write
writes = _writer.writes
Brian E. Granger
Full versioning added to nbformat.
r4406