o
    i5)                     @   s   d dl mZ d dlmZ d%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 )&    )_utils)ValidationError$idc                    s    fdd}|S )Nc                    s(   | du s| du sd| v rdS |   dS )z
        Ignore an ``$id`` sibling of ``$ref`` if it is present.

        Otherwise, return the ID of the given schema.
        TF$ref )getschemaproperty X/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jsonschema/_legacy_validators.pyid_of   s   zid_of_ignore_ref.<locals>.id_ofr   )r   r   r   r
   r   id_of_ignore_ref   s   	r   c                 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.
    r   N)r   items)r	   refr   r   r   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	   r   
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_draft78   s"   
r"   c                 c   sF    t |D ]}| jd|gid|r |d|}t|V  qd S )Ntyper   z is disallowed for )r   ensure_listevolveis_validr   )r   disallowr   r	   
disallowedr   r   r   r   disallow_draft3V   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_draft3]   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r0   r   )r   r*   r   zipr   r   r   r	   r,   itemr-   r   r   r   items_draft3_draft4e   s   r5   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!   r1   r/   )r   r2   r*   r   r3   r   r   r   items_draft6_draft7_draft201909s   s   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 )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      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 )Nr7   exclusiveMaximumFzgreater than or equal tozgreater thanr9   z the maximum of r:   )r   maximumr   r	   r<   r=   r   r   r   r   maximum_draft3_draft4   r?   rB   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   r1   requiredFz is a required property)r   validator_valuer   r	   )
r   r   r   r   r   _setr0   
appendleftr   extend)r   
propertiesr   r	   r   r-   errorr   r   r   properties_draft3   s0   rJ   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   rG   appendrepr	Exceptionr   join)	r   typesr   r	   
all_errorsr,   r#   errorsreprsr   r   r   type_draft3   s.   
rV   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   rZ   r   r	   r   rY   r   contains_draft6_draft7   s   

r]   c           
      C   sj   | j j| j}}t| j jdd  D ]}| j |\}}|dr$|}q |d}| j ||}	|	 g S )N   z$recursiveAnchor#)	resolverresolution_scoper	   reversed_scopes_stackresolver   lstripresolve_fragment)
r   recursiveRefr   r	   
lookup_urltargetr   next_targetfragmentr-   r   r   r   rg      s   

rg   c                 C   s  |  |drg S g }d|v rttdt|S d|v rA| j|d \}}| j| z|t| ||7 }W | j  n| j  w d|v rc|  |d drVt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| ||	}
|
s|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
    booleanadditionalItemsr   r   r   r   ifr   thenelse)rZ   unevaluatedItems)allOfoneOfanyOf)r   rM   rangelenr`   rd   
push_scope%find_evaluated_item_indexes_by_schema	pop_scoper%   r&   r*   rN   r   )r   r   r	   evaluated_indexesscoperesolvedkeywordkvr-   errsr   r   r   rx      s^   



rx   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   )rW   r,   r4   evaluated_item_indexesr   r   
<listcomp>9  s
    z.unevaluatedItems_draft2019.<locals>.<listcomp>z4Unevaluated items are not allowed (%s %s unexpected))r   rx   r*   r   r   
extras_msg)r   rq   r   r	   unevaluated_itemsrI   r   r   r   unevaluatedItems_draft20193  s   
r   N)r   )
jsonschemar   jsonschema.exceptionsr   r   r   r    r"   r)   r.   r5   r6   r>   rB   rJ   rV   r]   rg   rx   r   r   r   r   r   <module>   s$    
?