U
    kuf
                     @  sX   d Z ddlmZ ddlZddlmZ G dd deZdd	 Zd
d Z	dd Z
dd ZdS )z/API for reading notebooks of different versions    )annotationsN   )ValidationErrorc                   @  s   e Zd ZdZdS )NotJSONErrorz1An error raised when an object is not valid JSON.N)__name__
__module____qualname____doc__ r
   r
   3/tmp/pip-unpacked-wheel-zj9qk9v2/nbformat/reader.pyr      s   r   c              
   K  sj   zt j| f|}W nR tk
rd } z4d| }t|dkrJ|dd d }t||W 5 d}~X Y nX |S )z Parse a JSON string into a dict.z%Notebook does not appear to be JSON: P   NM   z...)jsonloads
ValueErrorlenr   )skwargsnb_dictemessager
   r
   r   
parse_json   s    
r   c                 C  s    |  dd}|  dd}||fS )zGet the version of a notebook.

    Parameters
    ----------
    nb : dict
        NotebookNode or dict containing notebook data.

    Returns
    -------
    Tuple containing major (int) and minor (int) version numbers
    Znbformatr   Znbformat_minorr   )get)nbmajorminorr
   r
   r   get_version    s    r   c           	   
   K  s   ddl m}m} t| f|}t|\}}||kr~z|| j||dW S  tk
rz } zd| }t|dW 5 d}~X Y qX n|d| dS )aQ  Read a notebook from a json string and return the
    NotebookNode object.

    This function properly reads notebooks of any version.  No version
    conversion is performed.

    Parameters
    ----------
    s : unicode | bytes
        The raw string or bytes object to read the notebook from.

    Returns
    -------
    nb : NotebookNode
        The notebook that was read.

    Raises
    ------
    ValidationError
        Notebook JSON for a given version is missing an expected key and cannot be read.
    NBFormatError
        Specified major version is invalid or unsupported.
    r   )NBFormatErrorversions)r   z8The notebook is invalid and is missing an expected key: NzUnsupported nbformat version %s) r   r   r   r   Zto_notebook_jsonAttributeErrorr   )	r   r   r   r   r   r   r   r   msgr
   r
   r   reads1   s    
r"   c                 K  s   t |  f|S )aZ  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.
    )r"   read)fpr   r
   r
   r   r#   W   s    r#   )r	   
__future__r   r   Z	validatorr   r   r   r   r   r"   r#   r
   r
   r
   r   <module>   s   &