
    it                    p   S r SSKJr  SSKrSSKrSSKJr  SSKJr  \(       a  SSKJ	r	  SSKJ
r
  SSKJr   SS	KJr  SS
KJr  SSKJr   " S S\5      rSrSS jrSS jrSS jrSS jrS S jrSrSrSrSr " S S5      r " S S5      rS!S jr \!S:X  a	  \ " \"5        gg! \ a    SS	KJr  SS
KJr   Nqf = f)"zKexecnet IO initialization code.

Creates IO instances used for gateway IO.
    )annotationsN)TYPE_CHECKING)cast)Channel)	ExecModel)XSpec)Message)Popen2IO)partialc                  L   ^  \ rS rSr% S\S'   SU 4S jjrS	S jrS
S jrSrU =r	$ )Popen2IOMaster   strremoteaddressc                   > UR                   R                  nUR                   R                  XUS9=U l        n[        TU ]  UR                  UR                  US9  g )N)stdoutstdin)	execmodel)
subprocessPIPEPopenpopensuper__init__r   r   )selfargsr   r   p	__class__s        Q/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/execnet/gateway_io.pyr   Popen2IOMaster.__init__    sR    ##(("--33DT3RR
Q!((i@    c                X     U R                   R                  5       $ ! [         a     g f = fN)r   waitOSErrorr   s    r   r$   Popen2IOMaster.wait%   s*    	::??$$ 		s    
))c                     U R                   R                  5         g ! [         aJ  n[        R                  R                  SU-  5        [        R                  R                  5          S nAg S nAff = f)NzERROR killing: %s
)r   killr%   sysstderrwriteflush)r   es     r   r)   Popen2IOMaster.kill+   sP    	JJOO 	JJ2Q67JJ	s    
A1A A,,A1)r   )r   r   returnNoner0   z
int | Noner0   r1   )
__name__
__module____qualname____firstlineno____annotations__r   r$   r)   __static_attributes____classcell__)r   s   @r   r   r      s    A
 r!   r   z+import sys;exec(eval(sys.stdin.readline()))c                    [         R                  R                  S5      (       a  U R                  SS5      n [        R
                  " U 5      $ )zq
Use shell lexer to split the given path into a list of components,
taking care to handle Windows' '' correctly.
win\/)r*   platform
startswithreplaceshlexsplit)paths    r   shell_split_pathrE   6   s8    
 ||u%%||D#&;;tr!   c                   U R                   (       a  [        U R                   5      O[        R                  /nUR	                  S5        U R
                  (       a  UR	                  S5        UR                  S[        /5        U$ )Nz-uz-Bz-c)pythonrE   r*   
executableappenddont_write_bytecodeextendpopen_bootstrapline)specr   s     r   
popen_argsrN   A   sX    ,0KKDKK(cnn=MDKKDKK*+,Kr!   c                H   U R                   =(       d    SnSS/nU R                  b&  UR                  S[        U R                  5      /5        U R                  c   eUR                  U R                  R                  5       5        U S[         S3nUR                  U5        U$ )NrG   ssh-C-F -c "")rG   
ssh_configrK   r   rP   rC   rL   rI   rM   remotepythonr   	remotecmds       r   ssh_argsrY   J   s     ;;*(L4=D"T3t/0188KK !.&9%:!<IKK	Kr!   c                   U R                   c   eU R                  =(       d    SnSSU R                   SS/nU R                  b&  UR                  S[	        U R                  5      /5        U S[
         S3nUR                  U/5        U$ )	NrG   vagrantrP   z--rQ   rR   rS   rT   )vagrant_sshrG   rU   rK   r   rL   rV   s       r   vagrant_ssh_argsr]   Z   s     ''';;*(Lud..d;D"T3t/01.&9%:!<IKKKr!   c                <   U R                   (       a  [        U 5      n[        X!5      $ U R                  (       a)  [	        U 5      n[        X!5      nU R                  Ul        U$ U R                  (       a)  [        U 5      n[        X!5      nU R                  Ul        U$  er#   )r   rN   r   rP   rY   r   r\   r]   )rM   r   r   ios       r   	create_ior`   k   s~    zz$d..xx~D,88	%D,++	5r!               c                      \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jr\SS j5       rSS jrSrg)ProxyIO   a4  A Proxy IO object allows to instantiate a Gateway
through another "via" gateway.

A master:ProxyIO object provides an IO object effectively connected to the
sub via the forwarder. To achieve this, master:ProxyIO interacts with
forwarder:serve_proxy_io() which itself instantiates and interacts with the
sub.
c                    UR                   R                  5       U l        UR                  U R                  5        Xl        U R                  R                  S5      U l        X l        g )Nr)gateway
newchannelcontrolchansendiochanmakefileiochan_filer   )r   proxy_channelr   s      r   r   ProxyIO.__init__   sP     )00;;=4++,#;;//4"r!   c                8    U R                   R                  U5      $ r#   )rp   read)r   nbytess     r   rt   ProxyIO.read   s     $$V,,r!   c                :    U R                   R                  U5        g r#   )rn   rm   )r   datas     r   r,   ProxyIO.write   s    r!   c                l    U R                   R                  U5        U R                   R                  5       $ r#   )rl   rm   receive)r   events     r   	_controllProxyIO._controll   s+    e$''))r!   c                .    U R                  [        5        g r#   )r}   RIO_CLOSE_WRITEr&   s    r   close_writeProxyIO.close_write   s    'r!   c                    [        5       er#   )NotImplementedErrorr&   s    r   
close_readProxyIO.close_read   s    !##r!   c                .    U R                  [        5        g r#   )r}   RIO_KILLr&   s    r   r)   ProxyIO.kill   s    x r!   c                d    U R                  [        5      nUb  [        U[        5      (       d   eU$ r#   )r}   RIO_WAIT
isinstanceintr   responses     r   r$   ProxyIO.wait   s-    >>(+:h#<#<<<r!   c                ^    U R                  [        5      n[        U[        5      (       d   eU$ r#   )r}   RIO_REMOTEADDRESSr   r   r   s     r   r   ProxyIO.remoteaddress   s)    >>"34(C((((r!   c                J    SU R                   R                  R                   S3$ )Nz<RemoteIO via >)rn   rj   idr&   s    r   __repr__ProxyIO.__repr__   s"     3 3 6 67q99r!   )rl   r   rn   rp   N)rq   r   r   r   r0   r1   )ru   r   r0   bytesrx   r   r0   r1   )r|   r   r0   objectr3   r2   )r0   r   )r4   r5   r6   r7   __doc__r   rt   r,   r}   r   r   r)   r$   propertyr   r   r9    r!   r   rf   rf      sH    #-
*($!
  
:r!   rf   c                  (    \ rS rSrSS jrSS jrSrg)
PseudoSpec   c                :    U R                   R                  U5        g r#   )__dict__update)r   varss     r   r   PseudoSpec.__init__   s    T"r!   c                    g r#   r   )r   names     r   __getattr__PseudoSpec.__getattr__   s    r!   r   Nr3   )r   r   r0   r1   )r4   r5   r6   r7   r   r   r9   r   r!   r   r   r      s    #r!   r   c                   ^^	^
 U R                   R                  n[        U R                   R                  SU R                  -  5      m	[        S[        U R                  5       5      5      n[        X!5      m
[        SU R                  5       5      mT	" ST5        SU	U
4S jjnU R                  U5        SUU
4S jjnTR                  U5        U R                  S5      nT	" SUR                  5        T
R                  S	5      nUS
:X  d   U5       eT	" SUR                  5        UR                  U5          [        R                  " T
5      nUR!                  U5        M*  ! [         a    T	" SUR                  5         g f = f)Nzserve_proxy_io:%sr   r   zgot control chanc                P   > T" S[        U 5      -  5        TR                  U 5        g )Nzforward data to sub, size %s)lenr,   )rx   logsub_ios    r   forward_to_sub&serve_proxy_io.<locals>.forward_to_sub   s!    *SY67Tr!   c                V  > U [         :X  a   TR                  TR                  5       5        g U [        :X  a"  TR	                  5         TR                  S 5        g U [
        :X  a  TR                  TR                  5        g U [        :X  a"  TR                  5         TR                  S 5        g g r#   )	r   rm   r$   r   r)   r   r   r   r   )rx   control_chanr   s    r   controlserve_proxy_io.<locals>.control   s    8fkkm,XKKMd#&&f223_$ d# %r!   wzreading bootstrap byte from subra      1z"forwarding bootstrap byte from subz'EOF from sub, terminating proxying loopr   )rx   r   r0   r1   )rj   r   r   _tracer   r   r   r{   r`   setcallbackro   rt   r,   r	   from_ioEOFErrorto_io)proxy_channelXr   rM   r   r   forward_to_master_fileinitialmessager   r   r   s           @@@r   serve_proxy_ior      sc   &&00I
%%':^=N=N'NC N$:$:$<=>Dt'F	>#9#9#;<LL)  ~.
$ 
$ W% ,44S9 )4773kk!nGd?#G#?,dgg6  ) 	oof-G 	,-   	9477C	s   4E E=<E=__channelexec__)rD   r   r0   	list[str])rM   r   r0   r   )rM   r   r   r   r0   r   )r   r   r0   r1   )#r   
__future__r   rB   r*   typingr   r   execnet.gateway_baser   r   execnet.xspecr   r	   r
   ImportError__main__	functoolsr   r   rL   rE   rN   rY   r]   r`   r   r   r   r   rf   r   r   r4   channelr   r!   r   <module>r      s   
 #  
   ,.#",-
 X . D  "0  4: 4:n 2.l   7 !S  " !"s   B   B54B5