##// END OF EJS Templates
protect agains undefined
protect agains undefined

File last commit:

r18257:71dfbb06
r18283:2e30fe38
Show More
nbjson.py
60 lines | 1.5 KiB | text/x-python | PythonLexer
MinRK
don't write or read transient values to disk...
r18257 """Read and write notebooks in JSON format."""
Brian E. Granger
More review changes....
r4609
MinRK
don't write or read transient values to disk...
r18257 # Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
Brian E. Granger
Adding nbformat subpackage.
r4392
MinRK
split likely multiline strings when writing to/from JSON
r5278 import copy
Brian E. Granger
Adding nbformat subpackage.
r4392 import json
MinRK
split likely multiline strings when writing to/from JSON
r5278 from .nbbase import from_dict
from .rwbase import (
MinRK
don't write or read transient values to disk...
r18257 NotebookReader, NotebookWriter, restore_bytes, rejoin_lines, split_lines,
strip_transient,
MinRK
split likely multiline strings when writing to/from JSON
r5278 )
MinRK
nbjson.writes always returns unicode
r6208 from IPython.utils import py3compat
Brian E. Granger
Adding nbformat subpackage.
r4392
class BytesEncoder(json.JSONEncoder):
MinRK
fix base64 code in nbformat.v2...
r5175 """A JSON encoder that accepts b64 (and other *ascii*) bytestrings."""
Brian E. Granger
Adding nbformat subpackage.
r4392 def default(self, obj):
if isinstance(obj, bytes):
MinRK
fix base64 code in nbformat.v2...
r5175 return obj.decode('ascii')
Brian E. Granger
Adding nbformat subpackage.
r4392 return json.JSONEncoder.default(self, obj)
class JSONReader(NotebookReader):
Brian E. Granger
Initial draft of more formal notebook format....
r4401 def reads(self, s, **kwargs):
Brian E. Granger
Adding nbformat subpackage.
r4392 nb = json.loads(s, **kwargs)
Brian E. Granger
Full versioning added to nbformat.
r4406 nb = self.to_notebook(nb, **kwargs)
MinRK
don't write or read transient values to disk...
r18257 nb = strip_transient(nb)
Brian E. Granger
Adding nbformat subpackage.
r4392 return nb
Brian E. Granger
Full versioning added to nbformat.
r4406 def to_notebook(self, d, **kwargs):
MinRK
don't 'restore_bytes' in from_JSON...
r12387 return rejoin_lines(from_dict(d))
Brian E. Granger
Full versioning added to nbformat.
r4406
Brian E. Granger
Adding nbformat subpackage.
r4392
class JSONWriter(NotebookWriter):
Brian E. Granger
Initial draft of more formal notebook format....
r4401 def writes(self, nb, **kwargs):
Brian E. Granger
Adding nbformat subpackage.
r4392 kwargs['cls'] = BytesEncoder
MinRK
shorten json indent to 1sp
r5293 kwargs['indent'] = 1
MinRK
sort keys when writing json notebooks
r5271 kwargs['sort_keys'] = True
Brian Granger
Fixing minor bugs in nbformat and saving....
r6032 kwargs['separators'] = (',',': ')
MinRK
don't write or read transient values to disk...
r18257 nb = copy.deepcopy(nb)
nb = strip_transient(nb)
MinRK
split likely multiline strings when writing to/from JSON
r5278 if kwargs.pop('split_lines', True):
MinRK
don't write or read transient values to disk...
r18257 nb = split_lines(nb)
MinRK
nbjson.writes always returns unicode
r6208 return py3compat.str_to_unicode(json.dumps(nb, **kwargs), 'utf-8')
MinRK
split likely multiline strings when writing to/from JSON
r5278
Brian E. Granger
Adding nbformat subpackage.
r4392
_reader = JSONReader()
_writer = JSONWriter()
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