U
    Cvf4  ã                   @  sB  d dl mZ d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ ejdd	d
dgddd„ ƒZddœdd„Zej dddg¡ddœdd„ƒZddœdd„Zddœdd„Zddœdd„Zddœdd„Zddœdd „Zddœd!d"„Zddœd#d$„Zddœd%d&„Zddœd'd(„Zddœd)d*„ZdS )+é    )ÚannotationsN)Úmock)ÚCachingFileManager)ÚLRUCache)Úset_options)Úassert_no_warningsé   é   é   )Úparamsc                 c  s$   | j }|d kri V  n
t|ƒV  d S )N)Úparamr   )ÚrequestÚmaxsize© r   úK/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_backends_file_manager.pyÚ
file_cache   s    r   ÚNone)Úreturnc                 C  s”   t  ¡ }t jt|d}t jt ¡ d}t|d|| d}| ¡ }| d¡ | 	¡  | rXt
‚| d¡ |j d¡ |j	 ¡  |j t  ¡ t  ¡ g¡ d S )N©ÚspecÚreturn_value)r   Úfilename©ÚlockÚcacheÚcontents)r   ÚMockÚopenZ	MagicMockÚ	threadingÚLockr   ÚacquireÚwriteÚcloseÚAssertionErrorÚassert_called_once_withÚ	__enter__Zassert_has_callsÚcall)r   Ú	mock_fileÚopenerr   ÚmanagerÚfr   r   r   Útest_file_manager_mock_write   s    


r+   Úwarn_for_unclosed_filesTFc              
   C  s’   t  ¡ }t j|d}i }t|d|d}| ¡  |s6t‚| rFt t¡}ntƒ }t	| d  | ~t
 ¡  W 5 Q R X W 5 Q R X |r„t‚|j ¡  d S )N)r   r   ©r   ©r,   )r   r   r   r    r#   ÚpytestZwarnsÚRuntimeWarningr   r   ÚgcÚcollectr"   r$   )r,   r'   r(   r   r)   Úctxr   r   r   Útest_file_manager_autoclose+   s    r4   c               	   C  sh   t  ¡ } t ¡ }i }t| d||d}| ¡  |s4t‚| ¡  tdd ~t 	¡  W 5 Q R X |sdt‚d S )Nr   r   Fr.   )
