B
    a/                 @   sh  d dl Z d dlZd dlZd dlZd dlZG dd deZe dd Z	dd e
e	_ejdd	 Zejd
d Zdd Zdd Zdd Zdd Zdd Zdd Ze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!e d0d1Z"ee"_#ee"_$ee"_%e d2d3Z&ee&_#ee&_'ee&_$ee&_%e d4d5Z(ee(_#ee(_$ee(_%e d6d7Z)ee)_#ee)_'ee)_$ee)_%e d8d1Z*ee*_#ee*_$ee*_%e d9d:Z+d;e+j,_-eee+_#ee+_$ee+_%e d<d=Z.d;e.j,_-eee._#ee._$ee._%e d>d?Z/d;e/j,_-eee/_#ee/_'ee/_$ee/_%e d@dAZ0e e0_#ee0_$ee0_%e dBdCZ1e!e1_#ee1_$ee1_%G dDdE dEe dEdFZ2G dGdH dHe dHdIZ3G dJdK dKe dKdLZ4G dMdN dNe dNdOZ5G dPdQ dQe dQdOZ6dRdS Z7didTdUZ8e8e9Z:e8e;Z<e8e=Z>e8e?dVdWZ@e8e?dXdWZAdYdZ ZBd[d\ ZCd]d^ ZDd_d` ZEdadb ZFdcdd ZGdedf ZHefdgdhZIdS )j    Nc                   s&   e Zd Zd fdd	Zdd Z  ZS )ValidationErrorNc                s   t  | || _|| _d S )N)super__init__	error_msgctx)selfr   r   )	__class__ (/tmp/pip-unpacked-wheel-2q5d0xn5/cfgv.pyr   	   s    zValidationError.__init__c             C   sD   d}| }x&|j d k	r.|d|j  d7 }|j}q
W |d|j 7 }|S )N
z==> z=====> )r   r   )r   outerrr	   r	   r
   __str__   s    
zValidationError.__str__)N)__name__
__module____qualname__r   r   __classcell__r	   r	   )r   r
   r      s   r   ZMissingr	   c             C   s   dS )NMISSINGr	   )r   r	   r	   r
   <lambda>       r   c          
   c   sR   y
d V  W nB t k
rL } z$t \}}}t || d|W d d }~X Y nX d S )N)r   )r   sysexc_infowith_traceback)msge_tbr	   r	   r
   validate_context   s
    
r   c          
   c   sN   y
d V  W n> t k
rH } z t \}}}| ||W d d }~X Y nX d S )N)r   r   r   r   )tpr   r   r   r	   r	   r
   
reraise_as%   s
    
r   c             C   s   d S )Nr	   )r   dctr	   r	   r
   	_dct_noop.   s    r!   c          	   C   s>   | j |krd S td| j   | || j   W d Q R X d S )NzAt key: )keyr   check_fn)r   r    r	   r	   r
   _check_optional2   s    
r$   c             C   s   | | j| j d S )N)
setdefaultr"   default)r   r    r	   r	   r
   _apply_default_optional9   s    r'   c             C   s    | | jt| jkr|| j= d S )N)getr"   r   r&   )r   r    r	   r	   r
   _remove_default_optional=   s    r)   c             C   s   | j |krtd| j  d S )NzMissing required key: )r"   r   )r   r    r	   r	   r
   _require_keyB   s    
r*   c             C   s   t | | t| | d S )N)r*   r$   )r   r    r	   r	   r
   _check_requiredG   s    
r+   c                s    fdd}|S )Nc                s   t |  j d S )N)validateschema)val)r   r	   r
   r#   N   s    z#_check_fn_recurse.<locals>.check_fnr	   )r   r#   r	   )r   r
   _check_fn_recurseL   s    r/   c             C   s   t || j | j|| j< d S )N)apply_defaultsr"   r-   )r   r    r	   r	   r
   _apply_default_required_recurseS   s    r1   c             C   s   t || j | j|| j< d S )N)remove_defaultsr"   r-   )r   r    r	   r	   r
    _remove_default_required_recurseW   s    r3   c             C   s"   | j |krt| | t| | d S )N)r"   r'   r1   )r   r    r	   r	   r
   _apply_default_optional_recurse[   s    

r4   c             C   s"   | j |krt| | t| | d S )N)r"   r3   r)   )r   r    r	   r	   r
    _remove_default_optional_recursea   s    

