U
    kuf;
                     @  s@   d Z ddlmZ ddlmZ ddlmZ ddlmZ dd Z	d	S )
z.API for converting notebooks between versions.    )annotations   )versions)get_version)ValidationErrorc           	   
   C  s   t | \}}||kr| S |tkr||kr<|d }t| j}n|d }t| j}z0|| }|dd|kr|d||f }t|W nB tk
r } z$d| d| d| }t|dW 5 d}~X Y nX t||S td| dS )	a  Convert a notebook node object to a specific version.  Assumes that
    all the versions starting from 1 to the latest major X are implemented.
    In other words, there should never be a case where v1 v2 v3 v5 exist without
    a v4.  Also assumes that all conversions can be made in one step increments
    between major versions and ignores minor revisions.

    Parameters
    ----------
    nb : NotebookNode
    to_version : int
        Major revision to convert the notebook to.  Can either be an upgrade or
        a downgrade.

    Raises
    ------
    ValueError
        Notebook failed to convert.
    ValueError
        The version specified is invalid or doesn't exist.
    ValidationError
        Conversion failed due to missing expected attributes.
    r   Znbformatz+Failed to convert notebook from v%d to v%d.z-Notebook could not be converted from version z to version z because it's missing a key: NzACannot convert notebook to v%d because that version doesn't exist)	r   r   upgradeZ	downgradeget
ValueErrorAttributeErrorr   convert)	nbZ
to_versionversionZversion_minorZstep_versionZconvert_functionZ	convertedmsge r   6/tmp/pip-unpacked-wheel-zj9qk9v2/nbformat/converter.pyr      s*    

r   N)
__doc__
__future__r    r   readerr   Z	validatorr   r   r   r   r   r   <module>   s
   