
    I0f\                    <   U d dl mZ d dlZd dlZd dlZd dlmZ	 ddl
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ deiZded<   dZ	 ddlmZmZ ddlmZ eed<   dZdZ"d Z#ddZ$ddZ%ddZ&	 	 	 ddZ'ddZ(d Z)y# e $ r  ejB                  d       Y 9w xY w)     )annotationsN)glob   )ConversionErrorInvalidArchiveError)AbstractBaseFormat)CondaTarBZ2filter_info_files)get_executor)rm_rf.tar.bz2z#dict[str, type[AbstractBaseFormat]]SUPPORTED_EXTENSIONSF)ZSTD_COMPRESS_LEVELZSTD_COMPRESS_THREADS)CondaFormat_v2.condaTz4Install zstandard Python bindings for .conda supportc           
         g g }}t        j                         D ]u  \  }}|D ]O  }|j                  t         j                  j	                  t         j                  j                  |                    Q |j                   fd|D               w ||D cg c]  t        fd|D              r c}z   }|S c c}w )Nc              3     K   | ]B  }t         j                  j                  t         j                  j                  |             D y wN)_ospathrelpathjoin).0_dpprefixs     :lib/python3.12/site-packages/conda_package_handling/api.py	<genexpr>z!_collect_paths.<locals>.<genexpr>'   s1     TA))#((--A*>GTs   AAc              3  b   K   | ]&  }|j                  t        j                  z          ( y wr   )
startswithr   sep)r   fr   s     r   r    z!_collect_paths.<locals>.<genexpr>)   s"     )Y!,,rCGG|*D)Ys   ,/)r   walkappendr   r   r   extendany)r   	dir_paths
file_pathsdn	filenamesr$   r   	file_lists   `     ` r   _collect_pathsr.   "   s    zI XXf- UB	 	NAchh..sxx}}R/CVLM	NTQSTTU c)Yj)Y&Y I s   B?4B?c                    d }t         D ]#  }| j                  |      s| d t        |        }% |r!|st        j                  j                  |      }|S r   )r   endswithlenr   r   basename)in_fileabspathdirnameexts       r   get_default_extracted_folderr7   .   sV    G# +C kS	*G+ w((##G,N    c           	     0   |rt         j                  j                  |      r|rt        d      t         j                  j                  |      st         j                  j	                  t         j                  j                  |xs t        j                         |            }nLt         j                  j                  |xs t         j                  j                  |       t        | d            }t         j                  j                  |      st        j                  |       t        j                         D ])  }|j                  |       s|j                  | ||        y  t        dj                  | t!        t        j#                                           )Nzdest_dir and prefix both provided as abs paths.  If providing both, prefix can be abspath, but dest dir must be relative (relative to prefix)Fr4   )
componentsGDidn't recognize extension for file '{}'.  Supported extensions are: {})r   r   isabs
ValueErrornormpathr   getcwdr5   r7   isdirmakedirsr   values	supportedextractformatlistkeys)fndest_dirr;   r   rF   s        r   rE   rE   8   s&   88>>(# 
 xx~~h'xx((v7Mx)XYH88==*chh&&r*(U;

 88>>(#X&--/ 	
BNN2xJN?	

 U\\D-2245
 	
r8   c           	        |st        j                         }t         j                  j                  |      r>t         j                  j	                  |      }t         j                  j                  |      }|t        |       }nRt        |t              rB	 t        |      5 }|j                         }d d d        D cg c]  }|j                          }}d }t        j                         D ]-  }	|	j                  |      s	  |	j                  | |||fi |} |S  t)        dj+                  |t-        t        j/                                           # 1 sw Y   xY wc c}w #   xY w# t         $ rQ}
t         j                  j#                  ||      }t         j                  j%                  |      rt'        |       |
d }
~
ww xY w)Nr<   )r   r@   r   r=   r5   r2   r.   
isinstancestropen	readlinesstripr   rC   rD   createBaseExceptionr   isfile_rm_rfr>   rF   rG   rH   )r   r-   out_fn
out_folderkwr$   datar   outrF   err
abs_out_fns               r   rQ   rQ   W   s   ZZ\
 xx~~fXX%%f-
