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/dataA  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz.txt   iNz
aaaaaa.txt-   
   Z
aaaaaaaaaa)lenr
   split)urlfname r   e/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/pooch/tests/test_utils.pytest_unique_name_long   s   "r   poolthreadsZ	processes)Z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   Z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(   
r3   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>.mockmakedirsZtest_permissionr   SOME_VARIABLEr   envz!Pooch could not create data cache'SOME_VARIABLE'Nr&   )r'   r   r)   r*   r+   r(   pytestraisesr7   r   str)r0   r   r"   errorr   r   r   +test_local_storage_makedirs_permissionerrorP   s   
"rA   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                  [   r4   r5   r6   )kwargsr   r   r   mocktempfilej   r8   z@test_local_storage_newfile_permissionerror.<locals>.mocktempfilez1.0NamedTemporaryFiler9   r:   z#Pooch could not write to data cacher<   N)r   r'   r   r   r)   r+   r(   tempfiler=   r>   r7   r   r?   )r0   rC   r"   r@   r   r   r   *test_local_storage_newfile_permissionerrore   s    "rF   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)rG   rJ   rK   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    rM   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)r=   r>   
ValueErrorr   r   r   r   r   test_parse_url_invalid_doi   s   
"rO   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   r+   openwritereadstrip)tmpoutfileinfiler   r   r   test_temporary_file   s   r\   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 dirrP   rQ   rR   rT   N)r   r	   r   r+   rU   rV   rW   rX   )r   rY   rZ   r[   r   r   r   test_temporary_file_path   s   
"r]   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   r+   rN   )rY   r   r   r   test_temporary_file_exception   s   r^   )__doc__r'   r.   r   pathlibr   rE   r   concurrent.futuresr   r   r=   utilsr   r   r	   r
   r   markZparametrizer3   rA   rF   rM   rO   r\   r]   r^   r   r   r   r   <module>   s^   

%

	
