B
    c`\,                 @   s4  d dl Z d dl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)_utils)FormatErrorValidationError)	iteritemsc       	      c   sn   |  |dsd S xXt|D ]L\}}xBt|D ]6\}}t||r,x | j||||dD ]
}|V  qTW q,W qW d S )Nobject)pathschema_path)is_typer   researchdescend)		validatorpatternPropertiesinstanceschemapattern	subschemakverror r   5lib/python3.7/site-packages/jsonschema/_validators.pyr      s    r   c             c   s@   |  |dsd S x*|D ]"}x| j||dD ]
}|V  q*W qW 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r`x|D ](}x"| j|| ||dD ]
}|V  qLW q2W 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: %sz, z8Additional properties are not allowed (%s %s unexpected))r	   setr   Zfind_additional_propertiesr   sortedlenjoinmapreprr   
extras_msg)	r   ZaPr   r   ZextrasZextrar   ZpatternsZverbr   r   r   additionalProperties!   s(    
r"   c             c   s   |  |dsd S |  |dr`xxtt||D ].\\}}}x | j||||dD ]
}|V  qLW q,W n6x4t|D ](\}}x| j|||dD ]
}|V  qW qjW d S )Narray)r   r   )r   )r	   zip	enumerater   )r   itemsr   r   indexitemr   r   r   r   r   r&   =   s    r&   c          
   c   s   |  |dr |  |di dr$d S t|dg }|  |drxt||d  |dD ](\}}x| j|||dD ]
}|V  qpW qVW nH|st|t|dg krd}t|t|t|dg d   V  d S )Nr#   r&   r   )start)r   z3Additional items are not allowed (%s %s unexpected))r	   getr   r%   r   r   r   r!   )r   ZaIr   r   Z	len_itemsr'   r(   r   r   r   r   additionalItemsM   s    r+   c             c   s   ||krt d|f V  d S )Nz%r was expected)r   )r   constr   r   r   r   r   r,   a   s    r,   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>j   s    zcontains.<locals>.<genexpr>z+None of %r are valid under the given schema)r	   anyr   )r   r0   r   r   r   )r0   r   r   r0   f   s
    r0   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   exclusiveMinimump   s    r5   c             c   s.   |  |dsd S ||kr*td||f V  d S )Nr3   z0%r is greater than or equal to the maximum of %r)r	   r   )r   maximumr   r   r   r   r   exclusiveMaximum|   s    r7   c             c   s.   |  |dsd S ||k r*td||f V  d S )Nr3   z!%r is less than the minimum of %r)r	   r   )r   r4   r   r   r   r   r   r4      s
    r4   c             c   s.   |  |dsd S ||kr*td||f V  d S )Nr3   z$%r is greater than the maximum of %r)r	   r   )r   r6   r   r   r   r   r   r6      s
    r6   c             c   sR   |  |dsd S t|tr0|| }t||k}n|| }|rNtd||f V  d S )Nr3   z%r is not a multiple of %r)r	   
isinstancefloatintr   )r   ZdBr   r   ZquotientZfailedr   r   r   
multipleOf   s    
r;   c             c   s,   |  |dr(t||k r(td|f V  d S )Nr#   z%r is too short)r	   r   r   )r   mIr   r   r   r   r   minItems   s    r=   c             c   s,   |  |dr(t||kr(td|f V  d S )Nr#   z%r is too long)r	   r   r   )r   r<   r   r   r   r   r   maxItems   s    r>   c             c   s.   |r*|  |dr*t|s*td|f V  d S )Nr#   z%r has non-unique elements)r	   r   Zuniqr   )r   ZuIr   r   r   r   r   uniqueItems   s    
r?   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	rRy| j || W n4 tk
rP } zt|j|jdV  W d d }~X Y nX d S )N)cause)Zformat_checkerZcheckr   r   messagerA   )r   formatr   r   r   r   r   r   rC      s
    