r   r   r   r   r   r    r#   r   r1   r2   )r(   r   r   r)   r   r   r   Ú(test_file_manager_autoclose_while_lockedD   s    r5   c                  C  s&   t  ¡ } t| dƒ}dt|ƒks"t‚d S )Nzmy-file)r   r   r   Úreprr#   )r(   r)   r   r   r   Útest_file_manager_reprW   s    
r7   c               	   C  s”   t  ¡ } t jt| d}i }i }t|d||d}||j dks@t‚|rHt‚| ¡  t|ƒdks`t‚tdd ~t	 
¡  W 5 Q R X |rˆt‚|rt‚d S )Nr   r   )r   Ú
ref_countsr   Fr.   )r   r   r   r   Ú_keyr#   r    Úlenr   r1   r2   )r'   r(   r   r8   r)   r   r   r   Ú%test_file_manager_cache_and_refcounts]   s    r;   c               	   C  sÂ   t  ¡ } t jt| d}i }t|d|d}| ¡  t|ƒdks@t‚t|d|d}| ¡  t|ƒdksft‚tdd ~t 	¡  W 5 Q R X t|ƒdks–t‚tdd ~t 	¡  W 5 Q R X |r¾t‚d S )Nr   r   r-   r   r	   Fr.   )
r   r   r   r   r    r:   r#   r   r1   r2   )r'   r(   r   r)   Úmanager2r   r   r   Ú%test_file_manager_cache_repeated_openr   s"    r=   c              
   C  sì   t |  d¡ƒ}t|dƒ}| d¡ W 5 Q R X i }t d|¡¤ |rHt‚tt|dd}| ¡  t	|ƒdksnt‚t
 t
 |¡¡}| ¡  t	|ƒdks–t‚tdd	 ~t ¡  W 5 Q R X tdd	 ~t ¡  W 5 Q R X |rÞt‚W 5 Q R X d S )
Nútesting.txtÚwÚdataz'xarray.backends.file_manager.FILE_CACHEÚr)Úmoder   Fr.   )ÚstrÚjoinr   r!   r   Úpatchr#   r   r    r:   ÚpickleÚloadsÚdumpsr   r1   r2   )ÚtmpdirÚpathr*   r   r)   r<   r   r   r   Ú#test_file_manager_cache_with_pickleŒ   s&    rK   c           
   	   C  sþ   t |  d¡ƒ}t |  d¡ƒ}tt|d|d}tt|d|d}| ¡ }| d¡ | ¡  | ¡ }| d¡ | ¡  | ¡ }| d¡ t|dtd	ƒƒd
k||kks¢t	‚| 
¡  | 
¡  t|ƒ}	|	 ¡ dksÌt	‚W 5 Q R X t|ƒ}	|	 ¡ dksðt	‚W 5 Q R X d S )Nztesting1.txtztesting2.txtr?   ©rB   r   ÚfooÚbarÚbazr   Úinfr   Zfoobaz)rC   rD   r   r   r    r!   ÚflushÚgetattrÚfloatr#   r"   Úread)
rI   r   Úpath1Úpath2Zmanager1r<   Zf1aÚf2Zf1br*   r   r   r   Ú#test_file_manager_write_consecutive©   s&    


 

rX   c              	   C  s´   t |  d¡ƒ}tt|d|d}| ¡ }| ¡ }| ¡ }||ksBt‚||ksNt‚| d¡ | ¡  | d¡ | ¡  | d¡ | ¡  | ¡  t|ƒ}| 	¡ dks¦t‚W 5 Q R X d S )Nr>   r?   rL   rM   rN   rO   Z	foobarbaz)
rC   rD   r   r   r    r#   r!   rQ   r"   rT   )rI   r   rJ   r)   Úf1rW   Zf3r*   r   r   r   Ú"test_file_manager_write_concurrentÀ   s     



rZ   c              	   C  s’   t |  d¡ƒ}tt|d|d}| ¡ }| d¡ | ¡  t t 	|¡¡}| ¡ }| d¡ | 
¡  | 
¡  t|ƒ}| ¡ dks„t‚W 5 Q R X d S )Nr>   r?   rL   rM   rN   Úfoobar)rC   rD   r   r   r    r!   rQ   rF   rG   rH   r"   rT   r#   )rI   r   rJ   r)   r*   r<   rW   r   r   r   Útest_file_manager_write_pickleÔ   s    


r\   c              	   C  s`   t |  d¡ƒ}t|dƒ}| d¡ W 5 Q R X tt||d}| ¡ }| ¡ dksTt‚| ¡  d S )Nr>   r?   r[   r-   )	rC   rD   r   r!   r   r    rT   r#   r"   )rI   r   rJ   r*   r)   r   r   r   Útest_file_manager_readä   s    r]   c              
   C  s  t |  d¡ƒ}t|dƒ}| d¡ W 5 Q R X G dd„ dtƒ}tt||d}t |¡. | ¡ }| 	¡ dksrt
‚|‚W 5 Q R X W 5 Q R X |r’t
‚| ¡ }| 	¡ dks¬t
‚W 5 Q R X t |¡8 | ¡ $}| d¡ | 	¡ dksæt
‚|‚W 5 Q R X W 5 Q R X |st
‚| ¡  d S )Nr>   r?   r[   c                   @  s   e Zd ZdS )z;test_file_manager_acquire_context.<locals>.AcquisitionErrorN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚAcquisitionErrorö   s   ra   r-   r   )rC   rD   r   r!   Ú	Exceptionr   r/   ZraisesZacquire_contextrT   r#   Úseekr"   )rI   r   rJ   r*   ra   r)   r   r   r   Ú!test_file_manager_acquire_contextð   s&    




rd   ) Ú
__future__r   r1   rF   r   Zunittestr   r/   Zxarray.backends.file_managerr   Zxarray.backends.lru_cacher   Zxarray.core.optionsr   Zxarray.testsr   Zfixturer   r+   ÚmarkZparametrizer4   r5   r7   r;   r=   rK   rX   rZ   r\   r]   rd   r   r   r   r   Ú<module>   s0   
