
    e`.                        d dl mZmZmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ ddlmZmZ ddlmZ dd	Z	 	 ddZ G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z dZ! G d de          Z"ej#        dk    rej$        j%        Z&dS ddZ&dS )     )print_functiondivisionabsolute_importN)closing)BytesIO)
ThreadPool   )Queueon_win)CondaPackExceptionc                 \    | dk    rddl m}  |            S | dk     rt          d          | S )Nr   )	cpu_countr	   z+n-threads must be >= 1, or -1 for all cores)multiprocessingr   r   )	n_threadsr   s     2lib/python3.11/site-packages/conda_pack/formats.py_parse_n_threadsr      sG    B------y{{1}} !NOOO       FTc                    t          |          }|dk    rt          | |||          S |dv r"|dk    rd}d}nAd}d}t          | ||	          } n*|d
v r"|dk    rd}d}nd}d}t          | ||	          } nd}d}t	          | ||||          S )Nzip)zip_symlinkszip_64)ztar.gztgzparcelr	   zw:gzFwT)compresslevelr   )ztar.bz2tbz2zw:bz2)
close_filemoder   )r   
ZipArchiveParallelGzipFileWriterParallelBZ2FileWriter
TarArchive)	fileobjarcrootformatcompress_levelr   r   r   r    r   s	            r   archiver)      s     !++I'7!') ) ) 	) ,,,>>DJJDJ,WN7@B B BGG	&	&	&>>DJJDJ+G>6?A A AGG 
gw:~? ? ? ?r   c                   4    e Zd Zd
dZd Zd Zd Zd Zd Zd	S )ParallelFileWriter	   r	   c                    || _         || _        || _        d| _        |                                  |                                  g | _        d| _        t          |          | _	        t          |          | _        t          j        | j                  | _        d| j        _        | j                                         d S )Nr   )maxsize)targetT)r%   r   r   size_init_state_write_headerbuffersbuffer_lengthr   poolr
   compress_queue	threadingThread	_consumer_consumer_threaddaemonstart)selfr%   r   r   s       r   __init__zParallelFileWriter.__init__C   s    *" 	 y))	#I666 ) 0 G G G'+$##%%%%%r   c                     | j         S N)r0   r=   s    r   tellzParallelFileWriter.tellX   s
    yr   c                    t          |t                    st          |          }t          |          }|dk    r|                     |           | xj        |z  c_        | xj        |z  c_        | j                            |           | j        | j	        k    r-| j
                            | j                   g | _        d| _        |S Nr   )
isinstancebytes
memoryviewlen_per_buffer_opr0   r4   r3   append_block_sizer6   put)r=   datans      r   writezParallelFileWriter.write[   s    $&& 	$d##DIIq55%%%IINII!#L%%%!D$444#''555!%&"r   c                 4   t          | j                  5  | j                            | j        t	          | j        j        d                     D ]0}|D ]+}t          |          r| j        	                    |           ,1	 d d d            d S # 1 swxY w Y   d S r@   )
r   r5   imap	_compressiterr6   getrH   r%   rO   )r=   r3   bufs      r   r9   zParallelFileWriter._consumerj   s    TY 	0 	09>>ND)<)@$$G$GI I 0 0" 0 0C3xx 0**3///00	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   A*BBBc                     g }|                                  }|D ]*}|                    |                    |                     +|                    |                     |                     |S r@   )_new_compressorrJ   compress_flush_compressor)r=   in_bufsout_bufs
compressorrM   s        r   rR   zParallelFileWriter._compressr   so    ))++
 	7 	7DOOJ//556666..z::;;;r   c                 N   | j         d S | j        r| j                            | j                   | j                            d            | j                                         |                                  | j                                          d | _        d | _        d | _         d S r@   )	r%   r3   r6   rL   r:   join_write_footerflushr5   rA   s    r   closezParallelFileWriter.closez   s    <F < 	2##DL111 	%%%""$$$ 	 	 #	r   N)r,   r	   )	__name__
__module____qualname__r>   rB   rO   r9   rR   ra    r   r   r+   r+   B   ss        & & & &*    0 0 0      r   r+   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
r"   i   c                 >    t          j        d          dz  | _        d S )Nr       zlibcrc32crcrA   s    r   r1   z"ParallelGzipFileWriter._init_state   s    :c??Z/r   c                 z    t          j        | j        t           j        t           j         t           j        d          S rD   )rj   compressobjr   DEFLATED	MAX_WBITSDEF_MEM_LEVELrA   s    r   rW   z&ParallelGzipFileWriter._new_compressor   s1     2DM!%1CQH H 	Hr   c                 J    t          j        || j                  dz  | _        d S Nrh   ri   r=   buffers     r   rI   z%ParallelGzipFileWriter._per_buffer_op   s     :fdh//*<r   c                 `    | j                             t          j        d|                     d S )Nz<L)r%   rO   structpack)r=   values     r   	_write32uz ParallelGzipFileWriter._write32u   s*    6;tU3344444r   c                    | j                             d           | j                             d           |                     t          t	          j                                         | j                             d           d S )Ns       s   )r%   rO   rz   inttimerA   s    r   r2   z$ParallelGzipFileWriter._write_header   sj    ?+++7###s49;;''(((;'''''r   c                    | j                             |                                                     t          j                             |                     | j                   |                     | j        dz             d S rs   )	r%   rO   rW   r`   rj   Z_FINISHrz   rl   r0   rA   s    r   r_   z$ParallelGzipFileWriter._write_footer   sg    4//1177FFGGGtx   ty:-.....r   c                 @    |                     t          j                  S r@   )r`   rj   Z_FULL_FLUSHr=   r\   s     r   rY   z(ParallelGzipFileWriter._flush_compressor   s     1222r   N)rb   rc   rd   rK   r1   rW   rI   rz   r2   r_   rY   re   r   r   r"   r"      s         K0 0 0H H H= = =5 5 5( ( (/ / /
3 3 3 3 3r   r"   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )r#   c                 *    | j         dz  dz  | _        d S )Nd   i   )r   rK   rA   s    r   r1   z!ParallelBZ2FileWriter._init_state   s    -3e;r   c                 >    dd l }|                    | j                  S rD   )bz2BZ2Compressorr   )r=   r   s     r   rW   z%ParallelBZ2FileWriter._new_compressor   s"    


  !3444r   c                     d S r@   re   rt   s     r   rI   z$ParallelBZ2FileWriter._per_buffer_op       r   c                     d S r@   re   rA   s    r   r2   z#ParallelBZ2FileWriter._write_header   r   r   c                     d S r@   re   rA   s    r   r_   z#ParallelBZ2FileWriter._write_footer   r   r   c                 *    |                                 S r@   )r`   r   s     r   rY   z'ParallelBZ2FileWriter._flush_compressor   s    !!!r   N)	rb   rc   rd   r1   rW   rI   r2   r_   rY   re   r   r   r#   r#      sn        < < <5 5 5      " " " " "r   r#   c                       e Zd Zd Zd ZdS )ArchiveBasec                 |    t           j                            | j        |          }|                     ||           d S r@   )ospathr^   r&   _addr=   sourcer/   s      r   addzArchiveBase.add   s3    dlF33		&&!!!!!r   c                 ~    t           j                            | j        |          }|                     |||           d S r@   )r   r   r^   r&   
