o
    ٷi4                  
   @   s   d 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	m
Z
 ddlZddlmZmZmZmZ dd	 Zejjd
e	e
gddgddd Zdd Zdd Zejjddddddfdddddfdddddfd dd!d"dfgg d#dd$d% Zd&d' Zd(d) Zd*d+ Zd,d- ZdS ).z
Test the utility functions.
    N)Path)TemporaryDirectory)ThreadPoolExecutorProcessPoolExecutor   )	parse_urlmake_local_storagetemporary_fileunique_file_namec                  C   sj   dd d} t | dksJ t| }t |dksJ |dd dks$J |dd	 dd
 dks3J dS )z8The file name should never be longer than 255 characterszhttps://www.something.com/data  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz.txt   iNz
aaaaaa.txt-   
   
aaaaaaaaaa)lenr
   split)urlfname r   J/home/ubuntu/.local/lib/python3.10/site-packages/pooch/tests/test_utils.pytest_unique_name_long   s   "r   poolthreads	processes)idsc              	      s   t jd
fdd	}|t d| t jt jd t j r!J z@|  % fddtdD }|D ]}|  q4t j sCJ W d	   n1 sMw   Y  W t j r`t	
  d	S d	S t j rnt	
  w w )z*Try to create the cache folder in parallelFc                    s   t d  | |d dS )zDelay before calling makedirsg      ?)exist_okN)timesleeppathr   )makedirsr   r   mockmakedirs9   s   
z6test_make_local_storage_parallel.<locals>.mockmakedirsr!   test_parallel_cachec                    s   g | ]} t qS r   )submitr   ).0i)
data_cacheexecutorr   r   
<listcomp>E   s    z4test_make_local_storage_parallel.<locals>.<listcomp>   NF)osr!   setattrr    joincurdirexistsrangeresultshutilrmtree)r   monkeypatchr"   futuresfuturer   )r'   r(   r!   r    test_make_local_storage_parallel&   s(   
r8   c                 C   s   ddd}t jt jd}t j|rJ | t d| tt}t	|dd dt
|v s0J d	t
|v s8J W d
   d
S 1 sCw   Y  d
S )z9Should warn the user when can't create the local data dirFc                 S      t dz-Raise an exception to mimic permission issuesz
Fake errorPermissionErrorr   r   r   r   r"   S      zAtest_local_storage_makedirs_permissionerror.<locals>.mockmakedirstest_permissionr!   SOME_VARIABLEr    envz!Pooch could not create data cache'SOME_VARIABLE'Nr+   )r,   r    r.   r/   r0   r-   pytestraisesr<   r   str)r5   r"   r'   errorr   r   r   +test_local_storage_makedirs_permissionerrorP   s   
"rG   c              	   C   s   dd }t  U}ttj|d tj|sJ | td| t	t
}t|dd dt|v s5J dt|v s=J W d	   n1 sGw   Y  W d	   d	S W d	   d	S 1 s_w   Y  d	S )
z;Should warn the user when can't write to the local data dirc                  [   r9   r:   r;   )kwargsr   r   r   mocktempfilej   r=   z@test_local_storage_newfile_permissionerror.<locals>.mocktempfilez1.0NamedTemporaryFiler?   r@   z#Pooch could not write to data cacherB   N)r   r,   r!   r    r.   r0   r-   tempfilerC   rD   r<   r   rE   )r5   rI   r'   rF   r   r   r   *test_local_storage_newfile_permissionerrore   s    "rL   z
url,outputzhttp://127.0.0.1:8080/test.nchttpz127.0.0.1:8080z/test.nc)protocolnetlocr    zftp://127.0.0.1:8080/test.ncftpz+doi:10.6084/m9.figshare.923450.v1/dike.jsondoiz10.6084/m9.figshare.923450.v1z
/dike.jsonz<doi:10.5281/zenodo.7632643/santisoler/pooch-test-data-v1.zipz10.5281/zenodo.7632643z"/santisoler/pooch-test-data-v1.zip)rM   rP   rQ   zzenodo-doi-with-slashc                 C   s   t | |ksJ dS )zParse URL into 3 componentsN)r   )r   outputr   r   r   test_parse_url}   s    rS   c                   C   s8   t t td W d   dS 1 sw   Y  dS )z:Should fail if we forget to not include // in the DOI linkzdoi://XXX/XXX/fname.txtN)rC   rD   
ValueErrorr   r   r   r   r   test_parse_url_invalid_doi   s   
"rU   c               	   C   s   t  L} t|  sJ t| ddd}|d W d   n1 s#w   Y  t| dd}|  dks9J W d   n1 sCw   Y  W d   n1 sRw   Y  t|  r_J dS )z8Make sure the file is writable and cleaned up in the endwutf-8encodingMehN)r	   r   r0   openwritereadstrip)tmpoutfileinfiler   r   r   test_temporary_file   s   rb   c               
   C   s   t  o} t| R}t| sJ | |v sJ t|ddd}|d W d   n1 s.w   Y  t|dd}|  dksDJ W d   n1 sNw   Y  W d   n1 s]w   Y  t| rjJ W d   dS 1 suw   Y  dS )zIMake sure the file is writable and cleaned up in the end when given a dirrV   rW   rX   rZ   N)r   r	   r   r0   r[   r\   r]   r^   )r    r_   r`   ra   r   r   r   test_temporary_file_path   s   
"rc   c                  C   s\   zt  } t|  sJ td1 sw   Y  W dS  ty-   t|  r*J Y dS w )zHMake sure the file is writable and cleaned up when there is an exceptionzNooooooooo!N)r	   r   r0   rT   )r_   r   r   r   test_temporary_file_exception   s   rd   )__doc__r,   r3   r   pathlibr   rK   r   concurrent.futuresr   r   rC   utilsr   r   r	   r
   r   markparametrizer8   rG   rL   rS   rU   rb   rc   rd   r   r   r   r   <module>   s^   

%

	
