U
    >]-                     @   sL  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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)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-dS )E    N)ensure_listequal
extras_msgfind_additional_properties	types_msgunbooluniq)FormatErrorValidationError)	iteritemsc           	      c   sb   |  |dsd S t|D ]D\}}t|D ]2\}}t||r(| j||||dD ]
}|V  qNq(qd S Nobjectpathschema_path)is_typer   researchdescend)		validatorpatternPropertiesinstanceschemapattern	subschemakverror r   8/usr/lib/python3/dist-packages/jsonschema/_validators.pyr      s       
r   c                 c   s8   |  |dsd S |D ]}| j||dD ]
}|V  q&qd S )Nr   )r   r   )r   r   )r   propertyNamesr   r   propertyr   r   r   r   r       s    
r    c           	      c   s   |  |dsd S tt||}|  |drV|D ]$}| j|| ||dD ]
}|V  qFq.n~|s|rd|krt|d }t|dkrd}nd}ddttt||dtt|f }t	|V  nd	}t	|t
| V  d S )
Nr   r   r      ZdoesZdoz&%s %s not match any of the regexes: %s, z8Additional properties are not allowed (%s %s unexpected))r   setr   r   sortedlenjoinmapreprr
   r   )	r   ZaPr   r   ZextrasZextrar   ZpatternsZverbr   r   r   additionalProperties)   s*    r+   c                 c   s   |  |dsd S |  |drXtt||D ]*\\}}}| j||||dD ]
}|V  qHq*n.t|D ]$\}}| j|||dD ]
}|V  qxq`d S )Narrayr   r"   )r   zip	enumerater   )r   itemsr   r   indexitemr   r   r   r   r   r/   E   s       
r/   c              	   c   s   |  |dr |  |di dr$d S t|dg }|  |dr|t||d  |dD ]$\}}| j|||dD ]
}|V  qlqTnF|st|t|dg krd}t|t|t|dg d   V  d S )Nr,   r/   r   )startr"   z3Additional items are not allowed (%s %s unexpected))r   getr'   r.   r   r
   r   )r   ZaIr   r   Z	len_itemsr0   r1   r   r   r   r   additionalItemsU   s"    
r4   c                 c   s   t ||std|f V  d S )Nz%r was expected)r   r
   )r   constr   r   r   r   r   r5   i   s    
r5   c                 #   s<    |dsd S t fdd|D s8td|f V  d S )Nr,   c                 3   s   | ]} | V  qd S Nis_valid).0elementcontainsr   r   r   	<genexpr>r   s     zcontains.<locals>.<genexpr>z+None of %r are valid under the given schema)r   anyr
   )r   r<   r   r   r   r;   r   r<   n   s    r<   c                 c   s.   |  |dsd S ||kr*td||f V  d S )Nnumberz-%r is less than or equal to the minimum of %rr   r
   r   minimumr   r   r   r   r   exclusiveMinimumx   s     rC   c                 c   s.   |  |dsd S ||kr*td||f V  d S )Nr?   z0%r is greater than or equal to the maximum of %rr@   r   maximumr   r   r   r   r   exclusiveMaximum   s     rF   c                 c   s.   |  |dsd S ||k r*td||f V  d S )Nr?   z!%r is less than the minimum of %rr@   rA   r   r   r   rB      s    
rB   c                 c   s.   |  |dsd S ||kr*td||f V  d S )Nr?   z$%r is greater than the maximum of %rr@   rD   r   r   r   rE      s    
rE   c                 c   sR   |  |dsd S t|tr0|| }t||k}n|| }|rNtd||f V  d S )Nr?   z%r is not a multiple of %r)r   
isinstancefloatintr
   )r   ZdBr   r   ZquotientZfailedr   r   r   
multipleOf   s    
rJ   c                 c   s,   |  |dr(t||k r(td|f V  d S )Nr,   %r is too shortr   r'   r
   r   ZmIr   r   r   r   r   minItems   s    rN   c                 c   s,   |  |dr(t||kr(td|f V  d S )Nr,   %r is too longrL   rM   r   r   r   maxItems   s    rP   c                 c   s,   |r(|  |dr(t|s(td|f V  d S )Nr,   z%r has non-unique elements)r   r   r
   )r   ZuIr   r   r   r   r   uniqueItems   s    
rQ   c                 c   s.   |  |dr*t||s*td||f V  d S )Nstringz%r does not match %r)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_checkerZcheckr	   r
   messagerS   )r   formatr   r   r   r   r   r   rU      s
    
rU   c                 c   s,   |  |dr(t||k r(td|f V  d S )NrR   rK   rL   r   ZmLr   r   r   r   r   	minLength   s    rW   c                 c   s,   |  |dr(t||kr(td|f V  d S )NrR   rO   rL   rV   r   r   r   	maxLength   s    rX   c           	      c   s   |  |dsd S t|D ]d\}}||kr*q|  |dr`|D ]"}||kr:d}t|||f V  q:q| j|||dD ]
}|V  qpqd S )Nr   r,   z%r is a dependency of %rr   )r   r   r
   r   )	r   dependenciesr   r   r!   Z
