
    .Ph                         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mZmZmZ d dlZd dlZd dlmZ d dlmZmZmZ dZdZdZd	ed
ej        fdZdej        deded
e
fdZe j         deee
f         ded
ed         fd            Z!d
ee
         fdZ"d
ee
         fdZ#d
efdZ$e j         ddd
eee%                  fd            Z&dS )    N)Path)IOIteratorOptionalUnionVersion)
is_windowsplatform_subdir	site_pathiQ i   urlreturnc           	         d}t          |          D ]3}	 t          j        | d          }nx# t          j        j        $ ra}t          t          j        |dz  z  d          }t          d|d|dd	t          j
        
           t          j        |           Y d }~d }~ww xY w	 |                                 |c S # t          j        j        $ rr}|j        j        dv rXt          t          j        |dz  z  d          }t          d|d|dd	t          j
        
           t          j        |           n Y d }~-d }~ww xY wt#          d|  d| d          )N
   T)allow_redirects      zFailed to retrieve due to z, retrying in z.2f secondsfile)i  i  zCould not retrieve z in z tries)rangerequestsget
exceptionsRequestExceptionmaxmatheprintsysstderrtimesleepraise_for_status	HTTPErrorresponsestatus_codeTimeoutError)r   nirespr   timeouts         U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/ensureconda/installer.pyrequest_url_with_retryr/      s   
A1XX  		<T:::DD"3 	 	 	$&QU+R00GUQUUUUUUZ    JwHHHH		!!###KKK", 
	 
	 
	z%33dfQ/449 9 9#*89 9 9   
 
7#### $####
	 ?S??a???
@
@@s/   -B"ABB"&B>>EA'D??Etarballfilenamedest_filenamec                    |                      d           t          j        d|           5 }|                    |          }|t	          d          t                                          dd           t                      |z  }t          |          5 }|                    |	                                           d d d            n# 1 swxY w Y   |cd d d            S # 1 swxY w Y   d S )Nr   zr:bz2)modefileobjzCould not extract executable!Tparentsexist_ok)
seektarfileopenextractfileRuntimeErrorr   mkdirnew_executablewriteread)r0   r1   r2   tffotarget_pathexe_fos          r.    extract_files_from_conda_packagerF   :   sV    LLOOO	7G	4	4	4 ^^H%%:>???$666kkM1K(( 	$FLL###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$                 s6   A*C#(C
>C#
C	C#C	C##C'*C'	lock_path	lock_namec              #   .  K   t          j        t          |                     }t          j                    }	 	 |                    t
                     	 t          j                    |z
  }|dk    r#t          d| d|ddt          j                   d	V  |	                                 n# |	                                 w xY wd	S # t           j
        $ r< t          j                    |z
  }t          d
| d|ddt          j                   Y nw xY w)zContext manager to acquire a lock with user feedback when we need to wait.

    Args:
        lock_path: The path to the lock file
        lock_name: A descriptive name for the lock to show in waiting messages
    T)r-   g?z	Lock for z acquired after waiting z.1fr   r   NzWaiting for lock for z' to be released by another process... (zs))filelockFileLockstrr#   acquireLOCK_NOTIFICATION_INTERVAL_SECr    r!   r"   releaseTimeout)rG   rH   lock
lock_starttotal_wait_times        r.   lock_with_feedbackrT   I   sO      S^^,,DJ	LL!?L@@@"&)++
":"S((dIdddddd Z   
  E 	 	 	"ikkJ6O,	 , ,#+, , ,Z     	's+   C AB- C -CC ADDc                  T   t                      dz  } dt                       }t                                          dd           t          | d          5  t                      |z  }|                                rQt          j                    |                                j        z
  }|t          k     r|t          k    r|cd d d            S d}t          |          }t                      }g }|                                D ]/}|d         d         |k    r|                    |d                    0|                    d	 
           |d         }	t          |	d                   }t          j        |j                  }
