
    Rh"                         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  G d dej                        Z	 G d d	ej                        Z G d
 deej                        Zy)    N   )	protocols)
transports)loggerc                        e Zd Z	 d fd	Zd Zd Zd Zd Zd Zd Z	e
j                  fdZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )BaseSubprocessTransportc           
      n   t         |   |
       d| _        || _        || _        d | _        d | _        d | _        g | _        t        j                         | _        i | _        d| _        |t        j                  k(  rd | j                  d<   |t        j                  k(  rd | j                  d<   |t        j                  k(  rd | j                  d<   	  | j                   d||||||d| | j
                  j$                  | _        | j
                  | j&                  d<   | j                  j)                         r?t+        |t,        t.        f      r|}n|d   }t1        j2                  d|| j                         | j                  j5                  | j7                  |	             y #  | j#                           xY w)	NFr   r      )argsshellstdinstdoutstderrbufsize
subprocesszprocess %r created: pid %s )super__init___closed	_protocol_loop_proc_pid_returncode_exit_waiterscollectionsdeque_pending_calls_pipes	_finishedr   PIPE_startclosepid_extra	get_debug
isinstancebytesstrr   debugcreate_task_connect_pipes)selfloopprotocolr   r   r   r   r   r   waiterextrakwargsprogram	__class__s                ./usr/lib/python3.12/asyncio/base_subprocess.pyr   z BaseSubprocessTransport.__init__   sx    	!

	)//1JOO#!DKKNZ__$!DKKNZ__$!DKKN	DKK BTeF%wB:@B JJNN	$(JJL!::!$-q'LL5 $))- 	

t226:;	JJLs   F! !F4c                 ^   | j                   j                  g}| j                  r|j                  d       | j                  |j                  d| j                          | j
                  |j                  d| j
                          n/| j                  |j                  d       n|j                  d       | j                  j                  d      }||j                  d|j                          | j                  j                  d      }| j                  j                  d	      }|#||u r|j                  d
|j                          n@||j                  d|j                          ||j                  d|j                          dj                  dj                  |            S )Nclosedzpid=zreturncode=runningznot startedr   zstdin=r   r
   zstdout=stderr=zstdout=zstderr=z<{}> )r4   __name__r   appendr   r   r   getpipeformatjoin)r-   infor   r   r   s        r5   __repr__z BaseSubprocessTransport.__repr__7   sX   ''(<<KK!99 KK$tyyk*+'KK+d&6&6%789YY"KK	"KK&"KK&-.##&F"2KK.67!gfkk]34!gfkk]34}}SXXd^,,    c                     t         N)NotImplementedError)r-   r   r   r   r   r   r   r2   s           r5   r"   zBaseSubprocessTransport._startT   s    !!rB   c                     || _         y rD   r   )r-   r/   s     r5   set_protocolz$BaseSubprocessTransport.set_protocolW   s	    !rB   c                     | j                   S rD   rG   r-   s    r5   get_protocolz$BaseSubprocessTransport.get_protocolZ   s    ~~rB   c                     | j                   S rD   )r   rJ   s    r5   
is_closingz"BaseSubprocessTransport.is_closing]   s    ||rB   c                    | j                   ry d| _         | j                  j                         D ]  }||j                  j	                          ! | j
                  t| j                  g| j
                  j                         L| j                  j                         rt        j                  d|        	 | j
                  j                          y y y y # t        $ r Y y w xY w)NTz$Close running child process: kill %r)r   r   valuesr=   r#   r   r   pollr   r&   r   warningkillProcessLookupError)r-   protos     r5   r#   zBaseSubprocessTransport.close`   s    <<[['') 	E}JJ	
 JJ"  ( 

!)zz##%EtL

