
    Zi7                       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j        d	         Z ej        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j$        d$d            Z%d%d!Z&ddgZ'dS )&    )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dS )
IsolatedEnvzIsolated build environment ABC.returnstrc                    dS )z2The Python executable of the isolated environment.N selfs    D/root/projects/butler/venv/lib/python3.11/site-packages/build/env.pypython_executablezIsolatedEnv.python_executable              Mapping[str, str] | Nonec                    dS )zBGenerate additional env vars specific to the isolated environment.Nr   r   s    r   make_extra_environzIsolatedEnv.make_extra_environ%   r   r   Nr   r   )r   r   )	__name__
__module____qualname____doc__propertyabcabstractmethodr   r   r   r   r   r   r      st        ))A A A  XA 	Q Q Q Q Q Qr   r   namer   minimum_version_str
str | Nonedistargsobjectr   bool | Nonec          	         ddl m} ddlm} 	 t	          t           |j        j        dd| i|                    }n# t          $ r Y dS w xY w|dS  ||j	                   ||          k    S )	z
    Given a distribution name, see if it 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   	importlibr$   NTr   )
packaging.versionr+   _compatr-   nextitermetadatadistributionsStopIterationversion)r$   r%   r'   r+   r-   distributions         r   _has_dependencyr7   *   s    
 *)))))""""""D!A!3!A!X!Xt!Xx!X!XYYZZ   tt "t7<'((GG4G,H,HHHs   .= 
A
Ac                  p    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dS )DefaultIsolatedEnvz[
    Isolated environment which supports several different underlying implementations.
    r   	installerr;   	Installerr   Nonec                   || _         d S Nr:   )r   r;   s     r   __init__zDefaultIsolatedEnv.__init__C   s    
 %.r   c                   	 t          j        d          }t          j                            |          }|| _        |  | j        dk    rt                      | _        nt                      | _        t          j        d| j        j         d           | j                            | j                   n*# t          $ r  | j        t!          j                       w xY w| S )Nz
build-env-prefixr   zCreating isolated environment: z...)tempfilemkdtempospathrealpath_pathr;   
_UvBackend_env_backend_PipBackendr   logdisplay_namecreate	Exception__exit__sysexc_infor   rG   s     r   	__enter__zDefaultIsolatedEnv.__enter__J   s    	#<888D 7##D))DDJ* ~%%$.LL!!$/MM!HZt7H7UZZZ[[[$$TZ0000 	 	 	DM3<>>**	 s   B0B3 3'Cargsr(   c                    t           j                            | j                  rt	          j        | j                   d S d S r?   )rF   rG   existsrI   shutilrmtree)r   rV   s     r   rQ   zDefaultIsolatedEnv.__exit__f   s<    7>>$*%% 	&M$*%%%%%	& 	&r   r   c                    | j         S )z/The location of the isolated build environment.)rI   r   s    r   rG   zDefaultIsolatedEnv.pathj   s     zr   c                    | j         j        S )z8The python executable of the isolated build environment.)rK   r   r   s    r   r   z$DefaultIsolatedEnv.python_executableo   s      22r   dict[str, str]c                    t           j                            d          }d|+t           j                            | j        j        |g          n| j        j        iS )NPATH)rF   environgetpathsepjoinrK   scripts_dirrT   s     r   r   z%DefaultIsolatedEnv.make_extra_environt   sR    z~~f%% JOOT%6%BD$IJJJ".
 	