rC   c             c   s,   |  |dr(t||k r(td|f V  d S )Nr@   z%r is too short)r	   r   r   )r   mLr   r   r   r   r   	minLength   s    rE   c             c   s,   |  |dr(t||kr(td|f V  d S )Nr@   z%r is too long)r	   r   r   )r   rD   r   r   r   r   r   	maxLength   s    rF   c       	      c   s   |  |dsd S xxt|D ]l\}}||kr,q|  |drfxL|D ]"}||kr>d}t|||f V  q>W qx| j|||dD ]
}|V  qxW qW d S )Nr   r#   z%r is a dependency of %r)r   )r	   r   r   r   )	r   dependenciesr   r   r   Z
dependencyZeachrB   r   r   r   r   rG      s    
rG   c             c   s   ||krt d||f V  d S )Nz%r is not one of %r)r   )r   Zenumsr   r   r   r   r   enum   s    rH   c          	   c   s   t | jdd }|d krL| j|"}x| ||D ]
}|V  q2W W d Q R X nJ| j|\}}| j| z x| ||D ]
}|V  qxW W d | j  X d S )Nresolve)getattrZresolverZ	resolvingr   rI   Z
push_scopeZ	pop_scope)r   refr   r   rI   Zresolvedr   Zscoper   r   r   rK      s    rK   c             #   s8   t |}t fdd|D s4tt  |V  d S )Nc             3   s   | ]}  |V  qd S )N)r	   )r.   type)r   r   r   r   r1     s    ztype.<locals>.<genexpr>)r   Zensure_listr2   r   Z	types_msg)r   typesr   r   r   )r   r   r   rL     s    
rL   c             c   sX   |  |dsd S xBt|D ]6\}}||krx$| j|| |||dD ]
}|V  qBW qW d S )Nr   )r   r   )r	   r   r   )r   
propertiesr   r   r   r   r   r   r   r   rN     s    rN   c             c   s8   |  |dsd S x"|D ]}||krtd| V  qW d S )Nr   z%r is a required property)r	   r   )r   requiredr   r   r   r   r   r   rO     s
    
rO   c             c   s,   |  |dr(t||k r(td|f V  d S )Nr   z"%r does not have enough properties)r	   r   r   )r   mPr   r   r   r   r   minProperties  s    rQ   c             c   s<   |  |dsd S |  |dr8t||kr8td|f V  d S )Nr   z%r has too many properties)r	   r   r   )r   rP   r   r   r   r   r   maxProperties&  s    rR   c             c   s:   x4t |D ](\}}x| j|||dD ]
}|V  q$W q
W d S )N)r   )r%   r   )r   allOfr   r   r'   r   r   r   r   r   rS   -  s    rS   c             c   sV   g }xLt |D ],\}}t| j|||d}|s0P || qW td|f |dV  d S )N)r   z.%r is not valid under any of the given schemas)context)r%   listr   extendr   )r   anyOfr   r   
all_errorsr'   r   errsr   r   r   rW   3  s    rW   c             #   s   t |}g }xL|D ]0\}}tj ||d}|s8|}	P || qW td f |dV   fdd|D }
|
r|
|	 ddd |
D }td	 |f V  d S )
N)r   z.%r is not valid under any of the given schemas)rT   c                s    g | ]\}}  |r|qS r   )r-   )r.   is)r   r   r   r   
<listcomp>P  s    zoneOf.<locals>.<listcomp>z, c             s   s   | ]}t |V  qd S )N)r    )r.   r   r   r   r   r1   S  s    zoneOf.<locals>.<genexpr>z%r is valid under each of %s)r%   rU   r   rV   r   appendr   )r   oneOfr   r   Z
subschemasrX   r'   r   rY   Zfirst_validZ
more_validZreprsr   )r   r   r   r^   A  s"    

r^   c             c   s"   |  ||rtd||f V  d S )Nz%r is not allowed for %r)r-   r   )r   Z
not_schemar   r   r   r   r   not_Y  s    r_   c             c   sr   |  ||r>d|krn|d }xP| j||ddD ]
}|V  q.W n0d|krn|d }x| j||ddD ]
}|V  q`W d S )Nthen)r   else)r-   r   )r   Z	if_schemar   r   r`   r   Zelse_r   r   r   if_`  s    rb   )(r
   Z
jsonschemar   Zjsonschema.exceptionsr   r   Zjsonschema.compatr   r   r   r"   r&   r+   r,   r0   r5   r7   r4   r6   r;   r=   r>   r?   r   rC   rE   rF   rG   rH   rK   rL   rN   rO   rQ   rR   rS   rW   r^   r_   rb   r   r   r   r   <module>   sF   


	