a hB@sddlZddlZddlZddlZddlmZmZmZmZmZddl m Z m Z m Z ddl mZeeZedejdZGdd d eZGd d d ejejZdS) N)AnyCallableIterableSequenceTypeVar)InteractionAgentInteractionHandlerget_running_loop)get_exception_for_ssh_stderrP)boundcs8eZdZUeed<eed<eeddfdd ZZS)SubprocessError returncodestderrN)rrreturncst||||_||_dSN)super__init__rr)selfrr __class__C/usr/lib/python3.9/site-packages/cockpit/_vendor/ferny/transport.pyr$szSubprocessError.__init__)__name__ __module__ __qualname__int__annotations__strr __classcell__rrrrr s rc @seZdZUeed<ded<eed<ejed<dZeed<dZ d ed <dZ d ed <dZ d ed<dZ ded<dZ ded<dZded<dZeed<dZeed<edkdegefeedeeeeddddZejddd d!Zdd"d#d$Zd%dd&d'd(Zejdd)d*d+Zddd,d-d.Zee dd/d0d1Z!eddd2d3d4Z"dd"d5d6Z#dd"d7d8Z$dd"d9d:Z%dlddd,d;d<Z&ed"d=d>Z'dmee(e(d?d@dAZ)ej*dddBdCZ+ejd"dDdEZ,ed"dFdGZ-dd"dHdIZ.dd"dJdKZ/dd"dLdMZ0ed"dNdOZ1ed"dPdQZ2dRd"dSdTZ3dnddddUdVdWZ4e ddXdYdZZ5e6e dd[d\d]Z7dd"d^d_Z8ed"d`daZ9dd"dbdcZ:dd"dddeZ;eddfdgdhZz&FernyTransport.spawn..)taskrc std||jusJz&|\}}|us6JtdWnPtjyXYdSty}z$td||WYd}~dSd}~00j|usJj dusJj dusJj dS)Nzexec_completed(%r, %r)z success.z OSError %r) loggerdebugr#resultasyncioZCancelledErrorOSErrorcloser'r(r)r"start)r9 transportmeexcr6rrexec_completeds     z,FernyTransport.spawn..exec_completed)r:r;r$r r_interaction_completedr" setdefaultfilenoZ create_taskZsubprocess_execr#r=ZTaskZadd_done_callback) r/r0r1r2r3r4r5protocolrDrr6rspawn@s5( zFernyTransport.spawn)rHrcCs ||_dSrr%rrHrrrrszFernyTransport.__init__)rcCs:td||js(td|jdS|jdurJ|jsJtd|jdS|jdurbtddS|jrvtddSd|_|jdurtd|j|j |jn|j dks|j rtd |j dnj|j r|j d krtd |j|j t|jn8td |j |j|j dus J|j t|j |jdS) Nz_consider_disconnect(%r)z exec_task still running %rz transport still connected %rz agent still runningz already disconnectedTz disconnect with exception %rrz clean disconnectz disconnect with ssh error %rz) disconnect with exit code %r, stderr %r)r:r;r#doner'r-r+r&r*r%connection_lostr,r.r$r rr6rrr_consider_disconnects4       z#FernyTransport._consider_disconnectzasyncio.Future[str])futurerc Csxtd||z||_td|jWn@tyj}z(td|d|_||WYd}~n d}~00|dS)Nz_interaction_completed(%r, %r)z stderr: %rz exception: %r)r:r;r<r+ Exceptionr?rO)rrPrCrrrrEs   z%FernyTransport._interaction_completed)rArcCstd||t|tjsJ||_|d}t|tjs>J||_|d}t|tj s^J||_ |d}|duszJtd||j |j |dS)Nzconnection_made(%r, %r)rrzcalling connection_made(%r, %r)) r:r; isinstancer=ZSubprocessTransportr'Zget_pipe_transportZWriteTransportr(Z ReadTransportr)r%connection_made)rrAZstdin_transportZstdout_transportZstderr_transportrrrrUs    zFernyTransport.connection_made)rCrcCs0td|||jdur||_d|_|dS)Nzconnection_lost(%r, %r)T)r:r;r*r-rOrrCrrrrNs  zFernyTransport.connection_lost)fddatarcCs0td||t||dks J|j|dS)Nzpipe_data_received(%r, %r, %r)r)r:r;lenr%Z data_received)rrWrXrrrpipe_data_receiveds z!FernyTransport.pipe_data_received)rWrCrcCsbtd||||dvsJt|tr*d}|dur>||n |dkr^|js^|js^|dS)Nz pipe_connection_lost(%r, %r, %r))rrr)r:r;rTBrokenPipeErrorr?r.r%Z eof_received)rrWrCrrrpipe_connection_losts    z#FernyTransport.pipe_connection_lostcCsBtd||jdusJ|j|_td|j|jdS)Nzprocess_exited(%r)z ._returncode = %r)r:r;r'get_returncoder,r"force_completionr6rrrprocess_exiteds   zFernyTransport.process_exitedcCstd||jdS)Nzpause_writing(%r))r:r;r% pause_writingr6rrrr`s zFernyTransport.pause_writingcCstd||jdS)Nzresume_writing(%r))r:r;r%resume_writingr6rrrras zFernyTransport.resume_writingcCstd||d|_|jdur0td|||_|jsNtd|j|jdurtdt t |j Wdn1s0Y|j dS)Nz close(%r, %r)Tz setting exception %rz cancelling _exec_taskz closing _subprocess_transport)r:r;r.r*r#rMcancelr' contextlibsuppressPermissionErrorr?r"r^rVrrrr? s        (zFernyTransport.closecCs|jdusJ|jSr)r' is_closingr6rrrrf0szFernyTransport.is_closing)namedefaultrcCs|jdusJ|j||Sr)r'get_extra_info)rrgrhrrrri4szFernyTransport.get_extra_infocCst|tjsJ||_dSr)rTr=Protocolr%rKrrr set_protocol8szFernyTransport.set_protocolcCs|jSrrJr6rrr get_protocol<szFernyTransport.get_protocolc Cs|jdusJz |jWSty6|jj YSty~z |jjj}||jjWYdSt yxYYdS0Yn0dS)NTF) r) is_readingNotImplementedErrorZ_pausedAttributeErrorZ_loopZ _selectorZget_keyZ_filenoKeyError)rselectorrrrrm?s     zFernyTransport.is_readingcCs|jdusJ|jdSr)r) pause_readingr6rrrrrOszFernyTransport.pause_readingcCs|jdusJ|jdSr)r)resume_readingr6rrrrsSszFernyTransport.resume_readingcCs4|jdusJ|jdusJ|j|jdSr)r(r'abortkillr6rrrrtWs zFernyTransport.abortcCs|jdusJ|jSr)r( can_write_eofr6rrrrv]szFernyTransport.can_write_eofcCs|jdusJ|jSr)r(get_write_buffer_sizer6rrrrwasz$FernyTransport.get_write_buffer_sizeztuple[int, int]cCs|jdusJ|jSr)r(get_write_buffer_limitsr6rrrrxesz&FernyTransport.get_write_buffer_limits)highlowrcCs|jdusJ|j||Sr)r(set_write_buffer_limits)rryrzrrrr{isz&FernyTransport.set_write_buffer_limits)rXrcCs|jdusJ|j|Sr)r(write)rrXrrrr|mszFernyTransport.write) list_of_datarcCs|jdusJ|j|Sr)r( writelines)rr}rrrr~qszFernyTransport.writelinescCs|jdusJ|jSr)r( write_eofr6rrrruszFernyTransport.write_eofcCs|jdusJ|jSr)r'get_pidr6rrrr{szFernyTransport.get_pidcCs|jSr)r,r6rrrr]szFernyTransport.get_returncodecCs|jdusJ|jdSr)r'rur6rrrruszFernyTransport.kill)numberrcCs|jdusJ|j|dSr)r' send_signal)rrrrrrszFernyTransport.send_signalcCs|jdusJ|jdSr)r' terminater6rrrrszFernyTransport.terminate)NrT)N)N)NN)>rrrrrboolr=rjr&r'r(r)r*r+r,r-r. classmethodrr rrr rrIrrOrEZ BaseTransportrUrNrbytesrZr\r_r`rar?rfobjectriZ BaseProtocolrkrlrmrrrsrtrvrwrxr{r|rr~rrr]rurrrrrrr!*st            c, r!)r=rcZloggingtypingrrrrrZinteraction_agentrr r Z ssh_errorsr Z getLoggerrr:rjr rRrZ TransportZSubprocessProtocolr!rrrrs