
    xKg4                     n   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$                  j'                  d	e	e
gd
dg      d        Zd Z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         Zd! Zd" Zd# Zd$ Zy)%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kD  sJ t        |       }t        |      dk(  sJ |dd dk(  sJ |j                  d      d	   dd
 dk(  sJ y)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     Z/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/pooch/tests/test_utils.pytest_unique_name_longr      ss    *9+T
:Cs8c>>S!Eu:;,&&&;;sAs#|333    poolthreads	processes)idsc                    t         j                  dfd	}|j                  t         d|       t         j                  j	                  t         j
                  d      }t         j                  j                  |      rJ 	  |        5 }t        d      D cg c]  }|j                  t        |       }}|D ]  }|j                           t         j                  j                  |      sJ 	 ddd       t         j                  j                  |      rt        j                  |       yyc c}w # 1 sw Y   DxY w# t         j                  j                  |      rt        j                  |       w w xY w)z*Try to create the cache folder in parallelc                 D    t        j                  d        | |       y)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_cache   NF)osr$   setattrr#   joincurdirexistsrangesubmitr	   resultshutilrmtree)	r   monkeypatchr%   
data_cacheexecutorifuturesfuturer$   s	           @r    test_make_local_storage_parallelr9   &   s   " {{H*
 J5bii)>?Jww~~j)))
&VxINqIQA 2J?   " "77>>*---  77>>*%MM*% & V 77>>*%MM*% &s6   ?D; D/D*1:D/,D; *D//D84D; ;7E2c                    d	d}t         j                  j                  t         j                  d      }t         j                  j	                  |      rJ | j                  t         d|       t        j                  t              5 }t        |d       dt        |      v sJ dt        |      v sJ 	 ddd       y# 1 sw Y   yxY w)
z9Should warn the user when can't create the local data dirc                     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'Nr(   )r)   r#   r+   r,   r-   r*   pytestraisesr>   r	   str)r3   r%   r4   errors       r   +test_local_storage_makedirs_permissionerrorrI   P   s    , bii):;Jww~~j)))J5		'5	
 3c%j@@@ CJ... 
(	'	's   ,B::Cc                    d }t               5 }t        j                  t        j                  j	                  |d             t        j                  j                  |      sJ | j                  t        d|       t        j                  t              5 }t        |d       dt        |      v sJ dt        |      v sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	z;Should warn the user when can't write to the local data dirc                      t        d      r<   r=   )kwargss    r   mocktempfilez@test_local_storage_newfile_permissionerror.<locals>.mocktempfilej   r?   r   z1.0NamedTemporaryFilerA   rB   z#Pooch could not write to data cacherD   N)r   r)   r$   r#   r+   r-   r*   tempfilerE   rF   r>   r	   rG   )r3   rM   r4   rH   s       r   *test_local_storage_newfile_permissionerrorrP   e   s    
, 
	
BGGLLU34ww~~j)))H&:LI]]?+u# 9CJFFF$E
222 , 
	 ,+ 
	s$   BC,C CC	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)rQ   rT   rU   zzenodo-doi-with-slashc                 $    t        |       |k(  sJ y)zParse URL into 3 componentsN)r   )r   outputs     r   test_parse_urlrX   }   s    @ S>V###r   c                  v    t        j                  t              5  t        d       ddd       y# 1 sw Y   yxY w)z:Should fail if we forget to not include // in the DOI linkzdoi://XXX/XXX/fname.txtN)rE   rF   
ValueErrorr    r   r   test_parse_url_invalid_doir\      s#    	z	"+, 
#	"	"s   /8c                     t               5 } t        |       j                         sJ t        | dd      5 }|j	                  d       ddd       t        | d      5 }|j                         j                         dk(  sJ 	 ddd       ddd       t               j                         rJ y# 1 sw Y   gxY w# 1 sw Y   9xY w# 1 sw Y   =xY w)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infiles      r   test_temporary_filerj      s    		SCy!!!#sW-MM%  .#(F;;=&&(E111 )	 
 Cy!!!!	 .-((	 
	s:   *CB-C$B9C-B6	2C9C	>CCc                     t               5 } t        |       5 }t        |      j                         sJ | |v sJ t	        |dd      5 }|j                  d       ddd       t	        |d      5 }|j                         j                         dk(  sJ 	 ddd       ddd       t              j                         rJ 	 ddd       y# 1 sw Y   pxY w# 1 sw Y   BxY w# 1 sw Y   FxY w# 1 sw Y   yxY w)zIMake sure the file is writable and cleaned up in the end when given a dirr^   r_   r`   rb   N)r   r
   r   r-   rc   rd   re   rf   )r#   rg   rh   ri   s       r   test_temporary_file_pathrl      s    		D!S9##%%%3;;c31We$ 2cG,{{}**,555 - " 9##%%%% 
	 21,, "! 
	sR   C,0C CC .$CC #C,CC CC  C)	%C,,C5c                      	 t               5 } t        |       j                         sJ t        d      # 1 sw Y   yxY w# t        $ r t               j                         rJ Y yw xY w)zHMake sure the file is writable and cleaned up when there is an exceptionzNooooooooo!N)r
   r   r-   rZ   )rg   s    r   test_temporary_file_exceptionrn      sb    &9##%%%]++   &9##%%%%&s   
? '3<? ? $A&%A&)__doc__r)   r1   r!   pathlibr   rO   r   concurrent.futuresr   r   rE   utilsr   r	   r
   r   r   markparametrizer9   rI   rP   rX   r\   rj   rl   rn   r[   r   r   <module>ru      s   
     ' F  4 
,-	K   
"&
"&J/*30  ,+;ZP	

 +*:JO	

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