
    -Ph4                     x   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 Zej                            d	e	e
gd
dg          d             Zd Zd Ze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              Zd! Zd" Zd# Zd$ ZdS )%z
Test the utility functions.
    N)Path)TemporaryDirectory)ThreadPoolExecutorProcessPoolExecutor   )	parse_urlmake_local_storagetemporary_fileunique_file_namec                      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    sJ 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fnames     V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pooch/tests/test_utils.pytest_unique_name_longr      s    
:9
:
:
:Cs88c>>>>S!!Eu::;,&&&&;;sAss#|333333    poolthreads	processes)idsc                    t           j        dfd	}|                    t           d|           t           j                            t           j        d          t           j                                      rJ 	  |             5 fdt          d          D             }|D ]}|                                 t           j                                      sJ 	 ddd           n# 1 swxY w Y   t           j                                      rt          j
                   dS dS # t           j                                      rt          j
                   w w xY w)	z*Try to create the cache folder in parallelFc                 J    t          j        d            | |           dS )zDelay before calling makedirsg      ?)exist_okN)timesleep)pathr    makedirss     r   mockmakedirsz6test_make_local_storage_parallel.<locals>.mockmakedirs9   s+    
3))))))r   r$   test_parallel_cachec                 F    g | ]}                     t                    S  )submitr	   ).0i
data_cacheexecutors     r   
<listcomp>z4test_make_local_storage_parallel.<locals>.<listcomp>E   s5       DE 2J??  r      NF)osr$   setattrr#   joincurdirexistsrangeresultshutilrmtree)r   monkeypatchr%   futuresfuturer,   r-   r$   s        @@@r    test_make_local_storage_parallelr=   &   s   " {H* * * * * *
 J555bi)>??Jw~~j)))))
&TVV 	.x    INq  G "    7>>*------	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 7>>*%% 	&M*%%%%%	& 	&27>>*%% 	&M*%%%%	&s1   >
D. AC, D. ,C00D. 3C04D. .6E$c                    d
d}t           j                            t           j        d          }t           j                            |          rJ |                     t           d|           t          j        t                    5 }t          |d           dt          |          v sJ dt          |          v sJ 	 d	d	d	           d	S # 1 swxY w Y   d	S )z9Should warn the user when can't create the local data dirFc                      t          d          z-Raise an exception to mimic permission issuesz
Fake errorPermissionError)r#   r    s     r   r%   zAtest_local_storage_makedirs_permissionerror.<locals>.mockmakedirsS       l+++r   test_permissionr$   SOME_VARIABLEr#   envz!Pooch could not create data cache'SOME_VARIABLE'Nr0   )r1   r#   r3   r4   r5   r2   pytestraisesrB   r	   str)r:   r%   r,   errors       r   +test_local_storage_makedirs_permissionerrorrM   P   s#   , , , , bi):;;Jw~~j)))))J555		'	' /5	
 	
 	
 	
 3c%jj@@@@ CJJ...../ / / / / / / / / / / / / / / / / /s   8CCCc                 
   d }t                      5 }t          j        t          j                            |d                     t          j                            |          sJ |                     t          d|           t          j	        t                    5 }t          |d           dt          |          v sJ dt          |          v sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )	z;Should warn the user when can't write to the local data dirc                       t          d          r@   rA   )kwargss    r   mocktempfilez@test_local_storage_newfile_permissionerror.<locals>.mocktempfilej   rC   r   z1.0NamedTemporaryFilerE   rF   z#Pooch could not write to data cacherH   N)r   r1   r$   r#   r3   r5   r2   tempfilerI   rJ   rB   r	   rK   )r:   rQ   r,   rL   s       r   *test_local_storage_newfile_permissionerrorrT   e   s   
, , , 
		 3
BGLLU33444w~~j)))))H&:LIII]?++ 	3u#    9CJJFFFF$E

22222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s6   B	C88C C8 C$	$C8'C$	(C88C<?C<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)rU   rX   rY   zzenodo-doi-with-slashc                 0    t          |           |k    sJ dS )zParse URL into 3 componentsN)r   )r   outputs     r   test_parse_urlr\   }   s"    @ S>>V######r   c                      t          j        t                    5  t          d           ddd           dS # 1 swxY w Y   dS )z:Should fail if we forget to not include // in the DOI linkzdoi://XXX/XXX/fname.txtN)rI   rJ   
ValueErrorr   r(   r   r   test_parse_url_invalid_doir_      s    	z	"	" - -+,,,- - - - - - - - - - - - - - - - - -s   7;;c                     t                      5 } t          |                                           sJ t          | dd          5 }|                    d           ddd           n# 1 swxY w Y   t          | d          5 }|                                                                dk    sJ 	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w 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   r5   openwritereadstrip)tmpoutfileinfiles      r   test_temporary_filerm      s   			 2SCyy!!!!!#sW--- 	!MM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!#((( 	2F;;==&&((E11111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2	2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Cyy!!!!!!!sY   6CA'C'A+	+C.A+	/C-B=1C=C	CC	CCCc                  f   t                      5 } t          |           5 }t          |                                          sJ | |v sJ t	          |dd          5 }|                    d           ddd           n# 1 swxY w Y   t	          |d          5 }|                                                                dk    sJ 	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          |                                          rJ 	 ddd           dS # 1 swxY w Y   dS )zIMake sure the file is writable and cleaned up in the end when given a dirra   rb   rc   re   N)r   r
   r   r5   rf   rg   rh   ri   )r#   rj   rk   rl   s       r   test_temporary_file_pathro      s#   			 &D!! 	6S99##%%%%%3;;;;c3111 %We$$$% % % % % % % % % % % % % % %cG,,, 6{{}}**,,555556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 99##%%%%%%& & & & & & & & & & & & & & & & & &s|   D&<C*A=1C*=BC*BC*-CC*CC*CC*D&*C.	.D&1C.	2&D&&D*-D*c                     	 t                      5 } t          |                                           sJ t          d          # 1 swxY w Y   dS # t          $ r' t          |                                           rJ Y dS w xY w)zHMake sure the file is writable and cleaned up when there is an exceptionzNooooooooo!N)r
   r   r5   r^   )rj   s    r   test_temporary_file_exceptionrq      s    & 	,99##%%%%%]+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	,  & & &99##%%%%%%%%&s.   A 3AAA 
AA -B B)__doc__r1   r8   r!   pathlibr   rS   r   concurrent.futuresr   r   rI   utilsr   r	   r
   r   r   markparametrizer=   rM   rT   r\   r_   rm   ro   rq   r(   r   r   <module>rx      s&    
			          ' ' ' ' ' ' F F F F F F F F            4 4 4 
,-	K    
"& "& 
"&J/ / /*3 3 30  ,+;ZPP	

 +*:JOO	

 :!9$ 	
 L!2< 	
#4 	8779   <$ $= <$
- - -" " "
& 
& 
&& & & & &r   