Ë
    ëÿæi4  ã                   ó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éÿ   iöÿÿÿNz
aaaaaa.txtÚ-é   é
   Ú
aaaaaaaaaa)Úlenr   Úsplit)ÚurlÚfnames     úk/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/pooch/tests/test_utils.pyÚtest_unique_name_longr      ss   € à*¨9¨+°TÐ
:€CÜˆs‹8�cŠ>Ðˆ>Ü˜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ä—‘—‘œbŸi™iÐ)>Ó?€JÜ�w‰w�~‰~˜jÔ)Ð)Ð)ð
&ÙŒV�xäINÈqÌóÙIQÀA�—‘Ô 2°JÕ?Èð ð ó "�Ø—‘•ð "ä—7‘7—>‘> *Ô-Ð-Ñ-÷ ô �7‰7�>‰>˜*Ô%Ü�M‰M˜*Õ%ð &ùò÷ ˆVûô �7‰7�>‰>˜*Ô%Ü�M‰M˜*Õ%ð &ú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˜   € ó,ô —‘—‘œbŸi™iÐ):Ó;€JÜ�w‰w�~‰~˜jÔ)Ð)Ð)à×Ñœ˜J¨Ô5ä	�‰”Ô	'¨5ÜØØõ	
ð 3´c¸%³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¶   € ò
,ô 
Ô	 Ü
�‰”B—G‘G—L‘L ¨UÓ3Ô4Ü�w‰w�~‰~˜jÔ)Ð)Ð)à×ÑœHÐ&:¸LÔIä�]‰]œ?Ô+¨uÜØØ#õð 9¼CÀ»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Ü�C‹y×ÑÔ!Ð!Ð!Ü�#�s WÕ-°Ø�M‰M˜%Ô ÷ .ä�# Õ(¨FØ—;‘;“=×&Ñ&Ó(¨EÒ1Ð1Ñ1÷ )÷	 
ô �C‹y×ÑÔ!Ð!Ð!Ð!÷	 .Ð-úç(Ð(ú÷	 
Ð	ú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‘;Ð�;Ü�c˜3¨Õ1°WØ—‘˜eÔ$÷ 2ä�c GÕ,°Ø—{‘{“}×*Ñ*Ó,°Ò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/ò*3ð0 ‡�×ÑØð ,ØÐ+;ÀZÑPð	
ð
 +ØÐ*:ÀJÑOð	
ð
 :à!Ø9Ø$ñð	
ð Là!Ø2Ø<ñð	
ð#ò4 	8ð9 ó ñ<$ó=ð<$ò
-ò"ò
&ó&r   