o
    Wi3                     @  s  d dl mZ 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/d0 Z#e
d1d2Z$ee$_%ee$_&ee$_'e
d3d4Z(ee(_%ee(_)ee(_&ee(_'e
d5d6Z*ee*_%ee*_&ee*_'e
d7d8Z+ee+_%ee+_)ee+_&ee+_'e
d9d2Z,ee,_%ee,_&ee,_'e
d:d;Z-d<e-j._/eee-_%ee-_&ee-_'e
d=d>Z0d<e0j._/eee0_%ee0_&ee0_'e
d?d@Z1d<e1j._/eee1_%ee1_)e e1_&e!e1_'e
dAdBZ2e"e2_%ee2_&ee2_'e
dCdDZ3e#e3_%ee3_&ee3_'G dEdF dFe
dFdGZ4G dHdI dIe
dIdJZ5G dKdL dLe
dLdMZ6G dNdO dOe
dOdPZ7G dQdR dRe
dRdSZ8G dTdU dUe
dUdSZ9dVdW Z:dndXdYZ;e;e<Z=e;e>Z?e;e@ZAe;eBdZd[ZCe;eBd\d[ZDd]d^ ZEd_d` ZFdadb ZGdcdd ZHdedf ZIdgdh ZJdidj ZKe	fddkdldmZLdS )o    )annotationsNc                      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__ 8/home/ubuntu/.local/lib/python3.10/site-packages/cfgv.pyr      s   
zValidationError.__init__c                 C  sH   d}| }|j d ur|d|j  d7 }|j}|j d us	|d|j 7 }|S )N
z==> z=====> )r   r   )r	   outerrr   r   r   __str__   s   

zValidationError.__str__r   )__name__
__module____qualname__r   r   __classcell__r   r   r
   r   r   
   s    r   Missingr   c                 C  s   dS )NMISSINGr   r	   r   r   r   <lambda>   s    r   c              
   c  sJ    zd V  W d S  t y$ } zt \}}}t || d|d d }~ww )N)r   r   sysexc_infowith_traceback)msge_tbr   r   r   validate_context   s   r"   c              
   c  sF    zd V  W d S  t y" } zt \}}}| ||d d }~ww r   r   )tpr   r    r!   r   r   r   
reraise_as'   s   r$   c                 C     d S r   r   r	   dctr   r   r   	_dct_noop0      r(   c                 C  sT   | j |vrd S td| j   | || j   W d    d S 1 s#w   Y  d S )NAt key: )keyr"   check_fnr&   r   r   r   _check_optional4   s
   
"r-   c                 C  s   | | j| j d S r   )
setdefaultr+   defaultr&   r   r   r   _apply_default_optional;   s   r0   c                 C  s$   | | jt| jkr|| j= d S d S r   )getr+   r   r/   r&   r   r   r   _remove_default_optional?   s   r2   c                 C  s   | j |vrtd| j  d S )NzMissing required key: )r+   r   r&   r   r   r   _require_keyD   s   
r3   c                 C  s   t | | t| | d S r   )r3   r-   r&   r   r   r   _check_requiredI   s   
r4   c                       fdd}|S )Nc                   s   t |  j d S r   )validateschemavalr   r   r   r,   P      z#_check_fn_recurse.<locals>.check_fnr   )r	   r,   r   r   r   _check_fn_recurseN   s   r;   c                 C     t || j | j|| j< d S r   )apply_defaultsr+   r7   r&   r   r   r   _apply_default_required_recurseU      r>   c                 C  r<   r   )remove_defaultsr+   r7   r&   r   r   r    _remove_default_required_recurseY   r?   rA   c                 C  s"   | j |vr
t| | t| | d S r   )r+   r0   r>   r&   r   r   r   _apply_default_optional_recurse]   s   

rB   c                 C  s&   | j |v rt| | t| | d S d S r   )r+   rA   r2   r&   r   r   r    _remove_default_optional_recursec   s   

rC   c                   r5   )Nc                   s   | | jt| jkr | | d S | j|v rI| jrK| j|v rMt| jdr*| j }nd| j}td| j d| j d| d| j d|| j 
d S d S d S )Ndescribe_oppositezis not 	Expected z to be absent when  z, found z: )	r1   condition_keyr   condition_valueensure_absentr+   hasattrrD   r   )r	   r'   explanationinnerr   r   _check_conditionalj   s(   

z2_get_check_conditional.<locals>._check_conditionalr   )rM   rN   r   rL   r   _get_check_conditionali   s   rO   c                 C  &   | | jt| jkrt| | d S d S r   )r1   rG   r   rH   r0   r&   r   r   r   #_apply_default_conditional_optional|      rQ   c                 C  rP   r   )r1   rG   r   rH   r2   r&   r   r   r   $_remove_default_conditional_optional   rR   rS   c                 C  rP   r   )r1   rG   r   rH   r>   r&   r   r   r   "_apply_default_conditional_recurse   rR   rT   c                 C  rP   r   )r1   rG   r   rH   rA   r&   r   r   r   #_remove_default_conditional_recurse   rR   rU   c                 C  s\   t t|t| j }|r,ddd |D }ddd | jD }td| d| d S )N, c                 s      | ]}t |V  qd S r   str.0xr   r   r   	<genexpr>       z,_no_additional_keys_check.<locals>.<genexpr>c                 s  rW   r   rX   rZ   r   r   r   r]      r^   zAdditional keys found: z .  Only these keys are allowed: )sortedsetkeysjoinr   )r	   r'   extraextra_skeys_sr   r   r   _no_additional_keys_check   s   rf   c                 C  s2   t t|t| j }|r| || j| d S d S r   )r_   r`   ra   callback)r	   r'   rc   r   r   r   _warn_additional_keys_check   s   rh   Required)r+   r,   RequiredRecurse)r+   r7   Optional)r+   r,   r/   OptionalRecurse)r+   r7   r/   OptionalNoDefaultConditional)r+   r,   rG   rH   rI   )FConditionalOptional)r+   r,   r/   rG   rH   rI   ConditionalRecurse)r+   r7   rG   rH   rI   NoAdditionalKeys)ra   WarnAdditionalKeys)ra   rg   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 r   r   __new__)clsobject_nameid_keyitemsr
   r   r   ru         zMap.__new__c                 C  s   t |tstd| j dt|j | jd u r d| j d}n|| jt}d| j d| j d|d}t	| | j