! * ) # & s   4C 	CCc                 b    | j                   s# |d| t        |        | j                          y y )Nzunclosed transport )source)r   ResourceWarningr#   )r-   _warns     r5   __del__zBaseSubprocessTransport.__del__{   s+    ||'x0/$OJJL rB   c                     | j                   S rD   )r   rJ   s    r5   get_pidzBaseSubprocessTransport.get_pid   s    yyrB   c                     | j                   S rD   )r   rJ   s    r5   get_returncodez&BaseSubprocessTransport.get_returncode   s    rB   c                 R    || j                   v r| j                   |   j                  S y rD   )r   r=   )r-   fds     r5   get_pipe_transportz*BaseSubprocessTransport.get_pipe_transport   s%    ;;r?'''rB   c                 0    | j                   
t               y rD   )r   rS   rJ   s    r5   _check_procz#BaseSubprocessTransport._check_proc   s    ::$&& rB   c                 Z    | j                          | j                  j                  |       y rD   )rb   r   send_signal)r-   signals     r5   rd   z#BaseSubprocessTransport.send_signal   s     

v&rB   c                 X    | j                          | j                  j                          y rD   )rb   r   	terminaterJ   s    r5   rg   z!BaseSubprocessTransport.terminate   s    

rB   c                 X    | j                          | j                  j                          y rD   )rb   r   rR   rJ   s    r5   rR   zBaseSubprocessTransport.kill   s    

rB   c                    K   	  j                   } j                  }|j                  9|j                   fd|j                         d {   \  }}| j                  d<   |j
                  9|j                   fd|j
                         d {   \  }}| j                  d<   |j                  9|j                   fd|j                         d {   \  }}| j                  d<    j                  J |j                   j                  j                           j                  D ]  \  }} |j                  |g|   d  _        |#|j                         s|j                  d        y y y 7 )7 7 # t        t        f$ r  t         $ r7}|+|j                         s|j#                  |       Y d }~y Y d }~y Y d }~y d }~ww xY ww)Nc                      t         d      S )Nr   )WriteSubprocessPipeProtorJ   s   r5   <lambda>z8BaseSubprocessTransport._connect_pipes.<locals>.<lambda>   s    4T1= rB   r   c                      t         d      S )Nr   ReadSubprocessPipeProtorJ   s   r5   rl   z8BaseSubprocessTransport._connect_pipes.<locals>.<lambda>       3D!< rB   r   c                      t         d      S )Nr
   rn   rJ   s   r5   rl   z8BaseSubprocessTransport._connect_pipes.<locals>.<lambda>   rp   rB   r
   )r   r   r   connect_write_piper   r   connect_read_piper   r   	call_soonr   connection_made	cancelled
