o
    e&                     @   s   d dl mZ d dlmZ d dlmZ dd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"S )#    )lookup_recursive_ref)_utils)ValidationErrorc                 C   s$   |  d}|durd|fgS |  S )z
    Ignore siblings of ``$ref`` if it is present.

    Otherwise, return all keywords.

    Suitable for use with `create`'s ``applicable_validators`` argument.
    $refN)getitems)schemaref r
   MD:\Projects\ConvertPro\env\Lib\site-packages\jsonschema/_legacy_validators.pyignore_ref_siblings   s   

r   c                 c   s    |  |ds	d S | D ]G\}}||vrq|  |dr(| j|||dE d H  q|  |dr?||vr>|d|}t|V  q|D ]}||vrS|d|}t|V  qAqd S )Nobjectschema_pathstring is a dependency of )is_typer   descendr   )	validatordependenciesinstancer   property
dependencymessageeachr
   r
   r   dependencies_draft3   s,   

r   c                 c   s    |  |ds	dS | D ]0\}}||vrq|  |dr2|D ]}||vr0|d|}t|V  qq| j|||dE dH  qdS )z
    Support for the ``dependencies`` keyword from pre-draft 2019-09.

    In later drafts, the keyword was split into separate
    ``dependentRequired`` and ``dependentSchemas`` validators.
    r   Narrayr   r   )r   r   r   r   )r   r   r   r   r   r   r   r   r
   r
   r   !dependencies_draft4_draft6_draft7-   s"   
r   c                 c   sF    t |D ]}| jd|gid|r |d|}t|V  qd S )Ntyper   z is disallowed for )r   ensure_listevolveis_validr   )r   Zdisallowr   r   Z
disallowedr   r
   r
   r   disallow_draft3K   s   
r#   c                 c   sP    |  |dr| ||E d H  d S t|D ]\}}| j|||dE d H  qd S )Nr   r   )r   r   	enumerate)r   Zextendsr   r   index	subschemar
   r
   r   extends_draft3R   s   r'   c                 c   s    |  |ds	d S |  |dr%t|D ]\}}| j|||dE d H  qd S tt||D ]\\}}}| j||||dE d H  q,d S )Nr   r   pathr)   r   )r   r$   r   zipr   r   r   r   r%   itemr&   r
   r
   r   items_draft3_draft4Z   s   r.   c                 c   s    |  |ds	d S |  |dr+tt||D ]\\}}}| j||||dE d H  qd S t|D ]\}}| j|||dE d H  q/d S )Nr   r*   r(   )r   r+   r$   r   r,   r
   r
   r   items_draft6_draft7_draft201909h   s   r/   c                 c   sb    |  |ds	d S |ddr||k}d}n||k }d}|r/|d| d|}t|V  d S d S )NnumberZexclusiveMinimumFzless than or equal toz	less than is z the minimum of r   r   r   )r   minimumr   r   failedcmpr   r
   r
   r   minimum_draft3_draft4v      r6   c                 c   sb    |  |ds	d S |ddr||k}d}n||k}d}|r/|d| d|}t|V  d S d S )Nr0   ZexclusiveMaximumFzgreater than or equal tozgreater thanr1   z the maximum of r2   )r   maximumr   r   r4   r5   r   r
   r
   r   maximum_draft3_draft4   r7   r9   c                 c   s    |  |ds	d S | D ]@\}}||v r$| j|| |||dE d H  q|ddrMt|d}|jd|d ||d |j| |j	|dg |V  qd S )Nr   r*   requiredFz is a required property)r   Zvalidator_valuer   r   )
r   r   r   r   r   _setr)   
appendleftr   extend)r   
propertiesr   r   r   r&   errorr
   r
   r   properties_draft3   s0   r@   c           	   	   c   s    t |}g }t|D ](\}}| |dr+t| j|||d}|s% d S || q| ||r4 d S qg }|D ]}z|t|d  W q9 t	yV   |t| Y q9w t
|dd| |dV  d S )Nr   r   namez is not of type z, )context)r   r    r$   r   listr   r=   appendrepr	Exceptionr   join)	r   typesr   r   
all_errorsr%   r   errorsZreprsr
   r
   r   type_draft3   s.   
rK   c                 #   sD     |ds	d S t fdd|D s td|dV  d S d S )Nr   c                 3   s"    | ]}j  d |V  qdS )r   N)r!   r"   ).0elementcontainsr   r
   r   	<genexpr>   s
    
z)contains_draft6_draft7.<locals>.<genexpr>zNone of z! are valid under the given schema)r   anyr   )r   rO   r   r   r
   rN   r   contains_draft6_draft7   s   

rR   c                 c   s*    t | j}| j||j|jdE d H  d S )N)resolver)r   	_resolverr   contentsrS   )r   recursiveRefr   r   resolvedr
   r
   r   rV      s   
rV   c           
      C   s  |  |drg S g }d|v r'| j|d }|t| j|j|jd||j d|v rVd|v r8tt	dt
|S |  |d drItt	dt
|S |tt	dt
|d 7 }d|v r| j|d d	|r~|t| ||d 7 }d
|v r}|t| ||d
 7 }nd|v r|t| ||d 7 }dD ]}||v rt|D ]\}}| j|| d	|r|| qqdD ]"}||v r|| D ]}t| ||d}	|	du r|t| ||7 }qq|S )z
    Get all indexes of items that get evaluated under the current schema.

    Covers all keywords related to unevaluatedItems: items, prefixItems, if,
    then, else, contains, unevaluatedItems, allOf, oneOf, anyOf
    booleanr   )r   rT   r   ZadditionalItemsr   r   ifr   Zthenelse)rO   unevaluatedItems)ZallOfoneOfZanyOfN)r   rT   lookupr=   %find_evaluated_item_indexes_by_schemar!   rU   rS   rC   rangelenr"   r$   rD   nextr   )
r   r   r   Zevaluated_indexesrW   keywordkvr&   Zerrsr
   r
   r   r^      sf   



r^   c                 #   sX    |  |ds	d S t| ||  fddt|D }|r*d}t|t| V  d S d S )Nr   c                    s   g | ]
\}}| vr|qS r
   r
   )rL   r%   r-   Zevaluated_item_indexesr
   r   
<listcomp>&  s
    z.unevaluatedItems_draft2019.<locals>.<listcomp>z4Unevaluated items are not allowed (%s %s unexpected))r   r^   r$   r   r   Z
extras_msg)r   r[   r   r   Zunevaluated_itemsr?   r
   re   r   unevaluatedItems_draft2019   s   
rg   N)Zreferencing.jsonschemar   Z
jsonschemar   Zjsonschema.exceptionsr   r   r   r   r#   r'   r.   r/   r6   r9   r@   rK   rR   rV   r^   rg   r
   r
   r
   r   <module>   s$    	A