##// END OF EJS Templates
protect IPython from bad custom exception handlers...
protect IPython from bad custom exception handlers Previously, errors in custom handlers would result in the custom exception handler's error being printed in lieu of the real exception, and certain cases could cause infinite loops. Now, if CustomTB fails it is unregistered immediately, and the original TB is also displayed. IPython's own BdbQuit_IPython_excepthook had an invalid signature, which revealed this issue, and has also been fixed. test included. closes #692

File last commit:

r4609:a661b7c0
r4991:ed5078c9
Show More
nbjson.py
54 lines | 1.5 KiB | text/x-python | PythonLexer
"""Read and write notebooks in JSON format.
Authors:
* Brian Granger
"""
#-----------------------------------------------------------------------------
# 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
#-----------------------------------------------------------------------------
from base64 import encodestring
from .rwbase import NotebookReader, NotebookWriter
from .nbbase import from_dict
import json
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
class JSONReader(NotebookReader):
def reads(self, s, **kwargs):
nb = json.loads(s, **kwargs)
return self.to_notebook(nb, **kwargs)
def to_notebook(self, d, **kwargs):
"""Convert from a raw JSON dict to a nested NotebookNode structure."""
return from_dict(d)
class JSONWriter(NotebookWriter):
def writes(self, nb, **kwargs):
kwargs['indent'] = 4
return json.dumps(nb, **kwargs)
_reader = JSONReader()
_writer = JSONWriter()
reads = _reader.reads
read = _reader.read
to_notebook = _reader.to_notebook
write = _writer.write
writes = _writer.writes