U
    d:                     @   sx  d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
mZ d dlmZ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)d* Z!d+d, Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'd7d8 Z(d9d: Z)d;d< Z*d=d> Z+d?d@ Z,dAdB Z-dCdD Z.dEdF Z/dGdH Z0dIdJ Z1dKdL Z2dMdN Z3dS )O    )FractionN)ensure_listequal
extras_msgfind_additional_properties%find_evaluated_item_indexes_by_schema&find_evaluated_property_keys_by_schemaunbooluniq)FormatErrorValidationErrorc                 c   s\   |  |dsd S | D ]>\}}| D ],\}}t||r(| j||||dE d H  q(qd S Nobjectpathschema_path)is_typeitemsresearchdescend)	validatorpatternPropertiesinstanceschemapattern	subschemakv r   :/tmp/pip-unpacked-wheel-afshzn49/jsonschema/_validators.pyr      s       r   c                 c   s2   |  |dsd S |D ]}| j||dE d H  qd S )Nr   )r   r   )r   r   )r   propertyNamesr   r   propertyr   r   r    r!      s    r!   c           
      c   s   |  |dsd S tt||}|  |drP|D ]}| j|| ||dE d H  q.n|s|rd|krt|dkrpdnd}ddd	 t|D }dd
d	 t|d D }| d| d| }	t|	V  nd}	t|	t| V  d S )Nr   r   r      ZdoesZdo, c                 s   s   | ]}t |V  qd S Nrepr.0eachr   r   r    	<genexpr>1   s     z'additionalProperties.<locals>.<genexpr>c                 s   s   | ]}t |V  qd S r&   r'   r)   r   r   r    r,   2   s     z not match any of the regexes: z8Additional properties are not allowed (%s %s unexpected))	r   setr   r   lenjoinsortedr   r   )
r   ZaPr   r   extrasextraZverbZjoinedpatternserrorr   r   r    additionalProperties%   s"    

r6   c                 c   s   |  |dsd S t|dg }t|}|dkrT||krTd| d| }t|V  n*t||D ]}| j|| ||dE d H  q^d S )NarrayprefixItemsFzExpected at most z items, but found )r   r   r   )r   r/   getr   ranger   )r   r   r   r   prefixtotalmessageindexr   r   r    r   <   s    r   c              	   c   s   |  |dr |  |di dr$d S t|dg }|  |drvt||d  |dD ]\}}| j|||dE d H  qTnF|st|t|dg krd}t|t|t|dg d   V  d S )Nr7   r   r   )startr#   z3Additional items are not allowed (%s %s unexpected))r   r9   r/   	enumerater   r   r   )r   ZaIr   r   Z	len_itemsr>   itemr5   r   r   r    additionalItemsN   s    
rB   c                 c   s   t ||st|dV  d S )Nz was expected)r   r   )r   constr   r   r   r   r    rC   `   s    
rC   c                 c   s   |  |dsd S d}|dd}|dt|}|D ]D}| j|d|r4|d7 }||kr4td| dd|d	V   d S q4||k r|st|d
V  ntd| d| dd|d	V  d S )Nr7   r   ZminContainsr$   ZmaxContainsr   z8Too many items match the given schema (expected at most ))r   Zvalidator_valuez1 does not contain items matching the given schemaz8Too few items match the given schema (expected at least z
 but only z	 matched))r   r9   r/   evolveis_validr   )r   containsr   r   matchesZmin_containsZmax_containsr+   r   r   r    rH   e   s2    
rH   c                 c   s0   |  |dsd S ||kr,t|d|V  d S )Nnumberz) is less than or equal to the minimum of r   r   )r   minimumr   r   r   r   r    exclusiveMinimum   s    rM   c                 c   s0   |  |dsd S ||kr,t|d|V  d S )NrJ   z, is greater than or equal to the maximum of rK   )r   maximumr   r   r   r   r    exclusiveMaximum   s    rO   c                 c   s4   |  |dsd S ||k r0|d|}t|V  d S )NrJ   z is less than the minimum of rK   )r   rL   r   r   r=   r   r   r    rL      s
    rL   c                 c   s4   |  |dsd S ||kr0|d|}t|V  d S )NrJ   z  is greater than the maximum of rK   )r   rN   r   r   r=   r   r   r    rN      s
    rN   c                 c   s   |  |dsd S t|tr`|| }zt||k}W qh tk
