
    yIf~                        d Z ddlmZ ddl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lmZ dd	lmZmZmZmZ dd
lmZ ddlmZ ddlmZ e	rddlmZ ddlmZ  G d de          Z G d de          ZdS )zlA executor that reuses a single subprocess for all backend calls (saving on python startup/import overhead).    )annotationsN)TimeoutExpired)Lock)TYPE_CHECKINGSequence)BackendFailed)ExecuteRequest)ExecuteExecuteInstanceExecuteOptionsExecuteStatus)LocalSubProcessExecuteInstance)StdinSource)	SyncWrite)Path)TracebackTypec                  T     e Zd ZdZd fdZddZd dZed!d            Zd"dZ	 xZ
S )#LocalSubProcessPep517Executorz%Executor holding the backend process.coloredboolcmdSequence[str]envdict[str, str]cwdr   returnNonec                    t                                          |           || _        || _        || _        d | _        d | _        d| _        d S )NF)super__init__r   r   r   _local_execute_excis_alive)selfr   r   r   r   	__class__s        N/var/www/piapp/venv/lib/python3.11/site-packages/tox/execute/pep517_backend.pyr    z&LocalSubProcessPep517Executor.__init__   sJ    !!![_&*	#    requestr	   optionsr   outr   errr   c           	     N    t          |||||                     |                    S N)$LocalSubProcessPep517ExecuteInstancelocal_execute)r$   r(   r)   r*   r+   s        r&   build_instancez,LocalSubProcessPep517Executor.build_instance#   s*     4GWc3PTPbPbcjPkPklllr'   4tuple[LocalSubProcessExecuteInstance, ExecuteStatus]c           
     Z   | j         | j         | j        t          | j        | j        | j        t          j        d          }t          ||t          dd d           t          dd d           d          }|
                                }||f| _        	 d	|j        v rd| _        nd
|j        v raddlm} t!          dddd|j                                        |j                                                  } ||          | _         | j         t%          j        d           | j        S )Npep517)r   r   r   stdinrun_idz
pep517-out)nametargetcolorz
pep517-errF)r(   r)   r*   r+   on_exit_drainTs   started backend s   failed to start backendr   )ToxBackendFailedFailedToStartzcould not start backend)codeexc_typeexc_msg)resultr*   r+   g{Gz?)r"   r!   r	   r   r   r   r   APIr   r   	__enter__r*   r#   r+   0tox.tox_env.python.virtual_env.package.pyprojectr:   r   decodetimesleep)r$   r)   r(   instancestatusr:   failures          r&   r/   z+LocalSubProcessPep517Executor.local_execute,   s_   9 )O&$txTXU`UdmuvvvG5<DIII<DIII#  H ''))F"*F"2D!&&*44$(DM-;;aaaaaa+$&(7'@   
 #J--//"J--//  G !1 0 9 9DI)O
4   %!& ""r'   into	bytearraycontentbytesc                0    |                      |           dS )zIgnore content generated.N)extend)rJ   rL   s     r&   _handlerz&LocalSubProcessPep517Executor._handlerP   s     	Gr'   c                $   | j         | j         \  }}|                    d d d            |j        R|j        j        F	 |j                            d           n)# t
          $ r |j                                         Y nw xY wd | _         d| _        d S )Ng?)timeoutF)r!   __exit__process
returncodewaitr   	terminater#   )r$   execute_statuss      r&   closez#LocalSubProcessPep517Executor.closeU   s    *#2GWT4...*w/I/Q0O(((5555% 0 0 0O--/////0"&Ds   A #A?>A?)
r   r   r   r   r   r   r   r   r   r   )
r(   r	   r)   r   r*   r   r+   r   r   r   )r)   r   r   r1   )rJ   rK   rL   rM   r   r   r   r   )__name__
__module____qualname____doc__r    r0   r/   staticmethodrP   rZ   __classcell__r%   s   @r&   r   r      s        //$ $ $ $ $ $m m m m"# "# "# "#H    \
 
 
 
 
 
 
 
r'   r   c                  T     e Zd ZdZd fdZedd            ZddZddZddZ	 xZ
S )r.   zA backend invocation.r(   r	   r)   r   r*   r   r+   instance_statusr1   r   r   c                    t                                          ||||           |\  | _        | _        t	                      | _        d S r-   )r   r    	_instancerY   r   _lock)r$   r(   r)   r*   r+   rd   r%   s         r&   r    z-LocalSubProcessPep517ExecuteInstance.__init__e   s@     	'3444'6$VV


r'   r   c                    | j         j        S r-   )rf   r   r$   s    r&   r   z(LocalSubProcessPep517ExecuteInstance.cmdq   s    ~!!r'   r   c                j    | j                                          |                                  | j        S r-   )rg   acquire_swap_out_errrY   ri   s    r&   rB   z.LocalSubProcessPep517ExecuteInstance.__enter__u   s0    
|r'   r>   type[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonec                `    |                                   | j                                         d S r-   )rl   rg   release)r$   r>   rn   rp   s       r&   rS   z-LocalSubProcessPep517ExecuteInstance.__exit__z   s0     	
r'   c                    | j         | j        }}| j                            ||          \  | _         | _        | j                            ||           d S r-   )_out_errrf   set_out_errrY   )r$   r*   r+   s      r&   rl   z2LocalSubProcessPep517ExecuteInstance._swap_out_err   sM    9diS#~99#sCC	49  c*****r'   )r(   r	   r)   r   r*   r   r+   r   rd   r1   r   r   )r   r   )r   r   )r>   rm   rn   ro   rp   rq   r   r   r[   )r\   r]   r^   r_   r    propertyr   rB   rS   rl   ra   rb   s   @r&   r.   r.   b   s        
 
 
 
 
 
 " " " X"   
   + + + + + + + +r'   r.   ) r_   
__future__r   rE   
subprocessr   	threadingr   typingr   r   pyproject_apir   tox.executer	   tox.execute.apir
   r   r   r   tox.execute.local_sub_processr   tox.execute.requestr   tox.execute.streamr   pathlibr   typesr   r   r.    r'   r&   <module>r      ss   r r " " " " " "  % % % % % %       * * * * * * * * ' ' ' ' ' ' & & & & & & S S S S S S S S S S S S H H H H H H + + + + + + ( ( ( ( ( ( $######H H H H HG H H HV&+ &+ &+ &+ &+? &+ &+ &+ &+ &+r'   