r   requirementsCollection[str]c           	         |sdS t          j        dd                    d t          |          D                       z              | j                            |           dS )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 | V  
dS )z- Nr   ).0rs     r   	<genexpr>z-DefaultIsolatedEnv.install.<locals>.<genexpr>   s*      MuMu[\hSThhMuMuMuMuMuMur   )r   rM   rc   sortedrK   install_requirementsr   re   s     r   installzDefaultIsolatedEnv.install|   si      	FADIIMuMu`fgs`t`tMuMuMuDuDuuvvv..|<<<<<r   N)r;   r<   r   r=   )r   r9   )rV   r(   r   r=   r   )r   r]   re   rf   r   r=   )r   r   r   r    r@   rU   rQ   r!   rG   r   r   rp   r   r   r   r9   r9   >   s           %. . . . . .   8& & & &    X 3 3 3 X3
 
 
 
= = = = = =r   r9   c                  L    e Zd ZU ded<   ded<   ddZdd
Zedd            ZdS )_EnvBackendr   r   rd   rG   r   r=   c                    d S r?   r   rT   s     r   rO   z_EnvBackend.create   r   r   re   rf   c                    d S r?   r   ro   s     r   rn   z _EnvBackend.install_requirements   r   r   c                    d S r?   r   r   s    r   rN   z_EnvBackend.display_name   s    #&3r   NrG   r   r   r=   rq   r   )r   r   r   __annotations__rO   rn   r!   rN   r   r   r   rs   rs      sX         ,,,,NNNN&&& X&&&r   rs   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dS )rL   r   r=   c                .    | j          o| j        | _        d S r?   )_has_valid_outer_pip_has_virtualenv_create_with_virtualenvr   s    r   r@   z_PipBackend.__init__   s    +/+D'D']I]$$$r   r)   c                   t          dd          sdS t          j                    5  t          j        d           t          j                            d          	 ddd           dS 	 ddd           n# 1 swxY w Y   dS )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)r7   warningscatch_warningssimplefilterr-   util	find_specr   s    r   r{   z _PipBackend._has_valid_outer_pip   s     uf-- 	5 $&& 	 	!(+++~''66>	 	 	 	 	 	 	 	>	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ts   5A55A9<A9boolc                    ddl m dt          j                                      duo-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  r   K   | ]1}t          |          d k     |d                    j        k    V  2dS )r   N)lenr$   )rj   dr   r$   s     r   rl   z._PipBackend._has_virtualenv.<locals>.<genexpr>   s[       F
 F
/0Z]^_Z`Z`cdZdZdKK!"d*ZdZdZdZdF
 F
r   zbuild[])packaging.requirementsr   r-   r   r   anyr
   )r   r   r$   s    @@r   r|   z_PipBackend._has_virtualenv   s     	766666~''--T9 
# F
 F
 F
 F
 F
4DEUdEUEUEU4V4VF
 F
 F
 C
 C
 ?
 	
r   r   c                     t          j                    dk    rQt          j                    \  } }}t          | d |                     d                             dk    r|dk    }|rdndS dS )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   sw    ?(("*"2"4"4GQ7.W\\#.../00B66 +2X*='#:HxxH xr   rG   c                   | j         rdd l}dd l}ddlm} |j                            |j                            d                    }|ddddg}||j                            d	          k     r|                    d
           |	                    |d          }t          |j        j                  | _        t          |j        j                  | _        d S dd l}| j         }		 |                    t'                      |	                              |           n<# t*          j        $ r*}
t/          j        |
           t3          |
d          d d }
~
ww xY wt5          |          \  | _        | _        }|	rq|                                 }t9          d||g          st;          | j        dddd| g           t9          d|g          rt;          | j        dddddg           d S d S d S )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   )rG   -Imrp   zpip>=
setuptools	uninstallz-y)r}   r.   r   r/   r-   r5   r+   r2   appendcli_runr   creatorexer   
script_dirrd   venvr{   
EnvBuilder_fs_supports_symlinkrO   
subprocessCalledProcessErrorr   log_subprocess_errorr	   _find_executable_and_scriptsr   r7   r   )r   rG   	packagingr   r-   virtualenv_veroptsresultr   r   excpurelibminimum_pip_version_strs                r   rO   z_PipBackend.create   so   ' 5	l$$$$******&.66y7I7Q7QR^7_7_``N !&D 	 1 9 9) D DDDL)))''E'BBF &));%<%<D""6>#<==D KKK44Hs)=)?)?(SSZZ[_````0 s s s)#...(.ghhnrrs A]]a@b@b=D"D$4g l*.*K*K*M*M'&+!   y
 #D$:E5)Uv]tUvUv#wxxx # !   l #D$:E5+W[]i#jkkkkkl ll ls   $6D E*%EEre   rf   c           	     V   t          j        ddddd          5 }|                    t          j                            |                     d d d            n# 1 swxY w Y   	 | j        rt          j        ddd	| j	        g}n
| j	        d
dg}t          j        dk    r|ddt          j        dz
  z   gz  }|dddddt          j                            |j                  gz  }t          |           t          j        |j                   d S # t          j        |j                   w xY w)Nwzbuild-reqs-z.txtFzutf-8)rC   suffixdeleteencodingz-mr   z--pythonr   r   -vrp   z--use-pep517z--no-warn-script-locationz--no-compilez-r)rD   NamedTemporaryFilewriterF   lineseprc   r{   rR   
executabler   r   	verbosityrG   abspathr$   r   unlink)r   re   req_filecmds       r   rn   z _PipBackend.install_requirements  sm    (]6Z_jqrrr 	:v~NN2:??<88999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:	%( =~tUJ@VW-ue<~!!8C4>A#568899+.. C 3 Ihm$$$$$BIhm$$$$s   3AA A%BD D(c                    | j         rdndS )Nzvirtualenv+pipzvenv+pip)r}   r   s    r   rN   z_PipBackend.display_name#  s    #'#?OZOr   N)r   r=   )r   r)   r   r   r   rw   rq   )r   r   r   r@   	functoolscached_propertyr{   r|   staticmethodr   rO   rn   r!   rN   r   r   r   rL   rL      s        ^ ^ ^ ^    * 
 
 
 
    \6l 6l 6l 6lp% % % %8 P P P XP P Pr   rL   c                  6    e Zd ZddZddZedd	            Zd
S )rJ   rG   r   r   r=   c                   dd l }|| _        	 dd l}|                                | _        n|# t
          t          f$ rh t          j        t          j
                            d          pd          }|d}t          |          d t          j        d|            || _        Y nw xY w|                    t!                      d                              | j                   t%          | j                  \  | _        | _        }d S )Nr   UVr   zuv executable not foundzUsing external uv from Fr   )r   	_env_pathr   find_uv_bin_uv_binModuleNotFoundErrorFileNotFoundErrorrY   whichrF   r`   ra   RuntimeErrorr   rM   r   r   rO   r   r   rd   )r   rG   r   r   uv_binmsgr   s          r   rO   z_UvBackend.create)  s   	"III>>++DLL#%67 	" 	" 	"\"*.."6"6">$??F~/"3''T1H7v77888!DLLL	" 	!5!7!7%HHOOPTP^___6RSWSa6b6b3 0!!!s   + A6B$#B$re   rf   c                    | j         dg}t          j        dk    r'|ddt          dt          j        dz
            z   gz  }t	          g |d|i t
          j        d| j        i           d S )	Nr   r   r   r      rp   VIRTUAL_ENV)env)r   r   r   minr   rF   r`   r   )r   re   r   s      r   rn   z_UvBackend.install_requirements>  s    |U#>A:c!T^a%7888::;;C77i7,7=j
=jM[_[i=j=jkkkkkkr   c                    dS )Nzvenv+uvr   r   s    r   rN   z_UvBackend.display_nameD  s    yr   Nrw   rq   r   )r   r   r   rO   rn   r!   rN   r   r   r   rJ   rJ   (  sd        c c c c*l l l l    X  r   rJ   r   c                 D   t           j        dk    rdS t          j        d          5 } |  d}	 t          j        | j        |           t          j        |           n)# t          t          t          f$ r Y ddd           dS w xY w	 ddd           dS # 1 swxY w Y   dS )z%Return True if symlinks are supportedntTzbuild-symlink-rB   z-bNF)	rF   r$   rD   r   symlinkr   OSErrorNotImplementedErrorAttributeError)tmp_filedests     r   r   r   I  s    
w$t 
	$,<	=	=	= 	Jx}d+++IdOOOO,n= 	 	 	       
	                 s4   B.ABB5BBBBBrG   tuple[str, str, str]c                B   t          j                                                    }| |d<   t          j                    }d|v rt          j        d|          }nKd|v rt          j        d|          }n0d|v rt          j        d|          }nt          j        |          }t
          j                            |d         t
          j        d	k    rd
nd          }t
          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_pathsrF   rG   rc   r$   rX   r   )rG   config_varsscheme_namespathsr   r   s         r   r   r   [  s)    +--2244KK-//L #6DDD	,	&	& #>LLL	 L	0	0 #>LLL#555eI.4U]^^J7>>*%%  UUUU3uY'y)999r   r?   )r$   r   r%   r&   r'   r(   r   r)   r   )rG   r   r   r   )(
__future__r   r"   r   importlib.utilr-   rF   r   rY   r   rR   r   rD   typingr   collections.abcr   r   r   r   r   _exceptionsr	   _utilr
   Literalr<   get_args
INSTALLERSProtocolr   r7   r9   rs   rL   rJ   cacher   r   __all__r   r   r   <module>r     so   " " " " " " 



         				       



        / / / / / / / /                   + + + + + + # # # # # # N;'	V_Y''

Q 
Q 
Q 
Q 
Q&/ 
Q 
Q 
QI I I I I(K= K= K= K= K= K= K= K=\	' 	' 	' 	' 	'&/ 	' 	' 	'MP MP MP MP MP+ MP MP MP`       B    "(: (: (: (:X r   