##// END OF EJS Templates
add download link to editor
add download link to editor

File last commit:

r19380:49d50e3b
r20312:948690df
Show More
nbjson.py
68 lines | 1.9 KiB | text/x-python | PythonLexer
MinRK
first complete pass on v4...
r18573 """Read and write notebooks in JSON format."""
MinRK
copy nbformat.v3 to v4
r18568
MinRK
first complete pass on v4...
r18573 # Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
MinRK
copy nbformat.v3 to v4
r18568
import copy
import json
MinRK
first complete pass on v4...
r18573 from IPython.utils import py3compat
MinRK
copy nbformat.v3 to v4
r18568 from .nbbase import from_dict
from .rwbase import (
MinRK
strip transient values to/from nb files...
r18581 NotebookReader, NotebookWriter, rejoin_lines, split_lines, strip_transient
MinRK
copy nbformat.v3 to v4
r18568 )
class BytesEncoder(json.JSONEncoder):
"""A JSON encoder that accepts b64 (and other *ascii*) bytestrings."""
def default(self, obj):
if isinstance(obj, bytes):
return obj.decode('ascii')
return json.JSONEncoder.default(self, obj)
class JSONReader(NotebookReader):
def reads(self, s, **kwargs):
MinRK
move NotebookNode to top-level...
r18606 """Read a JSON string into a Notebook object"""
MinRK
copy nbformat.v3 to v4
r18568 nb = json.loads(s, **kwargs)
nb = self.to_notebook(nb, **kwargs)
return nb
def to_notebook(self, d, **kwargs):
MinRK
move NotebookNode to top-level...
r18606 """Convert a disk-format notebook dict to in-memory NotebookNode
handles multi-line values as strings, scrubbing of transient values, etc.
"""
nb = from_dict(d)
nb = rejoin_lines(nb)
MinRK
strip transient values to/from nb files...
r18581 nb = strip_transient(nb)
return nb
MinRK
copy nbformat.v3 to v4
r18568
class JSONWriter(NotebookWriter):
def writes(self, nb, **kwargs):
MinRK
move NotebookNode to top-level...
r18606 """Serialize a NotebookNode object as a JSON string"""
MinRK
copy nbformat.v3 to v4
r18568 kwargs['cls'] = BytesEncoder
kwargs['indent'] = 1
kwargs['sort_keys'] = True
kwargs['separators'] = (',',': ')
Thomas Kluyver
Default ensure_ascii to False when writing notebook JSON...
r19379 kwargs.setdefault('ensure_ascii', False)
MinRK
strip transient values to/from nb files...
r18581 # don't modify in-memory dict
nb = copy.deepcopy(nb)
MinRK
copy nbformat.v3 to v4
r18568 if kwargs.pop('split_lines', True):
MinRK
strip transient values to/from nb files...
r18581 nb = split_lines(nb)
nb = strip_transient(nb)
Thomas Kluyver
Fix writing non-ascii notebooks in Python 2...
r19380 return py3compat.cast_unicode_py2(json.dumps(nb, **kwargs), 'utf-8')
MinRK
copy nbformat.v3 to v4
r18568
_reader = JSONReader()
_writer = JSONWriter()
reads = _reader.reads
read = _reader.read
to_notebook = _reader.to_notebook
write = _writer.write
writes = _writer.writes