t%          |
d|          cd d d            S # 1 swxY w Y   d S )Nzconda_exe_install.lockconda_standaloneTr6   zdownloading condaz@https://api.anaconda.org/package/anaconda/conda-standalone/filesattrssubdirc                 J    t          | d                   | d         | d         fS )Nversionbuild_number	timestampr   )rW   s    r.   <lambda>z#install_conda_exe.<locals>.<lambda>   s)    i())n%k"     )key
source_urlzstandalone_conda/conda.exer0   r1   r2   )r   
exe_suffixr>   rT   existsr#   statst_mtimeREDOWNLOAD_WHEN_OLDER_THAN_SECNEGATIVE_AGE_TOLERANCE_SECr/   r   jsonappendsortioBytesIOcontentrF   )rG   r2   rD   file_ager   r,   rX   
candidates	file_infochosenr0   s              r.   install_conda_exers   p   s   66I5z||55MKKdT222 
I':	;	; '
 '
kkM1 	#y{{[%5%5%7%7%@@H999999"'
 '
 '
 '
 '
 '
 '
 '
 Q%c** ""
 	6 	6I!(+v55!!)G"4555  	 	
 	
 	
 B%f\&:;;*T\**/1'
 
 
G'
 '
 '
 '
 '
 '
 '
 '
 '
 '
 '
 '
 '
 '
 '
 '
 '
 '
s   A*FCFF!$F!c                     t                      dz  } dt                       }t                                          dd           t          | d          5  t                      |z  }|                                rQt          j                    |                                j        z
  }|t          k     r|t          k    r|cddd           S t                      }d| d}t          |          }t          j        |j                  }t          rd	}nd
}t!          |||          cddd           S # 1 swxY w Y   dS )z(Install micromamba into the installationzmicromamba_install.lock
micromambaTr6   zdownloading micromambaNz/https://micromamba.snakepit.net/api/micromamba/z/latestzLibrary/bin/micromamba.exezbin/micromambarb   )r   rc   r>   rT   rd   r#   re   rf   rg   rh   r   r/   rl   rm   rn   r
   rF   )	rG   r2   rD   ro   rX   r   r,   r0   r1   s	            r.   install_micromambarv      s    77I///MKKdT222 
I'?	@	@ 
 
kkM1 	#y{{[%5%5%7%7%@@H 999999"
 
 
 
 
 
 
 
 !""OOOO%c***T\** 	(3HH'H/hm
 
 
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A*D3AD33D7:D7c                      t           rdndS )Nz.exe )r
    r^   r.   rc   rc      s    '66R'r^   target_filenamer   c              #     K   t          |            d}t          |d|  d          5  |                     t          j                    j                  }t          |d          5 }|V  ddd           n# 1 swxY w Y   t          j        |          }t          j	        ||j
        t          j        z             t          j        dv rW|                                 rC	 |                                  n-# t           t"          f$ r}t%          d|  d          |d}~ww xY wt          j        ||            ddd           dS # 1 swxY w Y   dS )	zCreate a new executable that can be written to.

    Care is take to both prevent concurrent writes as well as guarding against
    early reads.
    z.lockzfile write ()wbN)win32cygwinmsysz%Could not remove existing executable z for replacement)rL   rT   	with_nameuuiduuid4hexr;   osre   chmodst_modeS_IXUSRr!   platformrd   unlinkPermissionErrorOSErrorr=   rename)rz   rG   temp_filenamerC   str   s         r.   r?   r?      s      ''...I	I'Ho'H'H'H	I	I 2 2'11$*,,2BCC-&& 	"HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	W]##

T\ 9:::<666?;Q;Q;S;S6&&((((#W-   "'O ' ' '  
 		-1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2sZ   <E%A6*E6A:	:E=A:	>A EC43E4DDDEE
E)'
contextlibrl   r   r   re   r!   r:   r#   r   pathlibr   typingr   r   r   r   rJ   r   packaging.versionr	   ensureconda.resolver
   r   r   rg   rh   rN   rL   Responser/   rm   rF   contextmanagerrT   rs   rv   rc   bytesr?   ry   r^   r.   <module>r      s.       				  				  



          0 0 0 0 0 0 0 0 0 0 0 0   % % % % % % F F F F F F F F F F ".   !" A A(9 A A A A>Z#&7:	    #%T	"2 #s #xPT~ # # # #L.
8D> .
 .
 .
 .
b"
HTN "
 "
 "
 "
J(C ( ( ( ( 2F 2x5	/B 2 2 2 2 2 2r^   