o
    miW;                     @   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
   U/home/kim/smarthome/.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   Zdisallowr   r   Z
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   Z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   r.   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   ZaIr   r   Z	len_itemsr%   r-   errorr
   r
   r   additionalItemsj   s"   
 
r3   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   r4   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_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 )Nr5   ZexclusiveMaximumFzgreater than or equal tozgreater thanr6   z the maximum of r7   )r   maximumr   r   r9   r:   r   r
   r
   r   maximum_draft3_draft4   r<   r>   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   Z_setr)   
appendleftr   extend)r   
propertiesr   r   r   r&   r2   r
   r
   r   properties_draft3   s0   rC   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   rA   appendrepr	Exceptionr   join)	r   typesr   r   
all_errorsr%   r   errorsZreprsr
   r
   r   type_draft3   s.   
rN   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   rR   r   r   r
   rQ   r   contains_draft6_draft7   s   

rU   c                 c   s*    t | j}| j||j|jdE d H  d S )N)resolver)r   	_resolverr   contentsrV   )r   recursiveRefr   r   resolvedr
   r
   r   rY      s   
rY   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   rW   $recursiveRefr   r3   r   ifr   thenelse)rR   unevaluatedItemsZallOfZoneOfZanyOf)r   r   rW   lookuprA   %find_evaluated_item_indexes_by_schemar!   rX   rV   r   rF   ranger0   r"   r$   rG   nextr   )r   r   r   Zevaluated_indexesr	   rZ   keywordkvr&   errsr
   r
   r   rd      s   





rd   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
   )rO   r%   r-   Zevaluated_item_indexesr
   r   
<listcomp>F  s
    z.unevaluatedItems_draft2019.<locals>.<listcomp>z4Unevaluated items are not allowed (%s %s unexpected))r   rd   r$   r   r   r1   )r   ra   r   r   Zunevaluated_itemsr2   r
   rk   r   unevaluatedItems_draft2019@  s   
rm   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 )Nr[   r   r\   r]   )rB   ZadditionalPropertiesZunevaluatedPropertiesr   ZpatternPropertiesZdependentSchemasrb   r^   r   r_   r`   )r   r   rW   rc   rA   &find_evaluated_property_keys_by_schemar!   rX   rV   r   keysrG   researchr   rf   r   r"   )r   r   r   evaluated_keysr	   rZ   rg   Zschema_valuer   patternr&   rj   r
   r
   r   rn   O  s   








rn   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   rn   r   rG   sortedstrr   r   r1   )
r   ZuPr   r   rr   Zunevaluated_keysr   _r2   extrasr
   r
   r   unevaluatedProperties_draft2019  s4   
ry   )rp   Zreferencing.jsonschemar   Z
jsonschemar   Zjsonschema.exceptionsr   r   r   r   r#   r'   r.   r3   r4   r;   r>   rC   rN   rU   rY   rd   rm   rn   ry   r
   r
   r
   r   <module>   s,    	NU