a XC?h‹"ã@sxddlZddlZddlZddlmZddlmZddlmZGdd„dejƒZ Gdd „d ej ƒZ Gd d „d e ej ƒZ dS) éNé)Ú protocols)Ú transports)ÚloggercsÔeZdZd0‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z e j fdd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Z‡ZS)1ÚBaseSubprocessTransportNc s&tƒ | ¡d|_||_||_d|_d|_d|_g|_t   ¡|_ i|_ d|_ |tjkr`d|j d<|tjkrtd|j d<|tjkrˆd|j d<z"|jf||||||dœ| ¤ŽWn| ¡‚Yn0|jj|_|j|jd<|j ¡�rt|ttfƒrø|} n|d} t d| |j¡|j | | ¡¡dS)NFrré)ÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizeÚ subprocesszprocess %r created: pid %s)ÚsuperÚ__init__Ú_closedÚ _protocolÚ_loopÚ_procÚ_pidÚ _returncodeÚ _exit_waitersÚ collectionsÚdequeÚ_pending_callsÚ_pipesÚ _finishedrÚPIPEÚ_startÚcloseÚpidZ_extraÚ get_debugÚ isinstanceÚbytesÚstrrÚdebugZ create_taskÚ_connect_pipes) ÚselfÚloopÚprotocolrr r r r r ÚwaiterZextraÚkwargsZprogram©Ú __class__©úú ) r-Ú__name__rÚappendrrrÚgetÚpipeÚformatÚjoin)r'Úinfor r r r.r.r/Ú__repr__7s,           z BaseSubprocessTransport.__repr__cKst‚dS©N)ÚNotImplementedError)r'rr r r r r r+r.r.r/rTszBaseSubprocessTransport._startcCs ||_dSr:©r)r'r)r.r.r/Ú set_protocolWsz$BaseSubprocessTransport.set_protocolcCs|jSr:r<©r'r.r.r/Ú get_protocolZsz$BaseSubprocessTransport.get_protocolcCs|jSr:)rr>r.r.r/Ú is_closing]sz"BaseSubprocessTransport.is_closingcCs’|jr dSd|_|j ¡D]}|dur(q|j ¡q|jdurŽ|jdurŽ|j ¡durŽ|j  ¡rlt   d|¡z|j  ¡Wnt yŒYn0dS)NTz$Close running child process: kill %r)rrÚvaluesr5rrrZpollrr!rZwarningÚkillÚProcessLookupError)r'Úprotor.r.r/r`s$  þ û   zBaseSubprocessTransport.closecCs&|js"|d|›�t|d�| ¡dS)Nzunclosed transport )Úsource)rÚResourceWarningr)r'Z_warnr.r.r/Ú__del__{szBaseSubprocessTransport.__del__cCs|jSr:)rr>r.r.r/Úget_pid€szBaseSubprocessTransport.get_pidcCs|jSr:)rr>r.r.r/Úget_returncodeƒsz&BaseSubprocessTransport.get_returncodecCs||jvr|j|jSdSdSr:)rr5)r'Úfdr.r.r/Úget_pipe_transport†s  z*BaseSubprocessTransport.get_pipe_transportcCs|jdurtƒ‚dSr:)rrCr>r.r.r/Ú _check_procŒs z#BaseSubprocessTransport._check_proccCs| ¡|j |¡dSr:)rLrÚ send_signal)r'Úsignalr.r.r/rM�sz#BaseSubprocessTransport.send_signalcCs| ¡|j ¡dSr:)rLrÚ terminater>r.r.r/rO”sz!BaseSubprocessTransport.terminatecCs| ¡|j ¡dSr:)rLrrBr>r.r.r/rB˜szBaseSubprocessTransport.killc ƒsbzäˆj}ˆj}|jdurB| ‡fdd„|j¡IdH\}}|ˆjd<|jdurv| ‡fdd„|j¡IdH\}}|ˆjd<|jdurª| ‡fdd„|j¡IdH\}}|ˆjd<| ˆj j ˆ¡ˆj D]\}}|j|g|¢RŽqÀdˆ_ WnZt t fyü‚Ynbt�y>}z*|du�r*| ¡�s*| |¡WYd}~n(d}~00|du�r^| ¡�s^| d¡dS)Ncs tˆdƒS)Nr)ÚWriteSubprocessPipeProtor.r>r.r/Ú£óz8BaseSubprocessTransport._connect_pipes..rcs tˆdƒS)Nr©ÚReadSubprocessPipeProtor.r>r.r/rQ©rRrcs tˆdƒS)NrrSr.r>r.r/rQ¯rRr)rrr Zconnect_write_piperr Zconnect_read_piper Ú call_soonrÚconnection_maderÚ SystemExitÚKeyboardInterruptÚ BaseExceptionÚ cancelledZ set_exceptionÚ set_result) r'r*Úprocr(Ú_r5ÚcallbackÚdataÚexcr.r>r/r&œs@  þ   þ   þ   z&BaseSubprocessTransport._connect_pipescGs4|jdur|j ||f¡n|jj|g|¢RŽdSr:)rr3rrU)r'Úcbr_r.r.r/Ú_callÂs zBaseSubprocessTransport._callcCs| |jj||¡| ¡dSr:)rbrZpipe_connection_lostÚ _try_finish)r'rJr`r.r.r/Ú_pipe_connection_lostÈsz-BaseSubprocessTransport._pipe_connection_lostcCs| |jj||¡dSr:)rbrZpipe_data_received)r'rJr_r.r.r/Ú_pipe_data_receivedÌsz+BaseSubprocessTransport._pipe_data_receivedcCsp|j ¡rt d||¡||_|jjdur2||j_| |jj ¡|  ¡|j D]}|  ¡sN|  |¡qNd|_ dS)Nz%r exited with return code %r)rr!rr8rrÚ returncoderbrZprocess_exitedrcrrZr[)r'rfr*r.r.r/Ú_process_exitedÏs    z'BaseSubprocessTransport._process_exitedcÃs0|jdur|jS|j ¡}|j |¡|IdHSr:)rrZ create_futurerr3)r'r*r.r.r/Ú_waitâs    zBaseSubprocessTransport._waitcCs>|jdurdStdd„|j ¡Dƒƒr:d|_| |jd¡dS)Ncss|]}|duo|jVqdSr:)Ú disconnected)Ú.0Úpr.r.r/Ú ñsÿz6BaseSubprocessTransport._try_finish..T)rÚallrrArrbÚ_call_connection_lostr>r.r.r/rcís ÿz#BaseSubprocessTransport._try_finishcCs<z"|j |¡Wd|_d|_d|_nd|_d|_d|_0dSr:)rÚconnection_lostrr©r'r`r.r.r/rnösþz-BaseSubprocessTransport._call_connection_lost)NN)r2Ú __module__Ú __qualname__rr9rr=r?r@rÚwarningsÚwarnrGrHrIrKrLrMrOrBr&rbrdrergrhrcrnÚ __classcell__r.r.r,r/r s0þ+&  rc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)rPcCs||_||_d|_d|_dS)NF)r\rJr5ri)r'r\rJr.r.r/rsz!WriteSubprocessPipeProto.__init__cCs ||_dSr:)r5)r'Z transportr.r.r/rVsz(WriteSubprocessPipeProto.connection_madecCs d|jj›d|j›d|j›d�S)Nú)r-r2rJr5r>r.r.r/r9 sz!WriteSubprocessPipeProto.__repr__cCs d|_|j |j|¡d|_dS)NT)rir\rdrJrpr.r.r/ro sz(WriteSubprocessPipeProto.connection_lostcCs|jj ¡dSr:)r\rÚ pause_writingr>r.r.r/rxsz&WriteSubprocessPipeProto.pause_writingcCs|jj ¡dSr:)r\rÚresume_writingr>r.r.r/rysz'WriteSubprocessPipeProto.resume_writingN) r2rqrrrrVr9rorxryr.r.r.r/rPÿs rPc@seZdZdd„ZdS)rTcCs|j |j|¡dSr:)r\rerJ)r'r_r.r.r/Ú data_receivedsz%ReadSubprocessPipeProto.data_receivedN)r2rqrrrzr.r.r.r/rTsrT)rrrsÚrrÚlogrZSubprocessTransportrZ BaseProtocolrPÚProtocolrTr.r.r.r/Ús   v ÿ