
    l9i7                       d dl 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Zd dl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 ej2                  d	   Z ej6                  e      Z G d
 dej:                        ZdddZ G d de      Z  G d dej:                        Z! G d de!      Z" G d de!      Z#ejH                  dd       Z%ddZ&ddgZ'y)    )annotationsN)
CollectionMapping   )_ctx)run_subprocess)FailedProcessError)check_dependency)pipuvc                  f    e Zd ZdZeej                  dd              Zej                  dd       Zy)IsolatedEnvzIsolated build environment ABC.c                     y)z2The Python executable of the isolated environment.N selfs    R/var/www/html/leadgen/airagagent/rag_env/lib/python3.12/site-packages/build/env.pypython_executablezIsolatedEnv.python_executable            c                     y)zBGenerate additional env vars specific to the isolated environment.Nr   r   s    r   make_extra_environzIsolatedEnv.make_extra_environ%   r   r   Nreturnstr)r   zMapping[str, str] | None)	__name__
__module____qualname____doc__propertyabcabstractmethodr   r   r   r   r   r   r      sC    )A  A 	Q Qr   r   c          	         ddl m} ddlm} 	 t	        t         |j                  j                  dd| i|            }|y ||j                         ||      k\  S # t        $ r Y yw xY w)	z
    Given a path, see if a package is present and return True if the version is
    sufficient for build, False if it is not, None if the package is missing.
    r   )Versionr   	importlibnameNTr   )
packaging.versionr$   _compatr&   nextitermetadatadistributionsStopIterationversion)r'   minimum_version_strdistargsr$   r&   distributions         r   _has_dependencyr3   *   su    
 *"D!A!3!3!A!A!Xt!Xx!XYZ "<''(G4G,HHH  s   0A 	A('A(c                  h    e Zd ZdZdd	 	 	 ddZddZddZedd       Zedd       Z	dd	Z
dd
Zy)DefaultIsolatedEnvz[
    Isolated environment which supports several different underlying implementations.
    r   	installerc                   || _         y Nr6   )r   r7   s     r   __init__zDefaultIsolatedEnv.__init__C   s    
 %.r   c                   	 t        j                  d      }t        j                  j	                  |      }|| _        |  | j                  dk(  rt               | _        nt               | _        t        j                  d| j                  j                   d       | j                  j                  | j
                         | S # t        $ r#  | j                  t!        j"                            w xY w)Nz
build-env-prefixr   zCreating isolated environment: z...)tempfilemkdtempospathrealpath_pathr7   
_UvBackend_env_backend_PipBackendr   logdisplay_namecreate	Exception__exit__sysexc_infor   rA   s     r   	__enter__zDefaultIsolatedEnv.__enter__J   s    	##<8D 77##D)DDJ ~~%$.L!$/M!HH6t7H7H7U7U6VVYZ[$$TZZ0 	  	DMM3<<>*	s   B>C ,C.c                    t         j                  j                  | j                        r t	        j
                  | j                         y y r9   )r@   rA   existsrC   shutilrmtree)r   argss     r   rK   zDefaultIsolatedEnv.__exit__f   s+    77>>$**%MM$**% &r   c                    | j                   S )z/The location of the isolated build environment.)rC   r   s    r   rA   zDefaultIsolatedEnv.pathj   s     zzr   c                .    | j                   j                  S )z8The python executable of the isolated build environment.)rE   r   r   s    r   r   z$DefaultIsolatedEnv.python_executableo   s       222r   c                    t         j                  j                  d      }d|6t         j                  j	                  | j
                  j                  |g      iS | j
                  j                  iS )NPATH)r@   environgetpathsepjoinrE   scripts_dirrN   s     r   r   z%DefaultIsolatedEnv.make_extra_environt   se    zz~~f% JJOOT%6%6%B%BD$IJ
 	
 ""..
 	
r   c           	         |syt        j                  ddj                  d t        |      D              z          | j                  j                  |       y)at  
        Install packages from PEP 508 requirements in the isolated build environment.

        :param requirements: PEP 508 requirement specification to install

        :note: Passing non-PEP 508 strings will result in undefined behavior, you *should not* rely on it. It is
               merely an implementation detail, it may change any time without warning.
        Nz-Installing packages in isolated environment:

c              3  &   K   | ]	  }d |   yw)z- Nr   ).0rs     r   	<genexpr>z-DefaultIsolatedEnv.install.<locals>.<genexpr>   s     Mu[\PRSTRUhMus   )r   rG   r\   sortedrE   install_requirementsr   requirementss     r   installzDefaultIsolatedEnv.install|   sF     ADIIMu`fgs`tMuDuuv..|<r   N)r7   	Installerr   None)r   r5   )rT   objectr   rj   r   )r   zdict[str, str]rg   zCollection[str]r   rj   )r   r   r   r   r:   rO   rK   r    rA   r   r   rh   r   r   r   r5   r5   >   sa      %. . 
	.8&   3 3