set_result
SystemExitKeyboardInterruptBaseExceptionset_exception)	r-   r0   procr.   _r=   callbackdataexcs	   `        r5   r,   z&BaseSubprocessTransport._connect_pipes   s    #	(::D::Dzz% $ 7 7=JJ!   4 "&A{{& $ 6 6<KK!! !4 "&A{{& $ 6 6<KK!! !4 "&A&&222NN4>>994@"&"5"5 0$x/$/0"&D !&*:*:*<!!$' +=!; !! -. 	 	*!&*:*:*<$$S)) +=!	*sh   GAE; E4AE; E7AE; E9A8E; &G4E; 7E; 9E; ;G
#G6GG

Gc                     | j                   | j                   j                  ||f       y  | j                  j                  |g|  y rD   )r   r;   r   rt   )r-   cbr   s      r5   _callzBaseSubprocessTransport._call   s?    *&&Dz2 DJJ  +d+rB   c                 r    | j                  | j                  j                  ||       | j                          y rD   )r   r   pipe_connection_lost_try_finish)r-   r_   r   s      r5   _pipe_connection_lostz-BaseSubprocessTransport._pipe_connection_lost   s(    

4>>66C@rB   c                 R    | j                  | j                  j                  ||       y rD   )r   r   pipe_data_received)r-   r_   r   s      r5   _pipe_data_receivedz+BaseSubprocessTransport._pipe_data_received   s    

4>>44b$?rB   c                 x   |J |       | j                   J | j                          | j                  j                         rt        j                  d| |       || _         | j
                  j                  || j
                  _        | j                  | j                  j                         | j                          y )Nz%r exited with return code %r)r   r   r&   r   r@   r   
returncoder   r   process_exitedr   )r-   r   s     r5   _process_exitedz'BaseSubprocessTransport._process_exited   s    %1z1%'9)9)99'::!KK7zJ%::  ( %/DJJ!

4>>001rB   c                    K   | j                   | j                   S | j                  j                         }| j                  j	                  |       | d{   S 7 w)zdWait until the process exit and return the process return code.

        This method is a coroutine.N)r   r   create_futurer   r;   )r-   r0   s     r5   _waitzBaseSubprocessTransport._wait   sP      '###))+!!&)||s   AAAAc                     | j                   rJ | j                  y t        d | j                  j	                         D              r$d| _         | j                  | j                  d        y y )Nc              3   @   K   | ]  }|d uxr |j                     y wrD   )disconnected).0ps     r5   	<genexpr>z6BaseSubprocessTransport._try_finish.<locals>.<genexpr>   s(      . }// .s   T)r    r   allr   rO   r   _call_connection_lostrJ   s    r5   r   z#BaseSubprocessTransport._try_finish   s`    >>!!# .**,. .!DNJJt1148.rB   c                    	 | j                   j                  |       | j                  D ].  }|j                         r|j	                  | j
                         0 d | _        d | _        d | _        d | _         y # | j                  D ].  }|j                         r|j	                  | j
                         0 d | _        d | _        d | _        d | _         w xY wrD   )r   connection_lostr   rv   rw   r   r   r   )r-   r   r0   s      r5   r   z-BaseSubprocessTransport._call_connection_lost   s    
	"NN**3/ ,, 8'')%%d&6&678 "&DDJDJ!DN ,, 8'')%%d&6&678 "&DDJDJ!DNs   A7 7 C:C)NN)r:   
__module____qualname__r   rA   r"   rH   rK   rM   r#   warningswarnrY   r[   r]   r`   rb   rd   rg   rR   r,   r   r   r   r   r   r   r   __classcell__)r4   s   @r5   r   r   
   s     %))<V-:""6 %MM 
 ''$(L,@	9"rB   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)rk   c                 <    || _         || _        d | _        d| _        y )NF)r|   r_   r=   r   )r-   r|   r_   s      r5   r   z!WriteSubprocessPipeProto.__init__  s    		!rB   c                     || _         y rD   )r=   )r-   	transports     r5   ru   z(WriteSubprocessPipeProto.connection_made  s	    	rB   c                 j    d| j                   j                   d| j                   d| j                  dS )N<z fd=z pipe=>)r4   r:   r_   r=   rJ   s    r5   rA   z!WriteSubprocessPipeProto.__repr__
  s0    4>>**+4ytyym1MMrB   c                 l    d| _         | j                  j                  | j                  |       d | _        y )NT)r   r|   r   r_   )r-   r   s     r5   r   z(WriteSubprocessPipeProto.connection_lost  s)     		''5	rB   c                 L    | j                   j                  j                          y rD   )r|   r   pause_writingrJ   s    r5   r   z&WriteSubprocessPipeProto.pause_writing  s    		))+rB   c                 L    | j                   j                  j                          y rD   )r|   r   resume_writingrJ   s    r5   r   z'WriteSubprocessPipeProto.resume_writing  s    		**,rB   N)	r:   r   r   r   ru   rA   r   r   r   r   rB   r5   rk   rk      s!    "N
,-rB   rk   c                       e Zd Zd Zy)ro   c                 P    | j                   j                  | j                  |       y rD   )r|   r   r_   )r-   r   s     r5   data_receivedz%ReadSubprocessPipeProto.data_received  s    		%%dggt4rB   N)r:   r   r   r   r   rB   r5   ro   ro     s    5rB   ro   )r   r   r    r   r   logr   SubprocessTransportr   BaseProtocolrk   Protocolro   r   rB   r5   <module>r      sT         r"j<< r"j-y55 -456'005rB   