й¼]]#ã@sÆddlZddlZddlZddlmZddlmZddlmZddlmZddl m Z Gdd „d ej ƒZ Gd d „d ej ƒZGd d „d eejƒZdS)éNé)Úcompat)Ú protocols)Ú transports)Ú coroutine)ÚloggercsEeZdZdd‡fdd†Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z e j r�dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zed d!„ƒZd"d#„Zd$d%„Zd&d'„Zd(d)„Zed*d+„ƒZd,d-„Zd.d/„Z‡S)0ÚBaseSubprocessTransportNc  sštƒj| ƒd|_||_||_d|_d|_d|_g|_t j ƒ|_ i|_ d|_ |tjkrŒd|j d<|tjkr¨d|j d<|tjkrÄd|j dú ) r/Ú__name__rÚappendrrrÚgetÚpipeÚjoin)r)Úinfor r rr0r0r1Ú__repr__9s,      z BaseSubprocessTransport.__repr__cKs t‚dS)N)ÚNotImplementedError)r)r r r r rrr.r0r0r1r VszBaseSubprocessTransport._startcCs ||_dS)N)r)r)r+r0r0r1Ú set_protocolYsz$BaseSubprocessTransport.set_protocolcCs|jS)N)r)r)r0r0r1Ú get_protocol\sz$BaseSubprocessTransport.get_protocolcCs|jS)N)r)r)r0r0r1Ú is_closing_sz"BaseSubprocessTransport.is_closingc CsÈ|jr dSd|_x3|jjƒD]"}|dkr;q&|jjƒq&W|jdk rÄ|jdkrÄ|jjƒdkrÄ|jj ƒržt j d|ƒy|jj ƒWnt k rÃYnXdS)NTz$Close running child process: kill %r)rrÚvaluesr8r!rrÚpollrr#rÚwarningÚkillÚProcessLookupError)r)Úprotor0r0r1r!bs     zBaseSubprocessTransport.closecCs+|js'tjd|tƒ|jƒdS)Nzunclosed transport %r)rÚwarningsÚwarnÚResourceWarningr!)r)r0r0r1Ú__del__€s zBaseSubprocessTransport.__del__cCs|jS)N)r)r)r0r0r1Úget_pid…szBaseSubprocessTransport.get_pidcCs|jS)N)r)r)r0r0r1Úget_returncodeˆsz&BaseSubprocessTransport.get_returncodecCs%||jkr|j|jSdSdS)N)rr8)r)Úfdr0r0r1Úget_pipe_transport‹sz*BaseSubprocessTransport.get_pipe_transportcCs|jdkrtƒ‚dS)N)rrD)r)r0r0r1Ú _check_proc‘sz#BaseSubprocessTransport._check_proccCs|jƒ|jj|ƒdS)N)rNrÚ send_signal)r)Úsignalr0r0r1rO•s z#BaseSubprocessTransport.send_signalcCs|jƒ|jjƒdS)N)rNrÚ terminate)r)r0r0r1rQ™s z!BaseSubprocessTransport.terminatecCs|jƒ|jjƒdS)N)rNrrC)r)r0r0r1rC�s zBaseSubprocessTransport.killc #s¯y7ˆj}ˆj}|jdk r]|j‡fdd†|jƒEdH\}}|ˆjd<|jdk r¥|j‡fdd†|jƒEdH\}}|ˆjd<|jdk rí|j‡fdd†|jƒEdH\}}|ˆjd<|jˆj j ˆƒx'ˆj D]\}}|j||Œq Wdˆ_ WnKt k r„}z+|dk rr|j ƒ rr|j|ƒWYdd}~Xn'X|dk r«|j ƒ r«|jdƒdS)Ncs tˆdƒS)Nr)ÚWriteSubprocessPipeProtor0)r)r0r1Ú©sz8BaseSubprocessTransport._connect_pipes..rcs tˆdƒS)Nr)ÚReadSubprocessPipeProtor0)r)r0r1rS¯srcs tˆdƒS)Nr )rTr0)r)r0r1rSµsr )rrr Zconnect_write_piperr Zconnect_read_piperÚ call_soonrÚconnection_maderÚ ExceptionÚ cancelledÚ set_exceptionÚ set_result) r)r,Úprocr*Ú_r8ÚcallbackÚdataÚexcr0)r)r1r(¡s6       z&BaseSubprocessTransport._connect_pipescGs?|jdk r(|jj||fƒn|jj||ŒdS)N)rr6rrU)r)Úcbr^r0r0r1Ú_callÆszBaseSubprocessTransport._callcCs'|j|jj||ƒ|jƒdS)N)rarZpipe_connection_lostÚ _try_finish)r)rLr_r0r0r1Ú_pipe_connection_lostÌsz-BaseSubprocessTransport._pipe_connection_lostcCs|j|jj||ƒdS)N)rarZpipe_data_received)r)rLr^r0r0r1Ú_pipe_data_receivedÐsz+BaseSubprocessTransport._pipe_data_receivedcCs |jjƒr"tjd||ƒ||_|jjdkrI||j_|j|jj ƒ|j ƒx*|j D]}|j ƒsp|j |ƒqpWd|_ dS)Nz%r exited with return code %r)rr#rr:rrÚ returncoderarZprocess_exitedrbrrXrZ)r)rer,r0r0r1Ú_process_exitedÓs      z'BaseSubprocessTransport._process_exitedccs>|jdk r|jS|jjƒ}|jj|ƒ|EdHS)N)rrZ create_futurerr6)r)r,r0r0r1Ú_waitçs zBaseSubprocessTransport._waitcCsU|jdkrdStdd„|jjƒDƒƒrQd|_|j|jdƒdS)Ncss$|]}|dk o|jVqdS)N)Ú disconnected)Ú.0Úpr0r0r1ú ÷sz6BaseSubprocessTransport._try_finish..T)rÚallrr@rraÚ_call_connection_lost)r)r0r0r1rbós   z#BaseSubprocessTransport._try_finishc Cs7z|jj|ƒWdd|_d|_d|_XdS)N)rÚconnection_lostrr)r)r_r0r0r1rmüs   z-BaseSubprocessTransport._call_connection_lost)r5Ú __module__Ú __qualname__rr;r r=r>r?r!rZPY34rIrJrKrMrNrOrQrCrr(rarcrdrfrgrbrmr0r0)r/r1r s0 )               %     rc@sXeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)rRcCs(||_||_d|_d|_dS)NF)r[rLr8rh)r)r[rLr0r0r1rs   z!WriteSubprocessPipeProto.__init__cCs ||_dS)N)r8)r)Z transportr0r0r1rV sz(WriteSubprocessPipeProto.connection_madecCsd|jj|j|jfS)Nz<%s fd=%s pipe=%r>)r/r5rLr8)r)r0r0r1r;sz!WriteSubprocessPipeProto.__repr__cCs,d|_|jj|j|ƒd|_dS)NT)rhr[rcrL)r)r_r0r0r1rns z(WriteSubprocessPipeProto.connection_lostcCs|jjjƒdS)N)r[rÚ pause_writing)r)r0r0r1rqsz&WriteSubprocessPipeProto.pause_writingcCs|jjjƒdS)N)r[rÚresume_writing)r)r0r0r1rrsz'WriteSubprocessPipeProto.resume_writingN) r5rorprrVr;rnrqrrr0r0r0r1rRs      rRc@seZdZdd„ZdS)rTcCs|jj|j|ƒdS)N)r[rdrL)r)r^r0r0r1Ú data_received#sz%ReadSubprocessPipeProto.data_receivedN)r5rorprsr0r0r0r1rT s rT)rrrFÚrrrZ coroutinesrÚlogrZSubprocessTransportrZ BaseProtocolrRZProtocolrTr0r0r0r1Ús   ù