
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    5`<C                     @   sL  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
mZmZ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"d0d1 Z#d2d3 Z$d4d5 Z%d6d7 Z&d8d9 Z'd:d; Z(d<d= Z)e*d>d>d?id@dAdB ifdCdD Z+e*d>d>d?id@eifdEdF Z,e*d>d>d?id@eifdGdH Z-e*d>d>d?id@dIdB ifdJdK Z.dLdM Z/e*d>d>d?id@dNdB ifdOdP Z0dQdR Z1dSdT Z2dUdV Z3dWdX Z4dYdZ Z5d[d\ Z6d]d^ Z7d_d` Z8dadb Z9dcdd Z:dedf Z;dgdh Z<didj Z=dkS )l    )deepcopy)NamedTemporaryFile)mark)	Validatorerrors)assert_failassert_has_errorassert_normalizedassert_successc                  O   s   t dd S )NzThis shall not be called.)RuntimeError)argskwargs r   R/opt/alt/python38/lib/python3.8/site-packages/cerberus/tests/test_normalization.pymust_not_be_called   s    r   c                  C   s,   ddt ii} ddi}ddi}t|||  d S )Namountcoerce1   intr	   schemadocumentexpectedr   r   r   test_coerce   s    r   c                  C   s>   ddddt iidi} dddii}dddii}t|||  d S Nthingdictr   r   typer   2   r   r   r   r   r   test_coerce_in_dictschema   s    r#   c                  C   s>   dddt idi} ddddgi}ddd	d
gi}t|||  d S )Nthingslistr   r   r   r!   3r   r"      r   r   r   r   r   test_coerce_in_listschema#   s    r(   c                  C   sz   dddt idtigdi} dddgi}dddgi}t|||  t| }|d d	 ||r`t|jd |d ksvtd S )
Nr$   r%   r   r    itemsr   r"   r   r!   r'   )r   strr	   r   appendAssertionErrorr   )r   r   r   	validatorr   r   r   test_coerce_in_listitems*   s    r/   c                  C   sL   dddt iid} dd| di}dddigi}dddigi}t||| d S )	Nr   r   r   r   r$   r%   r!   r"   r   )Zitem_schemar   r   r   r   r   r   'test_coerce_in_dictschema_in_listschema6   s
    r0   c                  C   s8   ddt ii} t| }ddi}|| |j|k	s4td S )Nr   r   r   )r   r   Zvalidater   r-   )r   vdocr   r   r   test_coerce_not_destructive>   s
    
r3   c                  C   s:   ddt ii} tddi| }d|d _t|ddtjt  d S )Nr   r   not_a_numberr   r   )r   r   )r   r   infor   r   COERCION_FAILEDr   _errorsr   r   r   test_coerce_catches_ValueErrorF   s    
    r9   c                  C   sP   dddt idtigdi} dddgi}t|| }d|d _t|d	d
tjt  d S )Nr$   r%   r   r)   r4   r"   r   r   )r$   r   r$   r*   r   )r   r+   r   r5   r   r   r6   r   r   r8   r   r   r   +test_coerce_in_listitems_catches_ValueErrorO   s    

r<   c                  C   s>   ddt jii} tddi| }d|d _t|ddtjt j d S )Nnamer   i  r   r   )r=   r   )r+   lowerr   r5   r   r   r6   r7   r   r   r   test_coerce_catches_TypeError]   s    
    r?   c                  C   sT   dddt idtjigdi} dddgi}t|| }d|d _t|d	d
tjtj d S )Nr$   r%   r   r)   r   r"   r   r   )r$   r   r:   )r   r+   r>   r   r5   r   r   r6   r;   r   r   r   *test_coerce_in_listitems_catches_TypeErrorf   s     

r@   c                  C   s:   di dt idi} dddii}dddii}t|||  d S )Nfoor   r   allow_unknownbar0r   r   r   r   r   r   test_coerce_unknownv   s    rF   c                     sn   G  fdddt   ddddii} | ddid dks@t dd	did
} | dd idd iksjtd S )Nc                       s&   e Zd Z fddZdd Z  ZS )z3test_custom_coerce_and_rename.<locals>.MyNormalizerc                    s   t  | j|| || _d S N)super__init__
multiplier)selfrJ   r   r   )MyNormalizer	__class__r   r   rI      s    z<test_custom_coerce_and_rename.<locals>.MyNormalizer.__init__c                 S   s
   || j  S rG   )rJ   )rK   valuer   r   r   _normalize_coerce_multiply   s    zNtest_custom_coerce_and_rename.<locals>.MyNormalizer._normalize_coerce_multiply)__name__
__module____qualname__rI   rO   __classcell__r   rL   )rM   r   rL   ~   s   rL   r"   rA   r   Zmultiply   r'   rename_handlerrC   	   )r   
normalizedr-   r1   r   rT   r   test_custom_coerce_and_rename}   s
    r[   c                  C   s:   dd } dd }ddt | |gii}tddiddi| d S )Nc                 S   s   | dd  S )Nr"   r   xr   r   r   <lambda>       z#test_coerce_chain.<locals>.<lambda>c                 S   s   |   S rG   )upperr\   r   r   r   r^      r_   rA   r      F)hexr	   )Zdrop_prefixr`   r   r   r   r   test_coerce_chain   s    rd   c                 C   s:   dd }ddt |gii}| ddi| tj| jks6td S )Nc                 S   s   t dd S )Nz0The coercion chain did not abort after an error.)r-   rN   r   r   r   