=r   r5   c                  D    e Zd ZU ded<   ded<   ddZd	dZed
d       Zy)_EnvBackendr   r   r]   c                     y r9   r   rN   s     r   rI   z_EnvBackend.create   r   r   c                     y r9   r   rf   s     r   re   z _EnvBackend.install_requirements   r   r   c                     y r9   r   r   s    r   rH   z_EnvBackend.display_name   s    #&r   NrA   r   r   rj   rl   r   )r   r   r   __annotations__rI   re   r    rH   r   r   r   rn   rn      s"    ,N& &r   rn   c                      e Zd Zd	dZej
                  d
d       Zej
                  dd       Zedd       Z	ddZ
ddZedd       Zy)rF   c                D    | j                    xr | j                  | _        y r9   )_has_valid_outer_pip_has_virtualenv_create_with_virtualenvr   s    r   r:   z_PipBackend.__init__   s    +/+D+D'D']I]I]$r   c                    t        dd      syt        j                         5  t        j                  d       t        j
                  j                  d      
	 ddd       y	 ddd       y# 1 sw Y   yxY w)z
        This checks for a valid global pip. Returns None if pip is missing, False
        if pip is too old, and True if it can be used.
        r   z22.3Fignorezpip._vendorNT)r3   warningscatch_warningssimplefilterr&   util	find_specr   s    r   rv   z _PipBackend._has_valid_outer_pip   sl     uf- $$& 	!!(+~~''6>	 	>	
 	
 s   6A++A4c                    ddl m dt        j                  j	                        duxr# t        fdt        d d      D               S )z
        virtualenv might be incompatible if it was installed separately
        from build. This verifies that virtualenv and all of its
        dependencies are installed as required by build.
        r   )Requirement
virtualenvNc              3  l   K   | ]+  }t        |      d kD  s |d          j                  k(   - yw)r   N)lenr'   )ra   dr   r'   s     r   rc   z._PipBackend._has_virtualenv.<locals>.<genexpr>   s;      F
/0Z]^_Z`cdZdK!""d*F
s   44zbuild[])packaging.requirementsr   r&   r~   r   anyr
   )r   r   r'   s    @@r   rw   z_PipBackend._has_virtualenv   sY     	7~~''-T9 
# F
4DvdVSTEU4VF
 C
 ?
 	
r   c                     t        j                         dk(  rCt        j                         \  } }}t        | d | j	                  d             dk\  r|dk7  }|rdS dS y)NDarwin.   x86_64z21.0.1z20.3.0z19.1.0)platformsystemmac_verintfind)release_machineis_apple_silicon_pythons       r   _get_minimum_pip_version_strz(_PipBackend._get_minimum_pip_version_str   sc    ??("*"2"2"4GQ7.W\\#./0B6 +2X*='#:xHH r   c                   | j                   rdd l}dd l}ddlm} |j
                  j                  |j                  j                  d            }|ddddg}||j
                  j                  d	      k  r|j                  d
       |j                  |d      }t        |j                  j                        | _        t        |j                  j                        | _        y dd l}| j"                   }		 |j%                  t'               |	      j)                  |       t5        |      \  | _        | _        }|	rg| j7                         }t9        d||g      st;        | j                  dddd| g       t9        d|g      rt;        | j                  dddddg       y y y # t*        j,                  $ r'}
t/        j0                  |
       t3        |
d      d d }
~
ww xY w)Nr   r   r%   r   z--activators z--no-setuptoolsz--no-periodic-updatez20.31.0z
--no-wheelF)setup_loggingsymlinkswith_pipz7Failed to create venv. Maybe try installing virtualenv.r   )rA   -Imrh   zpip>=
setuptools	uninstallz-y)rx   r(   r   r)   r&   r/   r$   r,   appendcli_runr   creatorexer   
script_dirr]   venvrv   
EnvBuilder_fs_supports_symlinkrI   
subprocessCalledProcessErrorr   log_subprocess_errorr	   _find_executable_and_scriptsr   r3   r   )r   rA   	packagingr   r&   virtualenv_veroptsresultr   r   excpurelibminimum_pip_version_strs                r   rI   z_PipBackend.create   s   ''$*&..66y7I7I7Q7QR^7_`N !&D 	 1 1 9 9) DDL)''E'BF &)););%<D""6>>#<#<=D 444Hs)=)?(SZZ[_`
 A]]a@b=D"D$4g*.*K*K*M'&+!
 #D$:$:E5)W\]t\uUv#wx # ! #D$:$:E5+W[]i#jk	  00 s))#.(.ghnrrss   3*F   G3"GGc           	        t        j                  ddddd      5 }|j                  t        j                  j                  |             d d d        	 | j                  r t        j                  ddd	| j                  g}n| j                  d
