
    דij                        S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
Jr  SSKJrJr  SSKrSSKJr  SSKJr  S	S
KJr  S	SKJr  S	SKJrJr  SrSrSrS	r " S S\5      rg)z
The 'new' conda format, introduced in late 2018/early 2019.

https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/packages.html
    )annotationsN)closing)Callable)
ZIP_STOREDZipFile)stream_conda_component)conda_reader_for_url   )utils)AbstractBaseFormat)_extract_list   ).tar.zstzstdzzstd:compression-level=19   c                      \ rS rSrSr\S 5       r\S 5       r\SS j5       r\   S SS jj5       r	\S 5       r
\SS	 j5       r\SS
 j5       rSrg)CondaFormat_v2#   zIf there's another conda format or breaking changes, please create a new class and keep this
one, so that handling of v2 stays working.c                $    U R                  S5      $ )N.conda)endswith)fns    @lib/python3.13/site-packages/conda_package_handling/conda_fmt.py	supportedCondaFormat_v2.supported'   s    {{8$$    c                   [         R                  " UR                  S5      5      =(       d    Sn[        R                  R                  U 5      (       dP  [        R                  R                  [        R                  R                  [        R                  " 5       U 5      5      n [        R                  R                  U5      (       d  [        R                  " U5        [        [        U 5      [        U5      US9  g )N
componentsinfopkgr   )r   ensure_listgetospathisabsnormpathjoingetcwdisdirmakedirsr   str)r   dest_dirkwr   s       r   extractCondaFormat_v2.extract+   s    &&rvvl';<O
ww}}R  !!"'',,ryy{B"?@Bww}}X&&KK!R#h-J?r   Nc                ,    [         R                  XS/S9$ )Nr!   r#   )r   r1   )r   r/   s     r   extract_infoCondaFormat_v2.extract_info5   s    %%bx%HHr   c           
       ^^ Uc  [         R                  " 5       n[         R                  R                  U5      (       a>  [         R                  R	                  U5      n[         R                  R                  U5      n[         R                  R                  X25      nUS [        S5      *  n[        R                  " X5      n[        U5      m[        U4S jU 5       5      n	U(       a  US:w  a  [        S5      eUc+  S nUu  pmT(       a  TR                  S5      (       a  U4S jn " S S	5      n[        US
[        S9 n[        R                   " U 5         S["        0nUR%                  S[&        R(                  " U5      5        SU S3U4SU S3U	44nU" 5       nU H  u  nn[*        R,                  " U" 5       S
S9 nU H!  nUR/                  U[        R0                  S9  M#     S S S 5        WR2                  R4                  nUR7                  US
SS9 nUR9                  UUSS9n[*        R,                  " US
S9nU H!  nUR/                  U[        R0                  S9  M#     UR;                  5         UR;                  5         S S S 5        M     S S S 5        S S S 5        U$ ! , (       d  f       N= f! , (       d  f       GM$  = f! , (       d  f       N<= f! , (       d  f       U$ = f)Nr   c              3  6   >#    U  H  oT;  d  M
  Uv   M     g 7fN ).0fpkg_files_sets     r   	<genexpr>(CondaFormat_v2.create.<locals>.<genexpr>L   s     IY=2H!!Ys   		NNNz<Supply one of compressor= or (deprecated) compression_tuple=c                 <    [         R                  " [        [        S9$ )Nlevelthreads)	zstandardZstdCompressorZSTD_COMPRESS_LEVELZSTD_COMPRESS_THREADSr9   r   r   <lambda>'CondaFormat_v2.create.<locals>.<lambda>R   s    !9!9)-"r   zzstd:compression-level=c                 n   > [         R                  " [        T R                  SS5      S   5      [        S9$ )N=r
   rA   )rD   rE   intsplitrG   )filter_optss   r   rH   rI   Z   s-    Y%=%=k//Q7;<1&r   c                  *    \ rS rSrSrS rS rS rSrg))CondaFormat_v2.create.<locals>.NullWriter_   z4
zstd uses less memory on extract if size is known.
c                    SU l         g )Nr   sizeselfs    r   __init__2CondaFormat_v2.create.<locals>.NullWriter.__init__d   s	    	r   c                T    U =R                   [        U5      -  sl         [        U5      $ r8   )rU   len)rW   bytess     r   write/CondaFormat_v2.create.<locals>.NullWriter.writeg   s    		SZ'	5z!r   c                    U R                   $ r8   rT   rV   s    r   tell.CondaFormat_v2.create.<locals>.NullWriter.tellk   s    yy r   rT   N)	__name__
__module____qualname____firstlineno____doc__rX   r]   r`   __static_attributes__r9   r   r   
NullWriterrQ   _   s    "!r   rh   w)compressionconda_pkg_format_versionzmetadata.jsonzpkg-r   zinfo-)fileobjmode)filterT)force_zip64F)rU   closefd)r&   r+   r'   r(   dirnamebasenamer*   r[   r   filter_info_filessetlist
ValueError
startswithr   r   	tmp_chdirCONDA_PACKAGE_FORMAT_VERSIONwritestrjsondumpstarfileTarFileaddanonymize_tarinforl   rU   openstream_writerclose)prefix	file_listout_fn
out_folder
compressorcompression_tupleconda_pkg_fnfile_id	pkg_files
info_filesextcomp_filterrh   
conda_filepkg_metadatacomponents_filescompress	componentfilessizerfilerU   component_filecomponent_streamcomponent_tarrO   r<   s                            @@r   createCondaFormat_v2.create9   s    J77==  0JWW%%f-Fww||J7)CM>*++I>	IIYII
,0BB[\\J ->)Ck{556OPP

	! 	! \3J?:uP
 78TULL1IJ y)95G9H-  "|H$4 	5 __Z\D %		$u/F/F	G !& E }}))__Y_F.'/'='=&T5 (> ($ %,OO<LSV$WM %%))$u7N7N)O !& "'')$**, GF %5!P
?J % ED
 GF1P
 P
??J sV    KA(K?(J"	'/KA.J3	KK"
J0,K3
K=	K
K	K
K&c                    [         R                  " U 5      nUR                  n[        R                  " U S5      u  p4X#US.$ )N)md5sha256)rU   r   r   )r&   statst_sizer   	checksums)in_filestat_resultrU   r   r   s        r   get_pkg_detailsCondaFormat_v2.get_pkg_details   s9    ggg&""oog/@AF;;r   c                &   [         R                  " UR                  S5      5      =(       d    SnSU;   a  U R                  XUS9$ [        R
                  R                  U5      (       d  [        R
                  R                  U5      n[        XUS9  g )Nr   r    z://)r   verbose)	r   r$   r%   _list_remote_contentsr&   r'   r(   abspathr   )clsr   r   r0   r   s        r   list_contentsCondaFormat_v2.list_contents   sm    &&rvvl';<O
B;,,RPW,XXww}}R  $Bb9r   c           
     \   [         R                  " U=(       d    S5      n0 n[        U 5      u  pE[        U5         [	        XESS9 GH  u  pgUR
                  UR                  5       (       a  SOS-   nSU;   a  Sn	U(       a  [        R                  " UR                  5       SUR                  =(       d    UR                   SUR                  =(       d    UR                   SUR                  S S3n	U	S[        R                   " UR"                  5      S	S
 -  -  n	X-   X8'   SU;   d  M  UR
                  S:X  d  M  [$        R&                  " UR)                  U5      R+                  5       R-                  5       5      n
U
R/                  SS5      S:X  d   U
5       eU
R/                  SS5       H$  nSn	U(       a  US   nSUS S3n	XS   -   X8S   '   M&     GM     S	S	S	5        [1        [3        UR5                  5       5       VV	s/ s H  u  pU	PM	     sn	nSS06  g	! , (       d  f       NF= fs  sn	nf )z
List contents of a remote .conda artifact (by URL). It only fetches the 'info' component
and uses the metadata to infer details of the 'pkg' component. Some fields like
modification time or permissions will be missing in verbose mode.
r    r!   )r   /  10dz%d-%02d-%02d %02d:%02d:%02d N   r"   zinfo/paths.jsonpaths_versionr
   pathsr9   size_in_bytesz?????????? ?/? z ????-??-?? ??:??:?? _pathsep
)r   r$   r	   r   r   namer,   r   filemoderm   unameuidgnamegidrU   time	localtimemtimer{   loadsextractfilereaddecoder%   printsorteditems)urlr   r   linesfilenamecondatarmemberr'   linedatarU   _s                r   r   $CondaFormat_v2._list_remote_contents   s    &&z'D_E
.s3U^5hQWX{{V\\^^cDZ'D#}}V[[9:!%||9vzz:!FLL<VFJJ;WWX%{{3/q2 
  >PVP\P\A]^`_`Aa aa"&+EKJ&6;;:K+K::coof&=&B&B&D&K&K&MND88OQ71<BdB< $" 5!"#'#8D%4T#J>S#TD/37m/C7m, !6  Y , 	F5;;=$9:$9$9:EE- ^, ;s   C*H(H:BH H(

H%r9   r8   )NNr?   )r   z-Callable[[], zstandard.ZstdCompressor] | None)F)Fr    )rb   rc   rd   re   rf   staticmethodr   r1   r4   r   r   classmethodr   r   rg   r9   r   r   r   r   #   s    2 % % @ @ I I 
 DH,Y
 BY Yv < < : : F Fr   r   ) rf   
__future__r   r{   r&   r   r}   r   
contextlibr   typingr   zipfiler   r   rD   )conda_package_streaming.package_streamingr   conda_package_streaming.urlr	   r   r   	interfacer   	streamingr   r   ry   DEFAULT_COMPRESSION_TUPLErF   rG   r   r9   r   r   <module>r      sd    #  	      '  L <  ) &  M    cF' cFr   