dont_do_me   s    z,test_coerce_chain_aborts.<locals>.dont_do_merA   r   rE   )rc   r   r6   r8   r-   )r.   rf   r   r   r   r   test_coerce_chain_aborts   s    rg   c                 C   sN   dddt ddi}ddgi}| ||d ks2t| j||dd|ksJtd S )	Ndatar%   integerr    r   r   qT)Zalways_return_document)r   Z	validatedr-   )r.   r   r   r   r   r   !test_coerce_non_digit_in_sequence   s
    
rl   c                  C   s(   dt dddi} dd i}t|||  d S )NrA   Tri   r   nullabler    r   r   r   r   r   r   test_nullables_dont_fail_coerce   s    rp   c                 C   sN   dd }d|dddi}dd i}t ||| | ddi| tj| jksJtd S )Nc                 S   s   t dd S )Nzexpected to fail)	Exceptionre   r   r   r   failing_coercion   s    zGtest_nullables_fail_coerce_on_non_null_values.<locals>.failing_coercionrA   Tri   rm   r"   )r	   r   r6   r8   r-   )r.   rr   r   r   r   r   r   -test_nullables_fail_coerce_on_non_null_values   s    rs   c                  C   s,   ddt ii} ddi}ddi}t|||  d S )Nr   r   r!   r"   r   r   r   r   r   test_normalized   s    rt   c                 C   s:   dddii}ddi}ddi}| ||d | j |ks6td S )NrA   renamerD   r   F)r   r-   r.   r   r   r   r   r   r   test_rename   s
    rw   c                  C   s4   t dtid} i }ddi}ddi}t||||  d S )NrV   rW   rE   rA   r   )r   r   r	   rv   r   r   r   test_rename_handler   s
    rx   c                  C   s4   t dd} dddii}ddi}i }t||||  d S )NTpurge_unknownrA   r    stringrD   r   r	   rv   r   r   r   test_purge_unknown   s
    
r}   c                  C   s<   dddddiiddi} dddii}di i}t |||  d S )	NrA   r   r    r{   T)r    r   rz   rD    r	   r   r   r   r   test_purge_unknown_in_subschema   s    
r   c                  C   s   ddt ii} dtddd}|d d |d d	 t| d
d|}|d dksZt|d  dksnt|d   |d   d S )Nrevisionr   5zw+)mode)r   filer   Zfoobarr   TrW      )	r   r   writeseekr   rY   r-   readcloser   r   rY   r   r   r   test_issue_147_complex   s    r   c                  C   sx   ddddt iidi} d}dd|ii}t| |}||k	s@t|d d dksTt|dks`t|d d |ksttd S r   )r   r   rY   r-   )r   Zref_objr   rY   r   r   r   test_issue_147_nested_dict   s    r   c                  C   s<   ddt dddi} dddii}dddii}t|||  d S )	Nr   r   ri   r   r    )r    Zvaluesrulesr   r!   r"   r   r   r   r   r   test_coerce_in_valuesrules   s     r   c                  C   s<   ddt dddi} dddii}dddii}t|||  d S )	Nr   r   ri   r   )r    Z	keysrulesr   rA   r   r   r   r   r   r   test_coerce_in_keysrules	  s     r   c                 C   s`   dddt ddi}ddddgi}dd	d
dgi}t||||  | jd D ]}t|t sHtqHd S )Na_listr%   floatrj   r   r'   rU   r   g      @g      @g      @)r   r	   r   
isinstancer-   )r.   r   r   r   r]   r   r   r   test_coercion_of_sequence_items  s    r   default	bar_valuedefault_setterc                 C   s   dS Nr   r   r2   r   r   r   r^     r_   r^   c                 C   sB   ddi}| |  ddi|d}ddi}ddd}t||| d S )Nr    r{   rA   rD   rA   	foo_valuer   updater	   r   
bar_schemar   r   r   r   r   r   test_default_missing  s    

r   c                 C   s>   ddi}| |  ddi|d}ddd}t|| | d S )Nr    r{   r   r   Znon_defaultr   r	   copyr   r   r   r   r   r   r   test_default_existent)  s
    

r   c                 C   s@   ddd}| |  ddi|d}dd d}t|| | d S )Nr{   Tr    rn   r    r   r   r   r   r   r   r   test_default_none_nullable4  s
    


r   c                 C   s   dS r   r   r   r   r   r   r^   @  r_   c                 C   sF   ddd}| |  ddi|d}dd d}ddd}t||| d S )Nr{   Fr   r    r   r   r   r   r   r   r   r   test_default_none_nonnullable?  s    



r   c                  C   s8   ddiddd dd} ddi}dd d}t |||  d S )Nr    r{   T)r    rn   r   r   rA   r   r   r   r   r   r   test_default_none_default_valueK  s    

