o
    ^ih                     @  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 g d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ValidationError)r   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)_schema_JsonSchemaValidator_default_validator
_validatorselfschema r   O/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/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u r
| j |S t| j dr| 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_tree2   s   
zJsonSchemaValidator.error_treeN)	__name__
__module____qualname____doc__namer   r   r   r    r   r   r   r   r      s    
r   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  s>   z|  | W dS  ty } z
tt||jd|d}~ww )r   schema_pathN)r   _JsonSchemaExceptionr   strpath)r   r   errorr   r   r   r   A   s   z FastJsonSchemaValidator.validateNc              
     sj   |durt  ||S g }| j}z|| W |S  ty4 } ztt||jdg}W Y d}~|S d}~ww )r   Nr,   )r(   r   r   r.   r   r/   r0   )r   r   r   r   validate_funcr1   r*   r   r   r   H   s   
z#FastJsonSchemaValidator.iter_errorsc                 C  s   d}t |)r   z>JSON schema error introspection not enabled for fastjsonschema)NotImplementedError)r   r   msgr   r   r   r    V   s   z"FastJsonSchemaValidator.error_treer!   )
r"   r#   r$   r%   r&   r   r   r   r    __classcell__r   r   r*   r   r   7   s    r   r'   r   c                 C  s   g | ]}|d  qS )r   r   ).0itemr   r   r   
<listcomp>f   s    r8   c                 C  sV   | t vrd|  dt  }t|tD ]\}}}|r!| |kr!|  S qd| }t|)NzInvalid validator 'z' value!
Valid values are: zMissing validator for )r
   
ValueError_VALIDATOR_MAP)validator_namer4   r&   modulevalidator_clsr   r   r   _validator_for_namei   s   
r>   c                  C  s   t jdd} t| S )zU
    Return the default validator based on the value of an environment variable.
    NBFORMAT_VALIDATORr'   )osenvirongetr>   )r;   r   r   r   r	   v   s   r	   )r%   
__future__r   r@   r'   r   r   r.   r   r   jsonschema.exceptionsr   r   __all__r   r   r:   r
   r>   r	   r   r   r   r   <module>   s"    	,