o
    gW;                     @   s   d dl Z 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#d$ Zd%d& Zd'd( ZdS ))    N)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
   W/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/jsonschema/_legacy_keywords.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   disallowr   r   
disallowedr   r
   r
   r   disallow_draft3M   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   extendsr   r   index	subschemar
   r
   r   extends_draft3T   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_draft4\   s   r1   c              
   c   s    |  |dr|  |di drd S t|dg }|  |dr=t||d  |dD ]\}}| j|||dE d H  q+d S |sct|t|dg kred}t|t|t|dg d   V  d S d S d S )Nr   r   r   )startr+   z3Additional items are not allowed (%s %s unexpected))r   r   lenr&   r   r   r   
extras_msg)r   aIr   r   	len_itemsr(   r0   errorr
   r
   r   additionalItemsj   s"   
 
r8   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_draft201909|   s   r9   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number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_draft4      rA   c                 c   sb    |  |ds	d S |ddr||k}d}n||k}d}|r/|d| d|}t|V  d S d S )Nr:   exclusiveMaximumFzgreater than or equal tozgreater thanr<   z the maximum of r=   )r   maximumr   r   r?   r@   r   r
   r
   r   maximum_draft3_draft4   rB   rE   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   validator_valuer   r   )
r   r   r   r   r   _setr,   
appendleftr   extend)r   
propertiesr   r   r   r)   r7   r
   r
   r   properties_draft3   s0   rL   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   rJ   appendrepr	Exceptionr   join)	r   typesr   r   
all_errorsr(   r   errorsreprsr
   r
   r   type_draft3   s.   
rX   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   r\   r   r   r
   r[   r   contains_draft6_draft7   s   

r_   c                 c   s*    t | j}| j||j|jdE d H  d S )N)resolver)r   	_resolverr   contentsr`   )r   recursiveRefr   r   resolvedr
   r
   r   rc      s   
rc   c                 C   s  |  |drg S g }|d}|dur*| j|}|t| j|j|jd||j d|v rDt	| j}|t| j|j|jd||j d|v rpd|v rTt
tt|S |  |d drdt
tt|S |t
t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   Nr   ra   $recursiveRefr   r8   r   ifr   thenelse)r\   unevaluatedItemsallOfoneOfanyOf)r   r   ra   lookuprJ   %find_evaluated_item_indexes_by_schemar!   rb   r`   r   rO   ranger3   r"   r&   rP   nextr   )r   r   r   evaluated_indexesr	   rd   keywordkvr)   errsr
   r
   r   rq      s   





rq   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
   )rY   r(   r0   evaluated_item_indexesr
   r   
<listcomp>F  s
    z.unevaluatedItems_draft2019.<locals>.<listcomp>z4Unevaluated items are not allowed (%s %s unexpected))r   rq   r&   r   r   r4   )r   rk   r   r   unevaluated_itemsr7   r
   ry   r   unevaluatedItems_draft2019@  s   
r}   c                 C   s  |  |drg S g }|d}|d ur*| j|}|t| j|j|jd||j d|v rDt	| j}|t| j|j|jd||j dD ]-}||v rs|| }|  |dr_|r_||
 7 }qF|  |drs|D ]}||v rr|| qgqFd|v r|D ]}|d D ]}	t|	|r|| qqzd|v r|d  D ]\}}
||vrq|t| ||
7 }qd	D ]"}||v r|| D ]}
t| ||
d }|d u r|t| ||
7 }qqd
|v r	| j|d
 d|r|t| ||d
 7 }d|v r|t| ||d 7 }|S d|v r	|t| ||d 7 }|S )Nre   r   rf   rg   )rK   additionalPropertiesunevaluatedPropertiesr   patternPropertiesdependentSchemasrl   rh   r   ri   rj   )r   r   ra   rp   rJ   &find_evaluated_property_keys_by_schemar!   rb   r`   r   keysrP   researchr   rs   r   r"   )r   r   r   evaluated_keysr	   rd   ru   schema_valuer   patternr)   rx   r
   r
   r   r   O  s   








r   c           
      c   s    |  |ds	d S t| ||}g }|D ]}||vr,| j|| |||dD ]}|| q$q|rU|du rGd}t|td}	t|t|	 V  d S d}t|t| V  d S d S )Nr   r-   Fz9Unevaluated properties are not allowed (%s %s unexpected))keyz[Unevaluated properties are not valid under the given schema (%s %s unevaluated and invalid))	r   r   r   rP   sortedstrr   r   r4   )
r   uPr   r   r   unevaluated_keysr   _r7   extrasr
   r
   r   unevaluatedProperties_draft2019  s4   
r   )r   referencing.jsonschemar   
jsonschemar   jsonschema.exceptionsr   r   r   r   r%   r*   r1   r8   r9   rA   rE   rL   rX   r_   rc   rq   r}   r   r   r
   r
   r
   r   <module>   s,    	NU