o
    tfh                     @  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)Z_schema_JsonSchemaValidator_default_validator
_validatorselfschema r   ]/var/www/html/software/conda/envs/catlas/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   Z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-   r.   )r   r   r   r   Zvalidate_funcr/   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    r5   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_namer1   r%   moduleZ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.
    ZNBFORMAT_VALIDATORr&   )osenvirongetr:   )r8   r   r   r   r	   v   s   r	   )r$   
__future__r   r;   r&   r   r   r,   r   r   Zjsonschema.exceptionsr   r   __all__r   r   r7   r
   r:   r	   r   r   r   r   <module>   s"    	,