Yf]#@sddlZddlZddlZddlmZddlmZddlmZddlmZddl m Z Gdd d ej Z Gd d d ej ZGd d d eejZdS)N)compat) protocols) transports) coroutine)loggercsEeZdZddfddZddZddZdd Zd d Zd d ZddZ e j rddZ ddZ ddZddZddZddZddZddZed d!Zd"d#Zd$d%Zd&d'Zd(d)Zed*d+Zd,d-Zd.d/ZS)0BaseSubprocessTransportNc  stj| d|_||_||_d|_d|_d|_g|_t j |_ i|_ d|_ |tjkrd|j d<|tjkrd|j d<|tjkrd|j d ) r.__name__rappendrrrgetpipejoin)r)infor r rr/r/r0__repr__9s,      z BaseSubprocessTransport.__repr__cKs tdS)N)NotImplementedError)r)r r r r rrr-r/r/r0r VszBaseSubprocessTransport._startcCs ||_dS)N)r)r)r+r/r/r0 set_protocolYsz$BaseSubprocessTransport.set_protocolcCs|jS)N)r)r)r/r/r0 get_protocol\sz$BaseSubprocessTransport.get_protocolcCs|jS)N)r)r)r/r/r0 is_closing_sz"BaseSubprocessTransport.is_closingc Cs|jr dSd|_x3|jjD]"}|dkr;q&|jjq&W|jdk r|jdkr|jjdkr|jj rt j d|y|jj Wnt k rYnXdS)NTz$Close running child process: kill %r)rrvaluesr6r!rrZpollrr#rZwarningkillProcessLookupError)r)protor/r/r0r!bs     zBaseSubprocessTransport.closecCs+|js'tjd|t|jdS)Nzunclosed transport %r)rwarningswarnResourceWarningr!)r)r/r/r0__del__s zBaseSubprocessTransport.__del__cCs|jS)N)r)r)r/r/r0get_pidszBaseSubprocessTransport.get_pidcCs|jS)N)r)r)r/r/r0get_returncodesz&BaseSubprocessTransport.get_returncodecCs%||jkr|j|jSdSdS)N)rr6)r)fdr/r/r0get_pipe_transportsz*BaseSubprocessTransport.get_pipe_transportcCs|jdkrtdS)N)rr@)r)r/r/r0 _check_procsz#BaseSubprocessTransport._check_proccCs|j|jj|dS)N)rJr send_signal)r)signalr/r/r0rKs z#BaseSubprocessTransport.send_signalcCs|j|jjdS)N)rJr terminate)r)r/r/r0rMs z!BaseSubprocessTransport.terminatecCs|j|jjdS)N)rJrr?)r)r/r/r0r?s zBaseSubprocessTransport.killc #syLj}j}|jdk r]|jfdd|jEdH\}}|jd<|jdk r|jfdd|jEdH\}}|jd<|jdk r|jfdd|jEdH\}}|jd<jdk st |j j j x'jD]\}}|j ||q"Wd_WnKt k r}z+|dk r|j r|j|WYdd}~Xn'X|dk r|j r|jddS)Ncs tdS)Nr)WriteSubprocessPipeProtor/)r)r/r0sz8BaseSubprocessTransport._connect_pipes..rcs tdS)Nr)ReadSubprocessPipeProtor/)r)r/r0rOsrcs tdS)Nr )rPr/)r)r/r0rOsr )rrr Zconnect_write_piperr Zconnect_read_piperrAssertionError call_soonrconnection_made Exception cancelledZ set_exception set_result) r)r,procr*_r6callbackdataexcr/)r)r0r(s8       z&BaseSubprocessTransport._connect_pipescGs?|jdk r(|jj||fn|jj||dS)N)rr4rrR)r)cbrZr/r/r0_callszBaseSubprocessTransport._callcCs'|j|jj|||jdS)N)r]rZpipe_connection_lost _try_finish)r)rHr[r/r/r0_pipe_connection_lostsz-BaseSubprocessTransport._pipe_connection_lostcCs|j|jj||dS)N)r]rZpipe_data_received)r)rHrZr/r/r0_pipe_data_receivedsz+BaseSubprocessTransport._pipe_data_receivedcCs|dk st||jdks6t|j|jjrXtjd||||_|jjdkr||j_|j|j j |j x*|j D]}|j s|j|qWd|_ dS)Nz%r exited with return code %r)rQrrr#rr8r returncoder]rZprocess_exitedr^rrUrV)r)rar,r/r/r0_process_exiteds      z'BaseSubprocessTransport._process_exitedccs>|jdk r|jS|jj}|jj||EdHS)zdWait until the process exit and return the process return code. This method is a coroutine.N)rrZ create_futurerr4)r)r,r/r/r0_waits zBaseSubprocessTransport._waitcCse|j st|jdkr#dStdd|jjDrad|_|j|jddS)Ncss$|]}|dk o|jVqdS)N) disconnected).0pr/r/r0 sz6BaseSubprocessTransport._try_finish..T)rrQrallrr>r]_call_connection_lost)r)r/r/r0r^s  z#BaseSubprocessTransport._try_finishc Cs7z|jj|Wdd|_d|_d|_XdS)N)rconnection_lostrr)r)r[r/r/r0ris   z-BaseSubprocessTransport._call_connection_lost)r3 __module__ __qualname__rr9r r;r<r=r!rZPY34rErFrGrIrJrKrMr?rr(r]r_r`rbrcr^rir/r/)r.r0r s0 )               %     rc@sXeZdZddZddZddZddZd d Zd d Zd S)rNcCs(||_||_d|_d|_dS)NF)rWrHr6rd)r)rWrHr/r/r0rs   z!WriteSubprocessPipeProto.__init__cCs ||_dS)N)r6)r)Z transportr/r/r0rS sz(WriteSubprocessPipeProto.connection_madecCsd|jj|j|jfS)Nz<%s fd=%s pipe=%r>)r.r3rHr6)r)r/r/r0r9sz!WriteSubprocessPipeProto.__repr__cCs,d|_|jj|j|d|_dS)NT)rdrWr_rH)r)r[r/r/r0rjs z(WriteSubprocessPipeProto.connection_lostcCs|jjjdS)N)rWr pause_writing)r)r/r/r0rmsz&WriteSubprocessPipeProto.pause_writingcCs|jjjdS)N)rWrresume_writing)r)r/r/r0rnsz'WriteSubprocessPipeProto.resume_writingN) r3rkrlrrSr9rjrmrnr/r/r/r0rNs      rNc@seZdZddZdS)rPcCs|jj|j|dS)N)rWr`rH)r)rZr/r/r0 data_received#sz%ReadSubprocessPipeProto.data_receivedN)r3rkrlror/r/r/r0rP s rP)rrrBrrrZ coroutinesrlogrZSubprocessTransportrZ BaseProtocolrNZProtocolrPr/r/r/r0s