U
    >vfB                     @   sB   d dl Z d dlZd dlmZ d dlmZ d dlZG dd dZ	dS )    N)config)OptionErrorc                   @   s   e Zd Zejdd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-d. Zd/S )0
TestConfigT)Zautousec              	   c   sj   |  X}|tdi  |tdttj |tdi  |tdi  tdd d V  W 5 Q R X d S )N_global_configoptionsZ_deprecated_optionsZ_registered_optionsZchained_assignmentraise)contextsetattrcfZDictWrapperr   register_option)selfZmonkeypatchm r   C/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/config/test_config.pyclean_config   s    
zTestConfig.clean_configc                 C   s<   t tdstt tdstt tds*tt tds8td S )N
get_option
set_optionreset_optiondescribe_option)hasattrpdAssertionErrorr   r   r   r   test_api   s    zTestConfig.test_apic              	   C   sH   t d dg}|d |d  d}tjt|d |d W 5 Q R X d S )N   zValue must be one of None\|12match皙?)r
   is_one_of_factorypytestraises
ValueError)r   vmsgr   r   r   test_is_one_of_factory"   s    z!TestConfig.test_is_one_of_factoryc              	   C   s(  t ddd d}tjt|d t ddd W 5 Q R X d}tjt|d t ddd W 5 Q R X tjt|d t ddd W 5 Q R X d	}tjt|d t d
d W 5 Q R X tjt|d t dd W 5 Q R X d}tjt|d t dd W 5 Q R X t ddd t ddd d S )Na   docz&Option 'a' has already been registeredr   z.Path prefix to option 'a' is already an optionza.b.c.d1a.b.c.d2zfor is a python keywordforr   za.for.bz(oh my goddess! is not a valid identifierzOh my Goddess!zk.b.c.d1zk.b.c.d2)r
   r   r   r    r   r!   r   r#   r   r   r   test_register_option+   s&    zTestConfig.test_register_optionc              	   C   s  t ddd t ddd t d t ddd t ddd	 t d
d t dd t dd t jddd t dd d}tjt|d t d W 5 Q R X dt jdddkstdt jdddkstdt jdddkstdt jdddkstd	t jdddkstdt jd
ddks2tdt jdddksJtdt jdddksbtdt jdddksztdt jdddkstdt jdddkstt dd dt jdddkstd S )Nr%   r&   r'   bdoc2zc.d.e1Zdoc3zc.d.e2Zdoc4fzg.hk   ZrkeylfoozNo such keys\(s\)r   no.such.keyFZ_print_descZprecated	availablebar)	r
   r   deprecate_optionr   r    r   r   r   r   r*   r   r   r   test_describe_optionL   s4    
zTestConfig.test_describe_optionc              	   C   s   t ddd dt jdddks$tt ddks6tt dd	 t d
d	ksTtd}tjt|d t d W 5 Q R X t 	d t 
d
std S )NZKanBANr&   r'   ZkanbaNFr5   ZkanBaNZKanBanr0   ZkAnBaN#No such keys\(s\): 'no_such_option'r   no_such_option)r
   r   r   r   r   r   r   r    r   r8   _is_deprecatedr*   r   r   r   test_case_insensitives   s    
z TestConfig.test_case_insensitivec              	   C   s   t ddd t ddd t dd d t ddks<tt ddksNtt dd ks`td}tjt|d	 t d
 W 5 Q R X d S )Nr%   r&   r'   b.chullor-   b.br:   r   r;   )r
   r   r   r   r   r    r   r*   r   r   r   test_get_option   s    zTestConfig.test_get_optionc              	   C   s   t ddd t ddd t dd d t ddks<tt ddksNtt dd ks`tt dd t dd	 t dd
 t ddkstt dd	kstt dd