dg}t        j                  dkD  r|ddt        j                  dz
  z   gz  }|dddddt        j                  j                  j                        gz  }t        |       t        j                   |j                         y # 1 sw Y   xY w# t        j                   j                         w xY w)Nwzbuild-reqs-z.txtFzutf-8)r=   suffixdeleteencodingz-mr   z--pythonr   r   -vrh   z--use-pep517z--no-warn-script-locationz--no-compilez-r)r>   NamedTemporaryFilewriter@   linesepr\   rv   rL   
executabler   r   	verbosityrA   abspathr'   r   unlink)r   rg   req_filecmds       r   re   z _PipBackend.install_requirements  s    ((]6Z_jqr 	:v~NN2::??<89	:	%((~~tUJ@V@VW--ue<~~!!C4>>A#567899+. C 3 IIhmm$/	: 	:. IIhmm$s   /DB(D' D$'!Ec                "    | j                   rdS dS )Nzvirtualenv+pipzvenv+pip)rx   r   s    r   rH   z_PipBackend.display_name#  s    #'#?#?OZOr   N)r   rj   )r   bool | Noner   boolr   rr   rl   )r   r   r   r:   	functoolscached_propertyrv   rw   staticmethodr   rI   re   r    rH   r   r   r   rF   rF      sr    ^  * 
 
  6lp%8 P Pr   rF   c                  .    e Zd ZddZddZedd       Zy)rD   c                   dd l }|| _        	 dd l}|j                         | _        |j                  t               d      j                  | j                         t        | j                        \  | _        | _        }y # t
        t        f$ rG t        j                  d      }|d}t        |      d t        j                  d|        || _        Y w xY w)Nr   r   zuv executable not foundzUsing external uv from Fr   )r   	_env_pathr   find_uv_bin_uv_binModuleNotFoundErrorFileNotFoundErrorrR   whichRuntimeErrorr   rG   r   r   rI   r   r   r]   )r   rA   r   r   uv_binmsgr   s          r   rI   z_UvBackend.create)  s    	">>+DL 	!5!7%HOOPTP^P^_6RSWSaSa6b3 0! $%67 	"\\$'F~/"3'T1HH.vh78!DL	"s   A> >ACCc                    | j                   dg}t        j                  dkD  r'|ddt        dt        j                  dz
        z   gz  }t	        g |d|i t
        j                  d| j                  i       y )	Nr   r   r   r      rh   VIRTUAL_ENV)env)r   r   r   minr   r@   rY   r   )r   rg   r   s      r   re   z_UvBackend.install_requirements>  sx    ||U#>>Aac!T^^a%7889:;;C77i7,7=j

=jM[_[i[i=jkr   c                     y)Nzvenv+uvr   r   s    r   rH   z_UvBackend.display_nameD  s    r   Nrr   rl   r   )r   r   r   rI   re   r    rH   r   r   r   rD   rD   (  s"    c*l  r   rD   c                 >   t         j                  dk7  ryt        j                  d      5 } |  d}	 t        j                  | j                  |       t        j
                  |       	 ddd       y# t        t        t        f$ r Y ddd       yw xY w# 1 sw Y   yxY w)z%Return True if symlinks are supportedntTzbuild-symlink-r<   z-bNF)	r@   r'   r>   r   symlinkr   OSErrorNotImplementedErrorAttributeError)tmp_filedests     r   r   r   I  s     
ww$ 
	$	$,<	= 2	JJx}}d+IIdO  
 ,n= 	 
	 s.   B5A1'B1BBBBBc                2   t        j                         j                         }| |d<   t        j                         }d|v rt        j                  d|      }nNd|v rt        j                  d|      }n2d|v rt        j                  d|      }nt        j                  |      }t
        j                  j                  |d   t
        j                  d	k(  rd
nd      }t
        j                  j                  |      sd| d}t        |      ||d   |d   fS )z
    Detect the Python executable and script folder of a virtual environment.

    :param path: The location of the virtual environment
    :return: The Python executable, script folder, and purelib folder
    baser   )schemevarsposix_localposix_prefixosx_framework_library)r   scriptsr   z
python.exepythonz0Virtual environment creation failed, executable z missingr   )	sysconfigget_config_varscopyget_scheme_names	get_pathsr@   rA   r\   r'   rQ   r   )rA   config_varsscheme_namespathsr   r   s         r   r   r   [  s     ++-224KK--/L ##6D	,	& ##>L	 L	0 ##>L##5eI.4U]^J77>>*%@HU3uY'y)999r   r9   )r'   r   r0   z
str | Noner1   rk   r   r   r   )rA   r   r   ztuple[str, str, str])(
__future__r   r!   r   importlib.utilr&   r@   r   rR   r   rL   r   r>   typingr{   collections.abcr   r   r   r   r   _exceptionsr	   _utilr
   Literalri   get_args
INSTALLERSProtocolr   r3   r5   rn   rF   rD   cacher   r   __all__r   r   r   <module>r     s    " 
   	    
     /    + # NN;'	V__Y'

Q&// 
QI(K= K=\	'&// 	'MP+ MP` B  "(:X r   