dependencyeachrT   r   r   r   r   rZ      s       
rZ   c                 #   s`   |dks|dkrBt | t fdd|D r\td||f V  n||kr\td||f V  d S )Nr   r#   c                 3   s   | ]} t |kV  qd S r6   )r   )r9   r[   Zunbooledr   r   r=      s     zenum.<locals>.<genexpr>z%r is not one of %r)r   allr
   )r   Zenumsr   r   r   r\   r   enum   s    r^   c              	   c   s   t | jdd }|d krH| j|}| ||D ]
}|V  q0W 5 Q R X nF| j|\}}| j| z| ||D ]
}|V  qrW 5 | j  X d S )Nresolve)getattrZresolverZ	resolvingr   r_   Z
push_scopeZ	pop_scope)r   refr   r   r_   Zresolvedr   Zscoper   r   r   ra      s    ra   c                 #   s4   t |}t fdd|D s0tt |V  d S )Nc                 3   s   | ]}  |V  qd S r6   )r   )r9   typer   r   r   r   r=     s     ztype.<locals>.<genexpr>)r   r>   r
   r   )r   typesr   r   r   rc   r   rb     s    rb   c                 c   sP   |  |dsd S t|D ]2\}}||kr| j|| |||dD ]
}|V  q>qd S r   )r   r   r   )r   
propertiesr   r   r!   r   r   r   r   r   re     s    
re   c                 c   s4   |  |dsd S |D ]}||krtd| V  qd S )Nr   z%r is a required propertyr@   )r   requiredr   r   r!   r   r   r   rf   #  s
    rf   c                 c   s,   |  |dr(t||k r(td|f V  d S )Nr   z"%r does not have enough propertiesrL   r   ZmPr   r   r   r   r   minProperties+  s    rh   c                 c   s<   |  |dsd S |  |dr8t||kr8td|f V  d S )Nr   z%r has too many propertiesrL   rg   r   r   r   maxProperties2  s    ri   c                 c   s2   t |D ]$\}}| j|||dD ]
}|V  q qd S )NrY   )r.   r   )r   allOfr   r   r0   r   r   r   r   r   rj   9  s    rj   c                 c   sT   g }t |D ].\}}t| j|||d}|s0 qP|| qtd|f |dV  d S )NrY   .%r is not valid under any of the given schemascontext)r.   listr   extendr
   )r   anyOfr   r   
all_errorsr0   r   errsr   r   r   rp   ?  s    rp   c                 #   s   t |}g }|D ]2\}}tj ||d}|s8|}	 qX|| qtd f |dV   fdd|D }
|
r|
|	 ddd |
D }td	 |f V  d S )
NrY   rk   rl   c                    s    g | ]\}}  |r|qS r   r7   )r9   isrc   r   r   
<listcomp>\  s      zoneOf.<locals>.<listcomp>r$   c                 s   s   | ]}t |V  qd S r6   )r*   )r9   r   r   r   r   r=   _  s     zoneOf.<locals>.<genexpr>z%r is valid under each of %s)r.   rn   r   ro   r
   appendr(   )r   oneOfr   r   Z
subschemasrq   r0   r   rr   Zfirst_validZ
more_validZreprsr   rc   r   rw   M  s&    

rw   c                 c   s"   |  ||rtd||f V  d S )Nz%r is not allowed for %r)r8   r
   )r   Z
not_schemar   r   r   r   r   not_e  s    
rx   c                 c   sj   |  ||r:d|krf|d }| j||ddD ]
}|V  q,n,d|krf|d }| j||ddD ]
}|V  qZd S )NthenrY   else)r8   r   )r   Z	if_schemar   r   ry   r   Zelse_r   r   r   if_l  s    
r{   ).r   Zjsonschema._utilsr   r   r   r   r   r   r   Zjsonschema.exceptionsr	   r
   Zjsonschema.compatr   r   r    r+   r/   r4   r5   r<   rC   rF   rB   rE   rJ   rN   rP   rQ   r   rU   rW   rX   rZ   r^   ra   rb   re   rf   rh   ri   rj   rp   rw   rx   r{   r   r   r   r   <module>   sF   $	


		