B
    T\&                 @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlZd dl	Z
d dl	mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ dd Zdd	 Zd
d Zdd Zedd Z ej!j"ej#dkddej!$dddg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j!$d(d)d*gd+d, Z.d-d. Z/d/d0 Z0d1d2 Z1ej!$d3d4d5d6d7d8gd7d9gfd:d7d8hd7d9hfd;d8id;d9ifd<d7d=d8gd>d<d7d=d9gd>fgd?d@ Z2ej!$d3dAdBd5dCgdDdE Z3dFdG Z4dHdI Z5ej!$dJdKdLgdMdN Z6dOdP Z7dS )Q    N)OrderedDict)contextmanager)updatemergecollectcollect_yamlcollect_envgetensure_filesetconfigrenameupdate_defaultsrefreshexpand_environment_variablesnormalize_keynormalize_nested_keys)tmpfilec              C   s   dddid} ddt ddid}t||  |dddddd	ksFtdddid} dddddd}t|| d
d |dddddd	kstd S )N   a)xy      b)r   zr   )r   r   )r   r   r   old)Zpriority)r   r   AssertionError)r   r    r   5lib/python3.7/site-packages/dask/tests/test_config.pytest_update   s    
r    c              C   sJ   dddid} ddddid}dddddd	}t | |}||ksFtd S )
Nr   r   )r   r   r   r   r   )r   r   r   )r   r   )r   r   r   )r   r   )r   r   expectedcr   r   r   
test_merge   s    
r#   c              C   s   dddid} ddddid}dddddd	}t d
d~}t d
dh}t|d}t| | W d Q R X t|d}t|| W d Q R X tt||gd }||kstW d Q R X W d Q R X d S )Nr   r   )r   r   r   r   r   )r   r   r   )r   r   )r   r   r   yaml)	extensionw)paths)r   openr$   dumpr   r   r   )r   r   r!   fn1fn2fr   r   r   r   test_collect_yaml_paths,   s    r-   c           
   C   s   dddid} ddddid}dddddd	}t  }t| ttj|d
dd}t| | W d Q R X ttj|ddd}t|| W d Q R X tt	|gd }||kst
W d Q R X d S )Nr   r   )r   r   r   r   r   )r   r   r   )r   r   )r   r   r   za.yamlr&   )modezb.yaml)r'   )r   osmkdirr(   pathjoinr$   r)   r   r   r   )r   r   r!   dirnamer,   r   r   r   r   test_collect_yaml_dirA   s    
r4   c          
   c   sF   t t | j}|t jA }zt| | d V  W d t| | X d S )N)statS_IMODEr/   st_modeS_IREADchmod)r1   Z	perm_origZperm_newr   r   r   no_read_permissionsV   s    

r:   Zwin32z$Can't make writeonly file on windows)reasonkind	directoryfilec          	   C   s   ddd}ddd}t | }tj|d}tj|d}t|d	d
}t|| W d Q R X t|d	d
}t|| W d Q R X |dkr|}i }	n|}|}	t|" tt	|gd }
|
|	kst
W d Q R X d S )Nr   r   )r   r   r      )r   r   za.yamlzb.yamlr&   )r.   r=   )r'   )strr/   r1   r2   r(   r$   r)   r:   r   r   r   )tmpdirr<   r   r   Zdir_pathZa_pathZb_pathr,   Z	cant_readr!   r   r   r   r   #test_collect_yaml_permission_errorsa   s"    


rB   c           	   C   sH   ddddddddd} d	d
dd	dddddgdd}t | |ksDtd S )N123TrueZhelloZ456z[1, 2, "3"]z/not/parsable/as/literalznot included)DASK_A_BDASK_CZDASK_DZ	DASK_E__XZ	DASK_E__YZDASK_FZDASK_GFOO{   Ti  )r   r   r   r   3)za-br"   der,   g)r   r   )envr!   r   r   r   test_env}   s    rN   c              C   s   dddid} ddddid}dd	i}d	dddd
dd}t dd|}t ddf}t|d}t| | W d Q R X t|d}t|| W d Q R X t||g|d}||kstW d Q R X W d Q R X d S )Nr   r   )r   r   r   r   r   )r   r   r   ZDASK_Wr?   )r   r   )r&   r   r   r   r$   )r%   r&   )rM   )r   r(   r$   r)   r   r   )r   r   rM   r!   r*   r+   r,   r   r   r   r   test_collect   s    rO   c              C   s6   dt jd< ztg } | ddiks$tW d t jd= X d S )NbarZDASK_FOOfoo)r/   environr   r   )r   r   r   r   test_collect_env_none   s
    
rS   c           	   C   sr   dddid} t d| ddks"tt d| ddks6tt dd	| dd	ksLttt t d| d W d Q R X d S )
Nr   r   r   )r   r   r   )r   zy.azy.brH   )r	   r   pytestZraisesKeyError)rJ   r   r   r   test_get   s    rV   c       	   	   C   sj  dddid}ddi}t jt| d}t jt| d}t j|d}t|d}t|| W d Q R X t||d	d
 t|}t|}W d Q R X ||kst	t|d}t|| W d Q R X t||d	d
 t|}t|}W d Q R X ||kst	t 