r   c                 C   s   dS r   r   r   r   r   r   r^   V  r_   c                 C   sT   ddi}| |  ddddi|ddi}dddii}ddd	di}t||| d S )
Nr    r{   r   r   r   r   rA   r   r   r   r   r   r   r   !test_default_missing_in_subschemaU  s    
r   c                  C   sV   ddiddd dddd dddd dd} d	d
i}d
dddd}t |||  d S )Nr    ri   c                 S   s   | d d S Nar   r   dr   r   r   r^   i  r_   z0test_depending_default_setters.<locals>.<lambda>r    r   c                 S   s   | d d S )Nbr"   r   r   r   r   r   r^   j  r_   c                 S   s   | d | d  S )Nr   cr   r   r   r   r   r^   k  r_   )r   r   r   r   r   r   r"   rU      r   r   r   r   r   test_depending_default_settersf  s    r   c                 C   s<   ddd dddd dd}| i | t j| jks8td S )Nri   c                 S   s   | d d S )Nr   r   r   r   r   r   r   r^   t  r_   z9test_circular_depending_default_setters.<locals>.<lambda>r   c                 S   s   | d d S r   r   r   r   r   r   r^   u  r_   r   r   )r   ZSETTING_DEFAULT_FAILEDr8   r-   )r.   r   r   r   r   'test_circular_depending_default_settersr  s
    
r   c                  C   sN   dddddddiiddi} dd	d
ii}t || ddtj| d d fd d S )Nr%   r   Tr   r    r{   r    rC   r   r   Zis_amapping)r%   r    error)r   r   ZBAD_TYPEro   r   r   r   test_issue_250{  s    

r   c                  C   s<   dddddddiidii} dd	d
dgi}t |||  d S )Nr%   r   Tr   r   r    r{   )rC   r    r   knownunknownr   r   ro   r   r   r   #test_issue_250_no_type_pass_on_list  s    
	r   c                  C   sN   ddddddiidii} ddddiii}t || dd	tj| d d fd
 d S )Nr%   r   Tr   r    r{   rC   r   r   )r%   r   r   )r   r   ZBAD_TYPE_FOR_SCHEMAro   r   r   r   #test_issue_250_no_type_fail_on_dict  s     
r   c                  C   s2   ddddddiidii} ddi}t |||  d S )	Nr%   r   Tr   r    r{   r   r   r   ro   r   r   r   )test_issue_250_no_type_fail_pass_on_other  s
     r   c                  C   sv   dddddddiidddddiid	gii} ddd
ii}t || ddtj| d d fd dd
ddi}t||  d S )Ntestoneofr   Tr   r    r{   r   r   s)r   r   r   Zasd)r   r   )r   r   ZONEOFr
   ro   r   r   r    test_allow_unknown_with_of_rules  s$    
r   c                  C   sf   ddddidi} ddddd	d
ddifi}t ||  t| |}|d dddd	d
ddifksbtd S )NZmy_fieldr%   r    )r{   Znumberr   r   rA   rD   *   ZalbertZ	kandinskyr*      )r
   r   rY   r-   r   r   r   r   test_271_normalising_tuples  s     
r   c                  C   s"   t ddddi} | di i d S )Nr   r   Tr    rC   )r   rZ   r   r   r   test_allow_unknown_wo_schema  s    r   c                  C   sD   t dd} ddddi}ddidd}dddii}t||||  d S )NTry   rA   r   r   rD   r   r|   rv   r   r   r   %test_allow_unknown_with_purge_unknown  s
    
r   c                  C   sR   t dd} dddddiiddi}d	d
ddd}dd	d
di}t||||  d S )NTry   rA   r   rD   r    r{   )r    r   rC   ZbazF)rD   ZcorgeZxyzzy)rA   Zthudr|   rv   r   r   r   1test_allow_unknown_with_purge_unknown_subdocument  s    

r   c                  C   sJ   dddddid} t | dd}dd	i}t|}d
|d< t|||d d S )Nr{   i  )r    Z	maxlengthreadonlyT)descriptionlast_updated)r   Zpurge_readonlyr   zit is a thingZfuturer   )r.   )r   r   r	   )r   r.   r   r   r   r   r   test_purge_readonly  s    r   c                  C   sh   ddiddid} ddddddidd}t | |d	}d
ddid}d
dddd}t||| | d S )Nr    r   r{   )metaversionzcfg.yaml)r    r   )cfg_pathpackager   rB   z1.2.3r   rA   )r   Z
plugin_foo)r   r   r|   )r   rC   r.   r   r   r   r   r   %test_defaults_in_allow_unknown_schema  s    r   N)>r   r   tempfiler   Zpytestr   Zcerberusr   r   Zcerberus.testsr   r   r	   r
   r   r   r#   r(   r/   r0   r3   r9   r<   r?   r@   rF   r[   rd   rg   rl   rp   rs   rt   rw   rx   r}   r   r   r   r   r   r   Zparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   			



 
	 
 
 
	
 
		