_add_bytes)r=   r   sourcebytesr/   s       r   	add_byteszArchiveBase.add_bytes   s5    dlF33V44444r   N)rb   rc   rd   r   r   re   r   r   r   r      s2        " " "5 5 5 5 5r   r   c                   2    e Zd Z	 	 d
dZd Zd Zd Zd Zd	S )r$   Fr   r   c                 L    || _         || _        || _        || _        || _        d S r@   )r%   r&   r   r    r   )r=   r%   r&   r   r    r   s         r   r>   zTarArchive.__init__   s,    $	*r   c                     | j         dk    r	d| j        ini }t          j        d| j        t
          | j         d|| _        | S )Nr   r   )r%   dereferencer    re   )r    r   tarfileopenr%   r   r)   )r=   kwargss     r   	__enter__zTarArchive.__enter__   s]    :>)s:J:J/4#566PR | .DL06)-. . '-. . r   c                 |    | j                                          | j        r| j                                         d S d S r@   )r)   ra   r   r%   )r=   argss     r   __exit__zTarArchive.__exit__   sD    ? 	!L     	! 	!r   c                 @    | j                             ||d           d S )NF)	recursive)r)   r   r   s      r   r   zTarArchive._add   s%    599999r   c                     | j                             ||          }t          |          |_        | j                             |t          |                     d S r@   )r)   
gettarinforH   r0   addfiler   r=   r   r   r/   infos        r   r   zTarArchive._add_bytes   sN    |&&vv66$$	T7;#7#788888r   N)Fr   r   rb   rc   rd   r>   r   r   r   r   re   r   r   r$   r$      sj        49)*+ + + +  ! ! !
: : :9 9 9 9 9r   r$   a  
The following conda package file is a symbolic link that does not match an
existing file within the same package:

    {0}