| t||dd
 t|}| }W d Q R X d|ks>t	t|}t|}W d Q R X |rft	d S )Nr   r   )r   r   r   rH   zsource.yamldestr&   F)sourcedestinationcommentTrC   )r/   r1   r2   r@   r(   r$   r)   r
   loadr   removeread)	rA   r   r   rX   rW   rY   r,   resulttextr   r   r   test_ensure_file   s2    




r`   c           
   C   s  t ddL td dkstt dd td dks8tW d Q R X td dksRtW d Q R X dtkshtt ddi td dkstW d Q R X dtkstt dddd" td ddd	did
kstW d Q R X dtksti } t ddi| d | d d dks
td S )NrH   )abcra   i  r   r   r   )zabc.xzabc.yzabc.z.ar   )r   r   r   zabc.x)r   r   )r   r   r   )rJ   r   r   r   test_set   s    &rb   c            
   C   s   t dddii\ td ddiks&tt ddi td dddksJtW d Q R X td ddikshtW d Q R X dtks~td S )Nra   r   rH   zabc.yi  )r   r   )r   r   r   r   r   r   r   test_set_nested   s     rc   c           
   C   s<   dd l } t|  d tdd W d Q R X W d Q R X d S )Nr   )r   r   )r   )	threadingr   ZLock)rd   r   r   r   test_set_hard_to_copyables  s    re   r0   TFc          	   C   s   dddid}t jt|d}t jt|d}t|d}t|| W d Q R X | rbt | t||d t j	|s~t
t jt j|dst
d S )Nr   r   )r   r   zsource.yamlrW   r&   )rX   rY   )r/   r1   r2   r@   r(   r$   r)   r0   r
   isdirr   exists)r0   rA   r   rX   rW   r,   r   r   r   test_ensure_file_directory  s    
rh   c          	   C   s   dddid}t jt| d}t|d}t|| W d Q R X t jt| d}tjj	}z|tj_	t
|d W d |tj_	X t j|stt |\}t j|d t j|d kstd S )Nr   r   )r   r   zsource.yamlr&   dask)rX   )r/   r1   r2   r@   r(   r$   r)   ri   r   PATHr
   rf   r   listdirsplit)rA   r   rX   r,   rY   rj   fnr   r   r   2test_ensure_file_defaults_to_DASK_CONFIG_directory   s    
rn   c              C   s4   ddi} ddi}t | |d |dddiiks0td S )Nzfoo-barzfoo.barrH   )r   rQ   rP   )r   r   )aliasesr   r   r   r   test_rename3  s    rp   c              C   sz   g } i }t ddi|| d |ddiks*ttg ddi|| d |dddksPttg d	d
i|| d |dddksvtd S )Nr   r   )r   defaultsZDASK_B2)r'   rM   r   rq   r   )r   r   rF   rI   r   )r   r"   )r   r   r   )rq   r   r   r   r   test_refresh:  s    rs   zinp,out)1rt   )r   r   )z$FOOrQ   r   z$FOOrQ   ))r   z$FOO)r   rQ   r   Arr   )r   r   c             C   s.   zdt jd< t| |kstW d t jd= X d S )NrQ   rG   )r/   rR   r   r   )inpoutr   r   r   !test_expand_environment_variablesH  s    
rx   )
custom_keyz
custom-key)z
custom-keyz
custom-key)gffffff@gffffff@c             C   s   t | |kstd S )N)r   r   )rv   rw   r   r   r   test_normalize_keyZ  s    rz   c              C   s4   dddidd} dddidd}t | |ks0td S )Nr   Znested_key_1r   r   )Zkey_1Zkey_2Zkey_3znested-key-1)zkey-1zkey-2zkey-3)r   r   )r   r!   r   r   r   test_normalize_nested_keysd  s    r{   c             C   sN   d}|  d| i }tjj|d td|d|ks6ttd|d|ksJtd S )Nr   rE   )r   Za_bza-b)Zsetenvri   r   r   r	   r   )ZmonkeypatchvaluerJ   r   r   r   test_env_var_normalizationp  s    r}   keyry   z
custom-keyc          	   C   sL   d}t j| |i. t jd|ks*tt jd|ks>tW d Q R X d S )NrH   ry   z
custom-key)ri   r   r   r	   r   )r~   r|   r   r   r   test_get_set_roundtripy  s    r   c               C   s2   t jd dddddiiddiddks.td S )Nr   )r   r"   r   r   r   )ri   r   r   r   r   r   r   r   test_merge_None_to_dict  s    r   )8r$   r/   r5   syscollectionsr   
contextlibr   rT   Zdask.configri   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Z
dask.utilsr   r    r#   r-   r4   r:   ZmarkZskipifplatformZparametrizerB   rN   rO   rS   rV   r`   rb   rc   re   rh   rn   rp   rs   rx   rz   r{   r}   r   r   r   r   r   r   <module>   s^   D	
)	,
	