D ]}|| q=W d    d S 1 sPw   Y  d S )NExpected a  map but got a At ()(=))
isinstancedictr   rw   typer   rx   r1   r   r"   ry   check)r	   vcontextkey_v_sitemr   r   r   r      s   




"z	Map.checkc                 C  "   |  }| jD ]}|| q|S r   )copyry   apply_defaultr	   r   retr   r   r   r   r=         
zMap.apply_defaultsc                 C  r   r   )r   ry   remove_defaultr   r   r   r   r@      r   zMap.remove_defaults	r   r   r   	__slots__ru   r   r=   r@   r   r   r   r
   r   rs      s    rs   )rw   rx   ry   c                   @  s(   e Zd ZdZdd Zdd Zdd ZdS )	KeyValueMapr   c              
   C  s   t |tstd| j dt|j td| j dK | D ]=\}}td|  | | W d    n1 s<w   Y  td|  t	|| j
 W d    n1 sYw   Y  q!W d    d S 1 sjw   Y  d S )Nr{   r|   r}   r~   z	For key: r*   )r   r   r   rw   r   r   r"   ry   check_key_fnr6   value_schema)r	   r   kr9   r   r   r   r     s"   

"zKeyValueMap.checkc                       fdd|  D S )Nc                      i | ]\}}|t | jqS r   )r=   r   r[   r   r9   r   r   r   
<dictcomp>      z.KeyValueMap.apply_defaults.<locals>.<dictcomp>ry   r	   r   r   r   r   r=        
zKeyValueMap.apply_defaultsc                   r   )Nc                   r   r   )r@   r   r   r   r   r   r   !  r   z/KeyValueMap.remove_defaults.<locals>.<dictcomp>r   r   r   r   r   r@      r   zKeyValueMap.remove_defaultsN)r   r   r   r   r   r=   r@   r   r   r   r   r     s
    r   )rw   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_emptyrt   )rv   r   r   r
   r   r   ru   *  rz   zArray.__new__c                 C  sD   t t| | js|std| jj d|D ]}t|| j qd S )NzExpected at least 1 '')check_array	check_anyr   r   r   rw   r6   )r	   r   r9   r   r   r   r   -  s   
zArray.checkc                       fdd|D S )Nc                      g | ]}t | jqS r   )r=   r   r[   r9   r   r   r   
<listcomp>7      z(Array.apply_defaults.<locals>.<listcomp>r   r   r   r   r   r=   6  rz   zArray.apply_defaultsc                   r   )Nc                   r   r   )r@   r   r   r   r   r   r   :  r   z)Array.remove_defaults.<locals>.<listcomp>r   r   r   r   r   r@   9  rz   zArray.remove_defaults)Tr   r   r   r
   r   r   '  s    	r   r   c                   @  s    e Zd ZdZdd Zdd ZdS )Notr   c                 C     d| j S )Nzis r8   r   r   r   r   rD   @     zNot.describe_oppositec                 C  s   |t uo|| jkS r   )r   r9   r	   otherr   r   r   __eq__C  rz   z