It is likely this link points to a file brought into the environment by
a dependency. Unfortunately, conda-pack does not support this practice
for zip files unless the --zip-symlinks option is engaged. Please see
"conda-pack --help" for more information about this option, or use a
tar-based archive format instead.c                   .    e Zd Zd	dZd Zd Zd Zd ZdS )
r!   FTc                 >    || _         || _        || _        || _        d S r@   )r%   r&   r   r   )r=   r%   r&   r   r   s        r   r>   zZipArchive.__init__  s#    (r   c                 h    t          j        | j        d| j        t           j                  | _        | S )Nr   )
allowZip64compression)zipfileZipFiler%   r   ZIP_DEFLATEDr)   rA   s    r   r   zZipArchive.__enter__  s5    t|S26+3:3GI I I r   c                     | j                                          t          |t          j                  rt          d          d S )Nz;Large Zip File: ZIP64 extensions required but were disabled)r)   ra   rE   r   LargeZipFiler   )r=   typery   	tracebacks       r   r   zZipArchive.__exit__  sL    eW122 	%$$% % %	% 	%r   c           	         	 t          j        |          }t          j        |j                  }n# t
          t          f$ r d}Y nw xY w|rb| j        rt          j	        |          }d|_
        |j        dz  dz  |_        t           j                            |          r|xj        dz  c_        | j                            |t          j        |                     d S t           j                            |          rt          j        |d          D ]\  }}}t           j                            |t           j                            ||                    }	|D ]Y}
| j                            t           j                            ||
          t           j                            |	|
                     Z|s|s| j                            ||	           d S 	 | j                            ||           d S # t
          $ r}|j        t*          j        k    r|t/          |           d          |k    rNt           j                            |d t/          |           dz
                     }d                    ||          }t4                              |          }t7          |           d }~ww xY w| j                            ||           d S )	NF        T)followlinksr	   z{}: {})r   lstatstatS_ISLNKst_modeOSErrorAttributeErrorr   r   ZipInfocreate_systemexternal_attrr   isdirr)   writestrreadlinkwalkr^   relpathrO   errnoENOENTrH   basenamer'   _dangling_link_errorr   )r=   r   r/   stis_linkr   rootdirsfilesroot2filemsgs                r   r   zZipArchive._add  s   	&!!Bl2:..GG( 	 	 	GGG	  !	/  v..%&"&(j6&9b%@"7==(( /&&$.&&%%dBK,?,?@@@@@7==(( -/WV-N-N-N < <)dE "VRW__T65R5R S S#( I IC L..rw||D#/F/F/1w||E3/G/GI I I I# <E < L..tU;;;< <**66:::::" 
 
 
7el22%s6{{lmm4>> *,)9)9&3v;;,q.:Q)R)R)1)H)H"6"="=f"E"EC"4S"9"99
 Lvv.....s(   -0 AAG3 3
J+=B)J&&J+c                 \    t          ||          }| j                            ||           d S r@   )zipinfo_from_filer)   r   r   s        r   r   zZipArchive._add_bytesC  s/     00dK00000r   N)FTr   re   r   r   r!   r!     se             % % %(/ (/ (/T1 1 1 1 1r   r!   )r      c                 n   t          j        |           }t          j        |j                  }t	          j        |j                  }|dd         }|| }t           j                            t           j        	                    |          d                   }|d         t           j
        t           j        fv r*|dd          }|d         t           j
        t           j        fv *|r|dz  }t          j        ||          }|j        dz  dz  |_        |rd|_        |xj        dz  c_        n|j        |_        |S )Nr   r   r	   /r   r   )r   r   S_ISDIRr   r~   	localtimest_mtimer   normpath
splitdrivesepaltsepr   r   r   	file_sizest_size)filenamearcnamer   r   mtime	date_timezinfos          r   r   r   L  s   WXRZ((r{++!A#J	?G'""27#5#5g#>#>q#ABBajRVRY///abbkG ajRVRY/// 	sNG33!zF2r9 	)EO4' jEOr   )r	   )r   FTr	   r@   )'
__future__r   r   r   r   r   r   rw   sysr   r7   r~   r   rj   
contextlibr   ior   multiprocessing.poolr   compatr
   r   corer   r   r)   objectr+   r"   r#   r   r$   r   r!   version_infor   	from_filer   re   r   r   <module>r      sl   @ @ @ @ @ @ @ @ @ @  				   



                     + + + + + + ! ! ! ! ! ! ! ! $ $ $ $ $ $    FK#$ ?  ?  ?  ?FM M M M M M M M`"3 "3 "3 "3 "3/ "3 "3 "3J" " " " ". " " ",5 5 5 5 5& 5 5 59 9 9 9 9 9 9 9B
% @1 @1 @1 @1 @1 @1 @1 @1F v1     r   