r\   t|t| jdk}Y qhX n|| }|rt|d| V  d S )NrJ   r$   z is not a multiple of )r   
isinstancefloatintOverflowErrorr   denominatorr   )r   ZdBr   r   Zquotientfailedr   r   r    
multipleOf   s    
rV   c                 c   s,   |  |dr(t||k r(t|dV  d S )Nr7    is too shortr   r/   r   r   ZmIr   r   r   r   r    minItems   s    rZ   c                 c   s,   |  |dr(t||kr(t|dV  d S )Nr7    is too longrX   rY   r   r   r    maxItems   s    r\   c                 c   s,   |r(|  |dr(t|s(t|dV  d S )Nr7   z has non-unique elements)r   r
   r   )r   ZuIr   r   r   r   r    uniqueItems   s    
r]   c                 c   s0   |  |dr,t||s,t|d|V  d S )Nstringz does not match )r   r   r   r   )r   Zpatrnr   r   r   r   r    r      s
    

r   c              
   c   sV   | j d k	rRz| j || W n4 tk
rP } zt|j|jdV  W 5 d }~X Y nX d S )N)cause)Zformat_checkercheckr   r   r=   r_   )r   formatr   r   r5   r   r   r    ra      s
    
ra   c                 c   s,   |  |dr(t||k r(t|dV  d S )Nr^   rW   rX   r   ZmLr   r   r   r   r    	minLength   s    rc   c                 c   s,   |  |dr(t||kr(t|dV  d S )Nr^   r[   rX   rb   r   r   r    	maxLength   s    rd   c                 c   sZ   |  |dsd S | D ]<\}}||kr*q|D ]$}||kr.|d|}t|V  q.qd S )Nr   z is a dependency of )r   r   r   )r   dependentRequiredr   r   r"   
dependencyr+   r=   r   r   r    re      s    re   c                 c   sF   |  |dsd S | D ](\}}||kr*q| j|||dE d H  qd S )Nr   r   r   r   r   )r   dependentSchemasr   r   r"   rf   r   r   r    ri     s      ri   c                 #   sd   |dks|dkrDt | t fdd|D r`t|d|V  n||kr`t|d|V  d S )Nr   r$   c                 3   s   | ]} t |kV  qd S r&   )r	   r)   Zunbooledr   r    r,     s     zenum.<locals>.<genexpr>z is not one of )r	   allr   )r   enumsr   r   r   rj   r    enum  s    rm   c                 c   s   | j ||dE d H  d S N)refr   Z_validate_reference)r   ro   r   r   r   r   r    ro     s    ro   c                 c   s   | j ||dE d H  d S rn   rp   )r   
dynamicRefr   r   r   r   r    rq     s    rq   c                 #   sL   t |}t fdd|D sHddd |D }t d| V  d S )Nc                 3   s   | ]}  |V  qd S r&   )r   r*   typer   r   r   r    r,   &  s     ztype.<locals>.<genexpr>r%   c                 s   s   | ]}t |V  qd S r&   r'   rr   r   r   r    r,   '  s     z is not of type )r   anyr0   r   )r   typesr   r   reprsr   rt   r    rs   #  s    rs   c                 c   sJ   |  |dsd S | D ],\}}||kr| j|| |||dE d H  qd S r   rh   )r   
propertiesr   r   r"   r   r   r   r    rx   +  s    rx   c                 c   s6   |  |dsd S |D ]}||krt|dV  qd S )Nr   z is a required propertyrK   )r   requiredr   r   r"   r   r   r    ry   9  s
    ry   c                 c   s,   |  |dr(t||k r(t|dV  d S )Nr   z  does not have enough propertiesrX   r   ZmPr   r   r   r   r    minPropertiesA  s    r{   c                 c   s<   |  |dsd S |  |dr8t||kr8t|dV  d S )Nr   z has too many propertiesrX   rz   r   r   r    maxPropertiesF  s    r|   c                 c   s,   t |D ]\}}| j|||dE d H  qd S )Nrg   )r@   r   )r   allOfr   r   r>   r   r   r   r    r}   M  s    r}   c                 c   sT   g }t |D ].\}}t| j|||d}|s0 qP|| qt|d|dV  d S )Nrg   , is not valid under any of the given schemascontext)r@   listr   extendr   )r   anyOfr   r   