r5   c                s    fdd}|S )Nc                s   | | jt| jkr  | | np| j|kr| jr| j|krt| jdrR| j }nd| j}td| j d| j d| d| j d|| j 
d S )Ndescribe_oppositezis not z	Expected z to be absent when  z, found z: )	r(   condition_keyr   condition_valueensure_absentr"   hasattrr6   r   )r   r    Zexplanation)innerr	   r
   _check_conditionalh   s    
z2_get_check_conditional.<locals>._check_conditionalr	   )r<   r=   r	   )r<   r
   _get_check_conditionalg   s    r>   c             C   s"   | | jt| jkrt| | d S )N)r(   r8   r   r9   r'   )r   r    r	   r	   r
   #_apply_default_conditional_optionalz   s    r?   c             C   s"   | | jt| jkrt| | d S )N)r(   r8   r   r9   r)   )r   r    r	   r	   r
   $_remove_default_conditional_optional   s    r@   c             C   s"   | | jt| jkrt| | d S )N)r(   r8   r   r9   r1   )r   r    r	   r	   r
   "_apply_default_conditional_recurse   s    rA   c             C   s"   | | jt| jkrt| | d S )N)r(   r8   r   r9   r3   )r   r    r	   r	   r
   #_remove_default_conditional_recurse   s    rB   c             C   s\   t t|t| j }|rXddd |D }ddd | jD }td| d| d S )Nz, c             s   s   | ]}t |V  qd S )N)str).0xr	   r	   r
   	<genexpr>   s    z,_no_additional_keys_check.<locals>.<genexpr>c             s   s   | ]}t |V  qd S )N)rC   )rD   rE   r	   r	   r
   rF      s    zAdditional keys found: z .  Only these keys are allowed: )sortedsetkeysjoinr   )r   r    extraZextra_sZkeys_sr	   r	   r
   _no_additional_keys_check   s    rL   c             C   s.   t t|t| j }|r*| || j| d S )N)rG   rH   rI   callback)r   r    rK   r	   r	   r
   _warn_additional_keys_check   s    rN   Required)r"   r#   RequiredRecurse)r"   r-   Optional)r"   r#   r&   OptionalRecurse)r"   r-   r&   OptionalNoDefaultConditional)r"   r#   r8   r9   r:   )FConditionalOptional)r"   r#   r&   r8   r9   r:   ConditionalRecurse)r"   r-   r8   r9   r:   NoAdditionalKeys)rI   WarnAdditionalKeys)rI   rM   c                   s8   e Zd ZdZ fddZdd Zdd Zdd	 Z  ZS )
Mapr	   c                s   t  | |||S )N)r   __new__)clsobject_nameid_keyitems)r   r	   r
   rZ      s    zMap.__new__c          	   C   s   t |ts&td| j dt|j | jd kr@d| j d}n*|| jt}d| j d| j d|d}t	|  x| j
D ]}|| q|W W d Q R X d S )NzExpected a z map but got a zAt z()(=))
isinstancedictr   r\   typer   r]   r(   r   r   r^   check)r   vcontextZkey_v_sitemr	   r	   r
   re      s    


z	Map.checkc             C   s&   |  }x| jD ]}|| qW |S )N)copyr^   apply_default)r   rf   retrh   r	   r	   r
   r0      s    zMap.apply_defaultsc             C   s&   |  }x| jD ]}|| qW |S )N)ri   r^   remove_default)r   rf   rk   rh   r	   r	   r
   r2      s    zMap.remove_defaults)	r   r   r   	__slots__rZ   re   r0   r2   r   r	   r	   )r   r
   rY      s
   rY   )r\   r]   r^   c                   s:   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Z  ZS )Arrayr	   Tc                s   t  j| ||dS )N)ofallow_empty)r   rZ   )r[   ro   rp   )r   r	   r
   rZ     s    zArray.__new__c             C   sH   t t| | js*|s*td| jj dx|D ]}t|| j q0W d S )NzExpected at least 1 '')check_array	check_anyrp   r   ro   r\   r,   )r   rf   r.   r	   r	   r
   re   	  s    

zArray.checkc                s    fdd|D S )Nc                s   g | ]}t | jqS r	   )r0   ro   )rD   r.   )r   r	   r
   
<listcomp>  s    z(Array.apply_defaults.<locals>.<listcomp>r	   )r   rf   r	   )r   r
   r0     s    zArray.apply_defaultsc                s    fdd|D S )Nc                s   g | ]}t | jqS r	   )r2   ro   )rD   r.   )r   r	   r
   rt     s    z)Array.remove_defaults.<locals>.<listcomp>r	   )r   rf   r	   )r   r
   r2     s    zArray.remove_defaults)T)	r   r   r   rm   rZ   re   r0   r2   r   r	   r	   )r   r
   rn     s
   	rn   )ro   rp   c               @   s    e Zd ZdZdd Zdd ZdS )Notr	   c             C   s   d| j S )Nzis )r.   )r   r	   r	   r
   r6     s    zNot.describe_oppositec             C   s   |t k	o|| jkS )N)r   r.   )r   otherr	   r	   r
   __eq__  s    z
