U
    kufe:                     @   sl  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
 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 Z/dIdJ Z0dKdL Z1dS )M    )FractionN)ensure_listequal
extras_msgfind_additional_properties%find_evaluated_item_indexes_by_schema&find_evaluated_property_keys_by_schema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   8/tmp/pip-unpacked-wheel-k94ccfep/jsonschema/_keywords.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t|t	d V  d S )Nr   )r   r      ZdoesZdo, c                 s   s   | ]}t |V  qd S Nrepr.0eachr   r   r   	<genexpr>0   s     z'additionalProperties.<locals>.<genexpr>c                 s   s   | ]}t |V  qd S r$   r%   r'   r   r   r   r*   1   s     z not match any of the regexes: z8Additional properties are not allowed (%s %s unexpected)key)
r   setr   r   lenjoinsortedr   r   str)
r   ZaPr   r   extrasextraZverbZjoinedpatternserrorr   r   r   additionalProperties$   s"    

r7   c           
   	   c   s   |  |dsd S t|dg }t|}|| }|dkr<d S |dkr|dkrX||d  n|| }|dkrldnd}td| d	| d
| d|V  n*t||D ]}	| j||	 ||	dE d H  qd S )NarrayprefixItemsr   Fr"   r   itemzExpected at most r+   z but found z extra: )r   r   r   )r   r/   getr   ranger   )
r   r   r   r   prefixtotalr4   restr:   indexr   r   r   r   ;   s&    r   c                 c   s   t ||st|dV  d S )Nz was expected)r   r   )r   constr   r   r   r   r   rA   U   s    
rA   c           	      c   s   |  |dsd S d}|dd}|dt|}| j|d}|D ]<}||r@|d7 }||kr@td| dd|d	V   d S q@||k r|st|d
V  ntd| d| dd|d	V  d S )Nr8   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   r;   r/   evolveis_validr   )	r   containsr   r   matchesZmin_containsZmax_containsZcontains_validatorr)   r   r   r   rF   Z   s4    

rF   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    rK   c                 c   s0   |  |dsd S ||kr,t|d|V  d S )NrH   z, is greater than or equal to the maximum of rI   )r   maximumr   r   r   r   r   exclusiveMaximum   s    rM   c                 c   s4   |  |dsd S ||k r0|d|}t|V  d S )NrH   z is less than the minimum of rI   )r   rJ   r   r   messager   r   r   rJ      s
    rJ   c                 c   s4   |  |dsd S ||kr0|d|}t|V  d S )NrH   z  is greater than the maximum of rI   )r   rL   r   r   rN   r   r   r   rL      s
    rL   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 )NrH   r"   z is not a multiple of )r   
isinstancefloatintOverflowErrorr   denominatorr   )r   ZdBr   r   Zquotientfailedr   r   r   
multipleOf   s    
rU   c                 c   s@   |  |dr<t||k r<|dkr$dnd}t|d| V  d S )Nr8   r"   should be non-emptyis too shortr+   r   r/   r   r   ZmIr   r   rN   r   r   r   minItems   s    rZ   c                 c   s@   |  |dr<t||kr<|dkr$dnd}t|d| V  d S )Nr8   r   is expected to be emptyis too longr+   rX   rY   r   r   r   maxItems   s    r]   c                 c   s,   |r(|  |dr(t|s(t|dV  d S )Nr8   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   rN   r`   )r   formatr   r   r6   r   r   r   rb      s
    
