U
    kufg                     @  s   d Z ddlmZ ddlZddlZddlZddlmZ ddlmZ	 ddl
mZmZ ddd	d
dgZG dd dZG dd	 d	eZdeefdeefgZdd eD Zdd Zdd
 ZdS )z[
Common validator wrapper to provide a uniform usage of other schema validation
libraries.
    )annotationsN)JsonSchemaException)Draft4Validator)	ErrorTreeValidationErrorr   JsonSchemaValidatorFastJsonSchemaValidatorget_current_validator
VALIDATORSc                   @  s6   e Zd ZdZdZdd Zdd Zddd	Zd
d ZdS )r   zA json schema validator.
jsonschemac                 C  s   || _ t|| _| j| _dS zInitialize the validator.N)Z_schema_JsonSchemaValidator_default_validator
_validatorselfschema r   8/tmp/pip-unpacked-wheel-zj9qk9v2/nbformat/json_compat.py__init__   s    
zJsonSchemaValidator.__init__c                 C  s   | j | dS )Validate incoming data.N)r   validate)r   datar   r   r   r   %   s    zJsonSchemaValidator.validateNc                 C  sB   |dkr| j |S t| j dr4| j j|d|S | j ||S )%Iterate over errors in incoming data.Nevolve)r   )r   iter_errorshasattrr   )r   r   r   r   r   r   r   )   s
    zJsonSchemaValidator.iter_errorsc                 C  s
   t |dS )$Create an error tree for the errors.)errors)r   )r   r   r   r   r   
error_tree1   s    zJsonSchemaValidator.error_tree)N)	__name__
__module____qualname____doc__namer   r   r   r   r   r   r   r   r      s   
c                      sB   e Zd ZdZdZ fddZdd Zd fdd		Zd
d Z  Z	S )r   z(A schema validator using fastjsonschema.fastjsonschemac                   s   t  | t|| _dS r   )superr   r%   compiler   r   	__class__r   r   r   ;   s    z FastJsonSchemaValidator.__init__c              
   C  sJ   z|  | W n6 tk
rD } ztt||jd|W 5 d}~X Y nX dS )r   Zschema_pathN)r   _JsonSchemaExceptionr   strpath)r   r   errorr   r   r   r   @   s    z FastJsonSchemaValidator.validateNc              
     sh   |dk	rt  ||S g }| j}z|| W n6 tk
rb } ztt||jdg}W 5 d}~X Y nX |S )r   Nr*   )r&   r   r   r+   r   r,   r-   )r   r   r   r   Zvalidate_funcr.   r(   r   r   r   G   s    &z#FastJsonSchemaValidator.iter_errorsc                 C  s   d}t |dS )r   z>JSON schema error introspection not enabled for fastjsonschemaN)NotImplementedError)r   r   msgr   r   r   r   U   s    z"FastJsonSchemaValidator.error_tree)N)
r    r!   r"   r#   r$   r   r   r   r   __classcell__r   r   r(   r   r   6   s   r%   r   c                 C  s   g | ]}|d  qS )r   r   ).0itemr   r   r   
<listcomp>e   s     r4   c                 C  sZ   | t kr d|  dt  }t|tD ]\}}}|r$| |kr$|  S q$d| }t|d S )NzInvalid validator 'z' value!
Valid values are: zMissing validator for )r
   
ValueError_VALIDATOR_MAP)validator_namer0   r$   moduleZvalidator_clsr   r   r   _validator_for_nameh   s    

r9   c                  C  s   t jdd} t| S )zU
    Return the default validator based on the value of an environment variable.
    ZNBFORMAT_VALIDATORr%   )osenvirongetr9   )r7   r   r   r   r	   u   s    )r#   
__future__r   r:   r%   r   r   r+   r   r   Zjsonschema.exceptionsr   r   __all__r   r   r6   r
   r9   r	   r   r   r   r   <module>   s*   	,