all_errorsr>   r   errsr   r   r    r   R  s    r   c                 #   s   t |}g }|D ]2\}}tj ||d}|s8|}	 qX|| qt d|dV   fdd|D }
|
r|
|	 ddd |
D }t d	| V  d S )
Nrg   r~   r   c                    s&   g | ]\}}j |d  r|qS )rD   )rF   rG   )r*   _r+   rt   r   r    
<listcomp>o  s   zoneOf.<locals>.<listcomp>r%   c                 s   s   | ]}t |V  qd S r&   r'   )r*   r   r   r   r    r,   u  s     zoneOf.<locals>.<genexpr>z is valid under each of )r@   r   r   r   r   appendr0   )r   oneOfr   r   Z
subschemasr   r>   r   r   Zfirst_validZ
more_validrw   r   rt   r    r   `  s&    
r   c                 c   s.   | j |d|r*|d|}t|V  d S )NrD   z should not be valid under )rF   rG   r   )r   Z
not_schemar   r   r=   r   r   r    not_y  s    r   c                 c   sd   | j |d|r:d|kr`|d }| j||ddE d H  n&d|kr`|d }| j||ddE d H  d S )NrD   thenrg   else)rF   rG   r   )r   Z	if_schemar   r   r   Zelse_r   r   r    if_  s    r   c                 #   sP   |  |dsd S t| ||  fddt|D }|rLd}t|t| V  d S )Nr7   c                    s   g | ]\}}| kr|qS r   r   )r*   r>   rA   Zevaluated_item_indexesr   r    r     s   z$unevaluatedItems.<locals>.<listcomp>z4Unevaluated items are not allowed (%s %s unexpected))r   r   r@   r   r   )r   unevaluatedItemsr   r   Zunevaluated_itemsr5   r   r   r    r     s      
r   c           	      c   s   |  |dsd S t| ||}g }|D ]2}||kr$| j|| |||dD ]}|| qFq$|r|dkr|d}t|t| V  nd}t|t| V  d S )Nr   r   Fz9Unevaluated properties are not allowed (%s %s unexpected)z[Unevaluated properties are not valid under the given schema (%s %s unevaluated and invalid))r   r   r   r   r   r   )	r   unevaluatedPropertiesr   r   Zevaluated_keysZunevaluated_keysr"   r   r5   r   r   r    r     s0      
r   c                 c   sH   |  |dsd S tt||D ]$\\}}}| j||||dE d H  qd S )Nr7   )r   r   r   r   )r   zipr@   r   )r   r8   r   r   r>   rA   r   r   r   r    r8     s    r8   )4Z	fractionsr   r   Zjsonschema._utilsr   r   r   r   r   r   r	   r
   Zjsonschema.exceptionsr   r   r   r!   r6   r   rB   rC   rH   rM   rO   rL   rN   rV   rZ   r\   r]   r   ra   rc   rd   re   ri   rm   ro   rq   rs   rx   ry   r{   r|   r}   r   r   r   r   r   r   r8   r   r   r   r    <module>   sP   (
#				