Not.__eq__N)r   r   r   r   rD   r   r   r   r   r   r   =  s    r   r8   c                      0   e Zd ZdZ fddZdd Zdd Z  ZS )NotInr   c                      t  j| |dS Nvaluesrt   rv   r   r
   r   r   ru   J  r:   zNotIn.__new__c                 C  r   )Nz
is any of r   r   r   r   r   rD   M  r   zNotIn.describe_oppositec                 C  s   |t uo|| jvS r   r   r   r   r   r   r   r   P  rz   zNotIn.__eq__r   r   r   r   ru   rD   r   r   r   r   r
   r   r   G  
    r   r   c                      r   )Inr   c                   r   r   rt   r   r
   r   r   ru   W  r:   z
In.__new__c                 C  r   )Nzis not any of r   r   r   r   r   rD   Z  r   zIn.describe_oppositec                 C  s   |t uo|| jv S r   r   r   r   r   r   r   ]  rz   z	In.__eq__r   r   r   r
   r   r   T  r   r   c                 C  r%   r   r   )r    r   r   r   r   a  r)   r   c                   s    fdd}|S )Nc                   s2   t |  sp	 j}td| dt| j d S )NrE   z got )r   r   r   r   )r   
typename_sr#   typenamer   r   check_type_fnf  s   

z!check_type.<locals>.check_type_fnr   )r#   r   r   r   r   r   
check_typee  s   r   string)r   textc                   r5   )Nc                   s8   |  vrd dd t D }td| d| d S )NrV   c                 s  rW   r   rX   rZ   r   r   r   r]   y  r^   z8check_one_of.<locals>.check_one_of_fn.<locals>.<genexpr>zExpected one of z
 but got: )rb   r_   r   )r   
possible_spossibler   r   check_one_of_fnw  s   z%check_one_of.<locals>.check_one_of_fnr   )r   r   r   r   r   check_one_ofv  s   r   c                 C  s0   zt |  W d S  t jy   t| dw )Nz is not a valid python regex)recompileerrorr   )r   r   r   r   check_regex  s
   r   c                   r5   )Nc              	     sn   t | ttfstdt| jt| D ]\}}td|   | W d    n1 s/w   Y  qd S )NzExpected array but got z	At index )r   listtupler   r   r   	enumerater"   )r   ir9   inner_checkr   r   check_array_fn  s   
z#check_array.<locals>.check_array_fnr   )r   r   r   r   r   r     s   	r   c                    r5   )Nc                   s    D ]}||  qd S r   r   )r   fnfnsr   r   r     s   
zcheck_and.<locals>.checkr   )r   r   r   r   r   	check_and  s   r   c                 C  s   | |  | S r   )r   r   r7   r   r   r   r6     s   
r6   c                 C  
   | | S r   )r=   r   r   r   r   r=        
r=   c                 C  r   r   )r@   r   r   r   r   r@     r   r@   )display_filenamec          	      C  s0  |p| }t | tj| st| dtd| a zt| dd}| }W d    n1 s4w   Y  W n tyL } ztt	|d }~ww z||}W n t
ye } ztt	|d }~ww t|| t||W  d    W  d    S 1 sw   Y  W d    d S 1 sw   Y  d S )Nz is not a filezFile zutf-8)encoding)r$   ospathisfiler   r"   openreadUnicodeDecodeErrorrY   	Exceptionr6   r=   )	filenamer7   load_strategyexc_tpr   fcontentsr   datar   r   r   load_from_filename  s4   


"r   r   )M
__future__r   collections
contextlibos.pathr   r   r   
ValueErrorr   
namedtupler   r   __repr__contextmanagerr"   r$   r(   r-   r0   r2   r3   r4   propertyr;   r>   rA   rB   rC   rO   rQ   rS   rT   rU   rf   rh   ri   r   r   r   rj   r,   rk   rl   rm   rn   ru   __defaults__ro   rp   rq   rr   rs   r   r   r   r   r   r   r   bool
check_boolbytescheck_bytesint	check_intrY   check_string
check_textr   r   r   r   r6   r=   r@   r   r   r   r   r   <module>   s    






""



