##// END OF EJS Templates
Remove EventManager reset methods, because they violate encapsulation....
Remove EventManager reset methods, because they violate encapsulation. The whole idea of the EventManager is that you can register hooks without worrying about what hooks other pieces of code might be registering. The reset methods violate this separation of concerns, since they will blow away everyone else's hooks too. (See gh-6680 for an example of this breaking things.) Since there is never any safe way to use them, we simply remove them entirely.

File last commit:

r17636:7643236b
r18547:4043b271
Show More
reader.py
109 lines | 2.7 KiB | text/x-python | PythonLexer
Jonathan Frederic
Notebook version conversions done right?
r12493 """API for reading notebooks.
Authors:
* Jonathan Frederic
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2013 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
#-----------------------------------------------------------------------------
import json
Thomas Kluyver
Fix new relative imports
r13402 from . import v1
from . import v2
from . import v3
Jonathan Frederic
Fixes (iptest), simplified v1, v2, .. , vX import code
r12494
versions = {
1: v1,
2: v2,
3: v3,
}
Jonathan Frederic
Notebook version conversions done right?
r12493
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
class NotJSONError(ValueError):
pass
def parse_json(s, **kwargs):
"""Parse a JSON string into a dict."""
try:
nb_dict = json.loads(s, **kwargs)
except ValueError:
Jonathan Frederic
Updated JSON error message to limit full error to 80 characters....
r12975 # Limit the error message to 80 characters. Display whatever JSON will fit.
raise NotJSONError(("Notebook does not appear to be JSON: %r" % s)[:77] + "...")
Jonathan Frederic
Notebook version conversions done right?
r12493 return nb_dict
# High level API
def get_version(nb):
"""Get the version of a notebook.
Parameters
----------
nb : dict
NotebookNode or dict containing notebook data.
Returns
-------
Tuple containing major (int) and minor (int) version numbers
"""
major = nb.get('nbformat', 1)
minor = nb.get('nbformat_minor', 0)
return (major, minor)
Jonathan Frederic
Some small fixes and changes of nb version conversion
r12755 def reads(s, **kwargs):
"""Read a notebook from a json string and return the
Jonathan Frederic
Notebook version conversions done right?
r12493 NotebookNode object.
This function properly reads notebooks of any version. No version
conversion is performed.
Parameters
----------
s : unicode
The raw unicode string to read the notebook from.
Returns
-------
nb : NotebookNode
The notebook that was read.
"""
MinRK
add missing NBFormatError import in nbformat.reader.reads...
r17636 from .current import NBFormatError
Jonathan Frederic
Notebook version conversions done right?
r12493 nb_dict = parse_json(s, **kwargs)
(major, minor) = get_version(nb_dict)
if major in versions:
Jonathan Frederic
Fixes (iptest), simplified v1, v2, .. , vX import code
r12494 return versions[major].to_notebook_json(nb_dict, minor=minor)
Jonathan Frederic
Notebook version conversions done right?
r12493 else:
raise NBFormatError('Unsupported nbformat version %s' % major)
def read(fp, **kwargs):
"""Read a notebook from a file and return the NotebookNode object.
This function properly reads notebooks of any version. No version
conversion is performed.
Parameters
----------
fp : file
Any file-like object with a read method.
Returns
-------
nb : NotebookNode
The notebook that was read.
"""
Jonathan Frederic
Some small fixes and changes of nb version conversion
r12755 return reads(fp.read(), **kwargs)