kstd}tjt|d t dd  W 5 Q R X d S )Nr%   r&   r'   r>   r?   r-   r@   r0   wurldr   z No such keys\(s\): 'no.such.key'r   r4   )r
   r   r   r   r   r   r    r   r*   r   r   r   test_set_option   s    zTestConfig.test_set_optionc              	   C   s*   d}t jt|d t  W 5 Q R X d S )N4Must provide an even number of non-keyword argumentsr   r   r    r!   r
   r   r*   r   r   r   test_set_option_empty_args   s    z%TestConfig.test_set_option_empty_argsc              	   C   s0   d}t jt|d tddd W 5 Q R X d S )NrD   r   za.br0   r>   rE   r*   r   r   r   test_set_option_uneven_args   s    z&TestConfig.test_set_option_uneven_argsc              	   C   s,   d}t jt|d td W 5 Q R X d S )NrD   r   r0   rE   r*   r   r   r   ,test_set_option_invalid_single_argument_type   s    z7TestConfig.test_set_option_invalid_single_argument_typec                 C   s   t ddd t ddd t dd d t ddks<tt ddksNtt dd ks`tt dddd dd	 t ddkstt dd kstt dd	kstd S )
Nr%   r&   r'   r>   r?   r-   r@   2g      $@)r
   r   r   r   r   r   r   r   r   test_set_option_multiple   s    z#TestConfig.test_set_option_multiplec              	   C   s  t jdddt jd t jdddt jd t jdddt jd d	}tjt|d
 t jdddt jd W 5 Q R X t dd t dd t dd t dd  tjt|d
 t dd  W 5 Q R X tjt|d
 t dd W 5 Q R X d}tjt|d
 t jdddt jd W 5 Q R X tjt|d
 t jdddt jd W 5 Q R X d}tjt|d
 t dd W 5 Q R X t 	d t j
g}t jddd d|d t ddj t dd  tjtdd
 t dd W 5 Q R X d S )Nr%   r&   r'   	validatordr>   r?   r-   z$Value must have type '<class 'int'>'r   r(   NOr0   rB   abz+Value must be a nonnegative integer or Noneza.b.c.d3z;Value must be an instance of <class 'str'>\|<class 'bytes'>r,   c                   S   s   d S Nr   r   r   r   r   <lambda>       z,TestConfig.test_validation.<locals>.<lambda>z%.1fzValue must be a callable)r
   r   is_intZis_nonnegative_intZis_textr   r    r!   r   r   Zis_callableformat)r   r#   rL   r   r   r   test_validation   s8    zTestConfig.test_validationc                 C   s   t jdddt jd t jdddt jd t ddks:tt ddksLtt dd t dd	 t ddksvtt dd	kstt d t ddkstt dd	kstt d t ddkstt ddkstd S )
Nr%   r&   r'   rK   r>   r?   r-   r0   rB   r
   r   rT   Zis_strr   r   r   r   r   r   r   r   test_reset_option   s    

zTestConfig.test_reset_optionc                 C   s   t jdddt jd t jdddt jd t ddks:tt ddksLtt dd t dd	 t ddksvtt dd	kstt d
 t ddkstt ddkstd S )Nr%   r&   r'   rK   r>   r?   r-   r0   rB   allrW   r   r   r   r   test_reset_option_all   s    
z TestConfig.test_reset_option_allc              
   C   s  t d t dsttjddX}td tjt	dd t 
d W 5 Q R X t|dksdtdt|d	 ksxtW 5 Q R X t jd
ddt jd t ddd t ddd t jd
dd tjdd~}td t 
d
 t|dkstdt|d	 kstdt|d	 kstd}tjt|d t d
 W 5 Q R X W 5 Q R X t dd tjddB}td t 
d t|dkstdt|d	 kstW 5 Q R X t ddd t ddd t 
ddkstt 
ddkstt jddd tjddL}td t 
ddks.tt|dks@tdt|d	 ksVtW 5 Q R X tjddD}td t dd t|dkstdt|d	 kstW 5 Q R X tjddL}td t 
ddkstt|dkstdt|d	 ks
tW 5 Q R X d S )Nr3   T)recordalwayszNo such keys.s.: 'foo'r   r&   
deprecatedr%   r'   rK   r>   r?   r-   Z	nifty_ver)Zremoval_verZ	eprecatedz1Option 'a' has already been defined as deprecatedzzounds!d.azd.depr7   r1   Zbaz)r
   r8   r<   r   warningscatch_warningssimplefilterr   r    KeyErrorr   lenstrr   rT   r   r   )r   wr#   r   r   r   test_deprecate_option  s^    





 
 
 
z TestConfig.test_deprecate_optionc              	   C   s8  t d t ddd t ddd t ddks:tt ddksLtt dd t dd	 t ddksvtt dd	kstW 5 Q R X t d
dkstt dd	kstdt jd
ddkstdt jdddkstt d
 t d t d. t ddkstt ddks*tW 5 Q R X d S )Nbaser%   r&   Zdoc1r,   r0   r-         zbase.azbase.bFr5   )r
   Zconfig_prefixr   r   r   r   r   r   r   r   r   r   test_config_prefixM  s$    

zTestConfig.test_config_prefixc                    s   d g d g fdd}t jdd|d t jdd|d  d= d= t dd  d dksbtd dksrt d= d= t dd	  d dkstd d	kst d= d= t d  d dkstd S )
Nc                    s     |   t|  d S rQ   )appendr
   r   keyr/   r"   r   r   callbacki  s    
z*TestConfig.test_callback.<locals>.callbackr_   r3   cbzd.br^   ZfoozZboo)r
   r   r   r   r   )r   rp   r   ro   r   test_callbacke  s     
zTestConfig.test_callbackc              
      s   dd  t dd  d t dd6  d t dd  d W 5 Q R X  d W 5 Q R X  d t dd  d t dd fd	d
}|  d S )Nc                 S   s   t d| kstd S )Nr%   )r
   r   r   )valr   r   r   eq  s    z.TestConfig.test_set_ContextManager.<locals>.eqr%   r            {   c                      s    d d S )Nry   r   r   ru   r   r   r.     s    z-TestConfig.test_set_ContextManager.<locals>.f)r
   r   option_contextr   )r   r.   r   rz   r   test_set_ContextManager~  s    
z"TestConfig.test_set_ContextManagerc              	      s   g   fdd}t dd t jdd|d t j}|jdks@tt dd |jdks\tW 5 Q R X d|_t ddks~tt d |jt ddkstd	}tj	t
|d
 d|_W 5 Q R X tj	t
|d
 d|_W 5 Q R X d|_t dkstd S )Nc                    s     d d S )NT)rl   rm   Zholderr   r   f3  s    z,TestConfig.test_attribute_access.<locals>.f3r%   r   crq   rv   i  z.You can only set the value of existing optionsr   r&   )r
   r   r   r%   r   r{   r   r   r   r    r   r,   Zdisplayr   rd   )r   r~   r   r#   r   r}   r   test_attribute_access  s&    
z TestConfig.test_attribute_accessc              	   C   sn   d}d}d}t || t ||}t ||ks6t| t ||ksNtW 5 Q R X t ||ksjtd S )N<   
   r%   )r
   r   r{   r   r   )r   original_valueZcontext_valueZoption_namectxr   r   r   test_option_context_scope  s    z$TestConfig.test_option_context_scopec              	   C   s8   t j}tjtdd |j W 5 Q R X t|dr4td S )NzNo such optionr   bananas)r
   r   r   r    r   r   r   r   )r   r   r   r   r   test_dictwrapper_getattr  s    z#TestConfig.test_dictwrapper_getattrN)__name__
__module____qualname__r   Zfixturer   r   r$   r+   r9   r=   rA   rC   rF   rG   rH   rJ   rV   rX   rZ   rg   rk   rs   r|   r   r   r   r   r   r   r   r      s.   

	!'&Ar   )
r`   r   Zpandas._configr   r
   Zpandas._config.configr   Zpandasr   r   r   r   r   r   <module>   s
   