""6*"6*		Is	#	i %A{{}%,01q1I1 C&--/ 
F##fmmFIvzPRP J%
 U\\16689
 	
'% %1	 !  XX]]:v>
88??:.:&	sI   E! E/E! ;EE!  E'EE! !E$'	G0AF<<Gc                   dd l }dd lt        | d      }ddlm}	 |s| dd| dt
        d	fS t        t        j                  j                  |||z               }
d}t        j                  j                  |
      r|r|r4t        j                  j                  |
      rt        j                  |
       |d
k(  rIt        t        fd}d }t        j                  |j                   j                   | |||      }n+t        j                  |j                   j"                  | |      }	  |         |	|
|       }|\  }}}|s|rt        t%        ||            }| |
|fS # t&        $ rP}t        j                  j)                  |
      rt+        |
       t-        |t.              s t        |      }Y d }~Yd }~ww xY w)Nr   Fr:   r   )(validate_converted_files_match_streaming zInput file z% doesn't have a supported extension (z), skipping itr   c                 *     j                        S )N)levelthreads)ZstdCompressor)	zstandardzstd_compress_levelzstd_compress_threadss   r   
compressorz_convert.<locals>.compressor   s!     //-7L 0  r8   c                $    t        | gd      g k(  S )N.)r   r
   )filenames    r   is_infoz_convert.<locals>.is_info   s    ((C@BFFr8   )rf   rj   )!conda_package_streaming.transmuterc   r7   validater]   r   rM   r   r   r   lexistsunlinkr   r   
_functoolspartial	transmutetransmute_tar_bz2r   rR   rS   rT   rL   	Exception)rI   out_extrV   forcerd   re   rW   conda_package_streamingr2   r]   rU   errorsrf   rj   rq   resultr   missing_filesmismatching_sizeserc   s       ``              @r   _convertr|      s    -+B>HB')
 	
 z8g+=>?FF88F#uSXX%%f-JJvh"*&9#$,(=%
G #**'11;;%I #**'11CCRI	K=fbIF28/A}/ 1_]<MNO vv  	xxv&va+VF	s   0/E$ $	F=-AF88F=c           	     \   |s5t         j                  j                  |       xs t        j                         }t	        t        |             }| j                  d      r(|t	        t        | j                  d|                  z
  }n8| j                  d      r'|t	        t        | j                  d|                  z
  }i }t        |      5 }t        j                  t        f||d|}|j                  ||      D ]  \  }	}
}|s
|||	<   t        |
        	 d d d        |S # 1 sw Y   |S xY w)Nr   r   )rt   rV   )r   r   r5   r@   set_globr0   replace_get_executorro   rp   r|   maprT   )r3   rt   rV   	processesrW   flistfailed_filesexecutor	convert_frI   rU   rw   s               r   rq   rq      s   XX%%g.>#**,
gE
#E'//*g"FGHH			(	#E'//(G"DEFFL	y	! X&&x^Z^[]^	"*,,y%"@ 	B#)R v	  s   
9D!D!!D+c                    t         j                         D ]'  }|j                  |       s|j                  |       } |S  t	        d|        )zWFor the new pkg format, we return the size and hashes of the inner pkg part of the filez Don't know what to do with file )r   rC   rD   get_pkg_detailsr>   )r3   rF   detailss      r   r   r      sY    &--/ GG$,,W5G NG
 ;G9EFFr8   )T)NNNr   )FNN)Nr   )*
__future__r   	functoolsro   osr   warnings	_warningsr   r   
exceptionsr   r   	interfacer   tarballr	   _CondaTarBZ2utilsr   r   r   r   rT   r   __annotations__libarchive_enabled	conda_fmtr   r   r   _CondaFormat_v2ImportErrorwarnTHREADSAFE_EXTRACTr.   r7   rE   rQ   r|   rq   r    r8   r   <module>r      s    "     = ) 0 $ 0 "=G<V 9 V 	KE<%4"
  	
>&Z GT(E  KINNIJKs   B BB