U
    kufW;                     @   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k	rd|fgS |  S d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
   ?/tmp/pip-unpacked-wheel-k94ccfep/jsonschema/_legacy_keywords.pyignore_ref_siblings	   s    

r   c                 c   s   |  |dsd S | D ]\}}||kr*q|  |drN| j|||dE d H  q|  |dr|||kr|d|}t|V  q|D ]$}||kr|d|}t|V  qq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 ]`\}}||kr*q|  |drb|D ]$}||kr:|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   sD   t |D ]4}| 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   sN   |  |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rFt|D ]\}}| j|||dE d H  q$n4tt||D ]$\\}}}| j||||dE d H  qTd 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rvt||d  |dD ]\}}| j|||dE d H  qTnH|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   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rRtt||D ]$\\}}}| j||||dE d H  q*n(t|D ]\}}| j|||dE d H  qZd S )Nr   r*   r(   )r   r+   r$   r   r,   r
   r
   r   items_draft6_draft7_draft201909|   s       r4   c                 c   s\   |  |dsd S |ddr*||k}d}n||k }d}|rX|d| d|}t|V  d S )NnumberZexclusiveMinimumFzless than or equal toz	less than is z the minimum of r   r   r   )r   Zminimumr   r   failedcmpr   r
   r
   r   minimum_draft3_draft4   s    r:   c                 c   s\   |  |dsd S |ddr*||k}d}n||k}d}|rX|d| d|}t|V  d S )Nr5   ZexclusiveMaximumFzgreater than or equal tozgreater thanr6   z the maximum of r7   )r   maximumr   r   r8   r9   r   r
   r
   r   maximum_draft3_draft4   s    r<   c                 c   s   |  |dsd S | D ]\}}||krF| j|| |||dE d H  q|ddrt|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   s*    rA   c           	   	   c   s   t |}g }t|D ]P\}}| |drTt| j|||d}|sH d S || q| ||r d S qg }|D ]>}z|t|d  W qp t	k
r   |t| Y qpX qpt
|dd| |dV  d S )Nr   r   namez is not of type z, )context)r   r    r$   r   listr   r?   appendrepr	Exceptionr   join)	r   typesr   r   
all_errorsr%   r   errorsZreprsr
   r
   r   type_draft3   s(    
rL   c                 #   s>    |dsd S t fdd|D s:td|dV  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   rP   r   r   r
   rO   r   contains_draft6_draft7   s    
rS   c                 c   s(   t | j}| j||j|jdE d H  d S )N)resolver)r   	_resolverr   contentsrT   )r   recursiveRefr   r   resolvedr
   r
   r   rW      s    
rW   c                 C   s  |  |drg S g }|d}|dk	rT| j|}|t| j|j|jd||j d|krt	| j}|t| j|j|jd||j d|krd|krt
tt|S |  |d drt
tt|S |t
tt|d 7 }d	|krT| j|d	 d
|r6|t| ||d	 7 }d|krT|t| ||d 7 }nd|krT|t| ||d 7 }dD ]F}||krXt|D ],\}}| j|| d
|rn|| qnqXdD ]L}||kr|| D ]2}	t| ||	d}
|
dkr|t| ||	7 }qq|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   rU   $recursiveRefr   r3   r   ifr   thenelse)rP   unevaluatedItemsZallOfoneOfZanyOf)r   r   rU   lookupr?   %find_evaluated_item_indexes_by_schemar!   rV   rT   r   rD   ranger0   r"   r$   rE   nextr   )r   r   r   Zevaluated_indexesr	   rX   keywordkvr&   errsr
   r
   r   rc      s    


  
  
  


  rc   c                 #   sR   |  |dsd S t| ||  fddt|D }|rNd}t|t| V  d S )Nr   c                    s   g | ]\}}| kr|qS r
   r
   )rM   r%   r-   Zevaluated_item_indexesr
   r   
<listcomp>F  s   z.unevaluatedItems_draft2019.<locals>.<listcomp>z4Unevaluated items are not allowed (%s %s unexpected))r   rc   r$   r   r   r1   )r   r_   r   r   Zunevaluated_itemsr2   r
   rj   r   unevaluatedItems_draft2019@  s      
rl   c                 C   s.  |  |drg S g }|d}|d k	rT| j|}|t| j|j|jd||j d|krt	| j}|t| j|j|jd||j dD ]Z}||kr|| }|  |dr|r||
 7 }q|  |dr|D ]}||kr|| qqd|kr$|D ],}|d D ]}	t|	|r|| qqd|krd|d  D ](\}}
||krPq:|t| ||
7 }q:d	D ]L}||krh|| D ]2}
t| ||
d }|d kr~|t| ||
7 }q~qhd
|kr*| j|d
 d|r|t| ||d
 7 }d|kr*|t| ||d 7 }nd|kr*|t| ||d 7 }|S )NrY   r   rZ   r[   )r@   ZadditionalPropertiesZunevaluatedPropertiesr   ZpatternPropertiesZdependentSchemasr`   r\   r   r]   r^   )r   r   rU   rb   r?   &find_evaluated_property_keys_by_schemar!   rV   rT   r   keysrE   researchr   re   r   r"   )r   r   r   evaluated_keysr	   rX   rf   Zschema_valuer   patternr&   ri   r
   r
   r   rm   O  s    




  


  
  
  
  rm   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))keyz[Unevaluated properties are not valid under the given schema (%s %s unevaluated and invalid))	r   rm   r   rE   sortedstrr   r   r1   )
r   ZuPr   r   rq   Zunevaluated_keysr   _r2   extrasr
   r
   r   unevaluatedProperties_draft2019  s2      
rx   )ro   Zreferencing.jsonschemar   Z
jsonschemar   Zjsonschema.exceptionsr   r   r   r   r#   r'   r.   r3   r4   r:   r<   rA   rL   rS   rW   rc   rl   rm   rx   r
   r
   r
   r   <module>   s*   	NU