rb   c                 c   s@   |  |dr<t||k r<|dkr$dnd}t|d| V  d S )Nr_   r"   rV   rW   r+   rX   r   ZmLr   r   rN   r   r   r   	minLength   s    rd   c                 c   s@   |  |dr<t||kr<|dkr$dnd}t|d| V  d S )Nr_   r   r[   r\   r+   rX   rc   r   r   r   	maxLength   s    re   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)   rN   r   r   r   rf      s    rf   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!   rg   r   r   r   rj     s      rj   c                 #   s.   t  fdd|D r*t d|V  d S )Nc                 3   s   | ]}t |  V  qd S r$   )r   r'   r   r   r   r*     s     zenum.<locals>.<genexpr>z is not one of )allr   )r   enumsr   r   r   rk   r   enum  s    rn   c                 c   s   | j ||dE d H  d S N)refr   Z_validate_reference)r   rp   r   r   r   r   r   rp     s    rp   c                 c   s   | j ||dE d H  d S ro   rq   )r   
dynamicRefr   r   r   r   r   rr     s    rr   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%   rs   r   r   r   r*     s     z is not of type )r   anyr0   r   )r   typesr   r   reprsr   ru   r   rt     s    rt   c                 c   sJ   |  |dsd S | D ],\}}||kr| j|| |||dE d H  qd S r   ri   )r   
propertiesr   r   r!   r   r   r   r   ry   "  s    ry   c                 c   s6   |  |dsd S |D ]}||krt|dV  qd S )Nr   z is a required propertyrI   )r   requiredr   r   r!   r   r   r   rz   0  s
    rz   c                 c   s@   |  |dr<t||k r<|dkr$dnd}t|d| V  d S )Nr   r"   rV   zdoes not have enough propertiesr+   rX   r   ZmPr   r   rN   r   r   r   minProperties8  s
    r|   c                 c   sP   |  |dsd S |  |drLt||krL|dkr4dnd}t|d| V  d S )Nr   r   r[   zhas too many propertiesr+   rX   r{   r   r   r   maxPropertiesA  s    r}   c                 c   s,   t |D ]\}}| j|||dE d H  qd S )Nrh   )	enumerater   )r   allOfr   r   r@   r   r   r   r   r   L  s    r   c                 c   sT   g }t |D ].\}}t| j|||d}|s0 qP|| qt|d|dV  d S )Nrh   , is not valid under any of the given schemascontext)r~   listr   extendr   )r   anyOfr   r   
all_errorsr@   r   errsr   r   r   r   Q  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 )
Nrh   r   r   c                    s&   g | ]\}}j |d  r|qS )rB   )rD   rE   )r(   _r)   ru   r   r   
<listcomp>n  s   zoneOf.<locals>.<listcomp>r#   c                 s   s   | ]}t |V  qd S r$   r%   )r(   r   r   r   r   r*   t  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_validrx   r   ru   r   r   _  s&    
r   c                 c   s.   | j |d|r*|d|}t|V  d S )NrB   z should not be valid under )rD   rE   r   )r   Z
not_schemar   r   rN   r   r   r   not_x  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 )NrB   thenrh   else)rD   rE   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 )Nr8   c                    s   g | ]\}}| kr|qS r   r   )r(   r@   r:   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_itemsr6   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rd}t|td}	t|t|	 V  nd}t|t| V  d S )Nr   r   Fz9Unevaluated properties are not allowed (%s %s unexpected)r,   z[Unevaluated properties are not valid under the given schema (%s %s unevaluated and invalid))r   r   r   r   r1   r2   r   r   )
r   unevaluatedPropertiesr   r   Zevaluated_keysZunevaluated_keysr!   r   r6   r3   r   r   r   r     s2      
r   c                 c   sH   |  |dsd S tt||D ]$\\}}}| j||||dE d H  qd S )Nr8   )r   r   r   r   )r   zipr~   r   )r   r9   r   r   r@   r:   r   r   r   r   r9     s    r9   )2Z	fractionsr   r   Zjsonschema._utilsr   r   r   r   r   r   r	   Zjsonschema.exceptionsr
   r   r   r    r7   r   rA   rF   rK   rM   rJ   rL   rU   rZ   r]   r^   r   rb   rd   re   rf   rj   rn   rp   rr   rt   ry   rz   r|   r}   r   r   r   r   r   r   r   r9   r   r   r   r   <module>   sN   $	%				
 