Not.__eq__N)r   r   r   rm   r6   rw   r	   r	   r	   r
   ru     s   ru   )r.   c                   s0   e Zd ZdZ fddZdd Zdd Z  ZS )NotInr	   c                s   t  j| |dS )N)values)r   rZ   )r[   ry   )r   r	   r
   rZ   &  s    zNotIn.__new__c             C   s   d| j S )Nz
is any of )ry   )r   r	   r	   r
   r6   )  s    zNotIn.describe_oppositec             C   s   |t k	o|| jkS )N)r   ry   )r   rv   r	   r	   r
   rw   ,  s    zNotIn.__eq__)r   r   r   rm   rZ   r6   rw   r   r	   r	   )r   r
   rx   #  s   rx   )ry   c                   s0   e Zd ZdZ fddZdd Zdd Z  ZS )Inr	   c                s   t  j| |dS )N)ry   )r   rZ   )r[   ry   )r   r	   r
   rZ   3  s    z
In.__new__c             C   s   d| j S )Nzis not any of )ry   )r   r	   r	   r
   r6   6  s    zIn.describe_oppositec             C   s   |t k	o|| jkS )N)r   ry   )r   rv   r	   r	   r
   rw   9  s    z	In.__eq__)r   r   r   rm   rZ   r6   rw   r   r	   r	   )r   r
   rz   0  s   rz   c             C   s   d S )Nr	   )r   r	   r	   r
   rs   =  s    rs   c                s    fdd}|S )Nc                s2   t |  s.p j}td| dt| j d S )Nz	Expected z got )rb   r   r   rd   )rf   Z
typename_s)r   typenamer	   r
   check_type_fnB  s    

z!check_type.<locals>.check_type_fnr	   )r   r{   r|   r	   )r   r{   r
   
check_typeA  s    r}   string)r{   textc                s    fdd}|S )Nc                s8   |  kr4d dd t D }td| d| d S )Nz, c             s   s   | ]}t |V  qd S )N)rC   )rD   rE   r	   r	   r
   rF   U  s    z8check_one_of.<locals>.check_one_of_fn.<locals>.<genexpr>zExpected one of z
 but got: )rJ   rG   r   )rf   Z
possible_s)possibler	   r
   check_one_of_fnS  s    z%check_one_of.<locals>.check_one_of_fnr	   )r   r   r	   )r   r
   check_one_ofR  s    r   c             C   s8   yt |  W n$ t jk
r2   t| dY nX d S )Nz is not a valid python regex)recompileerrorr   )rf   r	   r	   r
   check_regex\  s    r   c                s    fdd}|S )Nc          
      s^   t | ttfs"tdt| jx6t| D ]*\}}td|   | W d Q R X q,W d S )NzExpected array but got z	At index )rb   listtupler   rd   r   	enumerater   )rf   ir.   )inner_checkr	   r
   check_array_fnd  s    z#check_array.<locals>.check_array_fnr	   )r   r   r	   )r   r
   rr   c  s    	rr   c                 s    fdd}|S )Nc                s   x D ]}||  qW d S )Nr	   )rf   fn)fnsr	   r
   re   q  s    
zcheck_and.<locals>.checkr	   )r   re   r	   )r   r
   	check_andp  s    r   c             C   s   | |  | S )N)re   )rf   r-   r	   r	   r
   r,   w  s    
r,   c             C   s
   | | S )N)r0   )rf   r-   r	   r	   r
   r0   |  s    r0   c             C   s
   | | S )N)r2   )rf   r-   r	   r	   r
   r2     s    r2   c             C   s   t | tj| s$t|  dtd|   y$t| dd}| }W d Q R X W n. tk
r } ztt	|W d d }~X Y nX y||}W n. t
k
r } ztt	|W d d }~X Y nX t|| t||S Q R X W d Q R X d S )Nz is not a filezFile zutf-8)encoding)r   ospathisfiler   r   openreadUnicodeDecodeErrorrC   	Exceptionr,   r0   )filenamer-   Zload_strategyZexc_tpfcontentsr   datar	   r	   r
   load_from_filename  s    

r   )N)Jcollections
contextlibos.pathr   r   r   
ValueErrorr   
namedtupler   rd   __repr__contextmanagerr   r   r!   r$   r'   r)   r*   r+   propertyr/   r1   r3   r4   r5   r>   r?   r@   rA   rB   rL   rN   rO   re   rj   rl   rP   r#   rQ   rR   rS   rT   rZ   __defaults__rU   rV   rW   rX   rY   rn   ru   rx   rz   rs   r}   boolZ
check_boolbytesZcheck_bytesintZ	check_intrC   Zcheck_stringZ
check_textr   r   rr   r   r,   r0   r2   r   r	   r	   r	   r
   <module>   s   		


"



