
     
3j4                     b   S r SSKrSSKrSSKrSSKJr  SSKrSSKJr  SSKJ	r	J
r
  SSKrSSKJrJrJrJr  S r\R$                  R'                  S	\	\
/S
S/S9S 5       rS rS r\R$                  R'                  SSSSSS.4SSSSS.4SSSSS.4SSSSS.4// SQS9S  5       rS! rS" rS# rS$ rg)%z
Test the utility functions.
    N)Path)TemporaryDirectory)ThreadPoolExecutorProcessPoolExecutor   )	parse_urlmake_local_storagetemporary_fileunique_file_namec                      SS S3n [        U 5      S:  d   e[        U 5      n[        U5      S:X  d   eUSS S:X  d   eUR                  S5      S	   SS
 S:X  d   eg)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     P/home/wildlama/miniconda3/lib/python3.13/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                 ,  ^ [         R                  mSU4S jjnUR                  [         SU5        [         R                  R	                  [         R
                  S5      n[         R                  R                  U5      (       a   e U " 5        n[        S5       Vs/ s H  oTR                  [        U5      PM     nnU H  nUR                  5         M     [         R                  R                  U5      (       d   e SSS5        [         R                  R                  U5      (       a  [        R                  " U5        ggs  snf ! , (       d  f       NO= f! [         R                  R                  U5      (       a  [        R                  " U5        f f = f)z*Try to create the cache folder in parallelc                 >   > [         R                  " S5        T" XS9  g)zDelay before calling makedirsg      ?)exist_okN)timesleep)pathr    makedirss     r   mockmakedirs6test_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_parallelr:   &   s   " {{H*
 J5bii)>?Jww~~j))))
&VxINqIQA 2J?   " "77>>*----  77>>*%%MM*% & V 77>>*%%MM*% &s7   E EE :AE<E  E
EE =Fc                    S	S jn[         R                  R                  [         R                  S5      n[         R                  R	                  U5      (       a   eU R                  [         SU5        [        R                  " [        5       n[        USS9  S[        U5      ;   d   eS[        U5      ;   d   e SSS5        g! , (       d  f       g= f)
z9Should warn the user when can't create the local data dirc                     [        S5      ez-Raise an exception to mimic permission issuesz
Fake errorPermissionError)r#   r    s     r   r%   Atest_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)r4   r%   r5   errors       r   +test_local_storage_makedirs_permissionerrorrK   P   s    , bii):;Jww~~j))))J5		'5	
 3c%j@@@ CJ... 
(	'	's   -C
Cc                    S n[        5        n[        R                  " [        R                  R	                  US5      5        [        R                  R                  U5      (       d   eU R                  [        SU5        [        R                  " [        5       n[        USS9  S[        U5      ;   d   eS[        U5      ;   d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)	z;Should warn the user when can't write to the local data dirc                      [        S5      er=   r>   )kwargss    r   mocktempfile@test_local_storage_newfile_permissionerror.<locals>.mocktempfilej   rA   r   z1.0NamedTemporaryFilerC   rD   z#Pooch could not write to data cacherF   N)r   r*   r$   r#   r,   r.   r+   tempfilerG   rH   r?   r	   rI   )r4   rO   r5   rJ   s       r   *test_local_storage_newfile_permissionerrorrS   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**
C8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)rT   rW   rX   zzenodo-doi-with-slashc                 &    [        U 5      U:X  d   eg)zParse URL into 3 componentsN)r   )r   outputs     r   test_parse_urlr[   }   s    @ S>V###r   c                      [         R                  " [        5         [        S5        SSS5        g! , (       d  f       g= f)z:Should fail if we forget to not include // in the DOI linkzdoi://XXX/XXX/fname.txtN)rG   rH   
ValueErrorr    r   r   test_parse_url_invalid_doir_      s#    	z	"+, 
#	"	"s   0
>c                     [        5        n [        U 5      R                  5       (       d   e[        U SSS9 nUR	                  S5        SSS5        [        U SS9 nUR                  5       R                  5       S:X  d   e SSS5        SSS5        [        W 5      R                  5       (       a   eg! , (       d  f       No= f! , (       d  f       NH= f! , (       d  f       NQ= f)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_filerm      s    		SCy!!!!#sW-MM%  .#(F;;=&&(E111 )	 
 Cy!!!!!	 .-((	 
	s:   ,CB2	C%CC2
C 	<C
C	C
C"c                  $   [        5        n [        U 5       n[        U5      R                  5       (       d   eX;   d   e[	        USSS9 nUR                  S5        SSS5        [	        USS9 nUR                  5       R                  5       S:X  d   e SSS5        SSS5        [        W5      R                  5       (       a   e SSS5        g! , (       d  f       Nx= f! , (       d  f       NQ= f! , (       d  f       NZ= f! , (       d  f       g= f)zIMake sure the file is writable and cleaned up in the end when given a dirra   rb   rc   re   N)r   r
   r   r.   rf   rg   rh   ri   )r#   rj   rk   rl   s       r   test_temporary_file_pathro      s    		D!S9##%%%%;;c31We$ 2cG,{{}**,555 - " 9##%%%%% 
	 21,, "! 
	sR   D3C0
CC0.%CC0(D
CC0
C-)C00
C>	:D
Dc                       [        5        n [        U 5      R                  5       (       d   e[        S5      e! , (       d  f       g= f! [         a#    [        W 5      R                  5       (       a   e gf = f)zHMake sure the file is writable and cleaned up when there is an exceptionzNooooooooo!N)r
   r   r.   r]   )rj   s    r   test_temporary_file_exceptionrq      sh    &9##%%%%]++   &9##%%%%%&s&   
A	 ,8
AA	 A	 	*A65A6)__doc__r*   r2   r!   pathlibr   rR   r   concurrent.futuresr   r   rG   utilsr   r	   r
   r   r   markparametrizer:   rK   rS   r[   r_   rm   ro   rq   r^   r   r   <module>rx      s   
     ' F  4 
,-	K   
"&
"&J/*30  ,+;ZP	

 +*:JO	

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