3 2a @sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZddlmZdddddgZejdkredddZy ejZWnek r(ddZYnXGdddejZe edrRddZ!nddl"Z"ddZ!Gd d!d!ej#Z$Gd"d#d#ej%ej&Z'e ed$rej(Z)nddl"Z"d%d&Z)Gd'd(d(e j*Z+Gd)ddZ,Gd*d+d+e,Z-Gd,dde-Z.Gd-dde-Z/Gd.d/d/ej0Z1eZ2e1Z3dS)0N) base_events)base_subprocess)compat) constants) coroutines)events)futures)selector_events) selectors) transports) coroutine)loggerSelectorEventLoopAbstractChildWatcherSafeChildWatcherFastChildWatcherDefaultEventLoopPolicywin32z+Signals are not really supported on WindowscCsdS)N)signumframerr0/opt/alt/python36/lib64/python3.6/unix_events.py_sighandler_noop%srcCs|S)Nr)pathrrr.srcseZdZd!fdd ZddZfddZdd Zd d Zd d ZddZ ddZ d"ddZ d#ddZ e d$ddZddZe ddddddZe d%dddddd ZZS)&_UnixSelectorEventLoopNcstj|i|_dS)N)super__init___signal_handlers)selfselector) __class__rrr7s z_UnixSelectorEventLoop.__init__cCstjS)N)socketZ socketpair)r rrr _socketpair;sz"_UnixSelectorEventLoop._socketpaircs^tjtjs2xFt|jD]}|j|qWn(|jrZtjd|dt |d|jj dS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removal)source) rclosesys is_finalizinglistrremove_signal_handlerwarningswarnResourceWarningclear)r sig)r"rrr&>s z_UnixSelectorEventLoop.closecCs"x|D]}|sq|j|qWdS)N)_handle_signal)r datarrrr_process_self_dataLs z)_UnixSelectorEventLoop._process_self_datac+GsHtj|stj|rtd|j||jytj|jj Wn2t t fk rt}zt t |WYdd}~XnXtj|||}||j|<ytj|ttj|dWnt k rB}zz|j|=|jsytjdWn4t t fk r}ztjd|WYdd}~XnX|jtjkr0t dj|nWYdd}~XnXdS)Nz3coroutines cannot be used with add_signal_handler()Frzset_wakeup_fd(-1) failed: %szsig {} cannot be caught)rZ iscoroutineZiscoroutinefunction TypeError _check_signalZ _check_closedsignal set_wakeup_fdZ_csockfileno ValueErrorOSError RuntimeErrorstrrZHandlerr siginterruptrinfoerrnoEINVALformat)r r/callbackargsexchandleZnexcrrradd_signal_handlerSs0     z)_UnixSelectorEventLoop.add_signal_handlercCs8|jj|}|dkrdS|jr*|j|n |j|dS)N)rgetZ _cancelledr*Z_add_callback_signalsafe)r r/rErrrr0s   z%_UnixSelectorEventLoop._handle_signalc&Cs|j|y |j|=Wntk r*dSX|tjkr>tj}ntj}ytj||Wn@tk r}z$|jtj krt dj |nWYdd}~XnX|jsytj dWn2t tfk r}ztjd|WYdd}~XnXdS)NFzsig {} cannot be caughtrzset_wakeup_fd(-1) failed: %sTr3)r5rKeyErrorr6SIGINTdefault_int_handlerSIG_DFLr:r?r@r;rAr7r9rr>)r r/ZhandlerrDrrrr*s(    z,_UnixSelectorEventLoop.remove_signal_handlercCsHt|tstdj|d|ko,tjknsDtdj|tjdS)Nzsig must be an int, not {!r}rzsig {} out of range(1, {})) isinstanceintr4rAr6NSIGr9)r r/rrrr5s  z$_UnixSelectorEventLoop._check_signalcCst|||||S)N)_UnixReadPipeTransport)r pipeprotocolwaiterextrarrr_make_read_pipe_transportsz0_UnixSelectorEventLoop._make_read_pipe_transportcCst|||||S)N)_UnixWritePipeTransport)r rPrQrRrSrrr_make_write_pipe_transportsz1_UnixSelectorEventLoop._make_write_pipe_transportc kstj} |j} t||||||||f| |d| } | j| j|j| y| EdHWn&tk r~} z | }WYdd} ~ XnXd}|dk r| j| j EdH|WdQRX| S)N)rRrS) rget_child_watcherZ create_future_UnixSubprocessTransportadd_child_handlerZget_pid_child_watcher_callback Exceptionr&Z_wait)r rQrCshellstdinstdoutstderrbufsizerSkwargswatcherrRtransprDerrrrr_make_subprocess_transports$     z1_UnixSelectorEventLoop._make_subprocess_transportcCs|j|j|dS)N)Zcall_soon_threadsafeZ_process_exited)r pid returncodercrrrrZsz._UnixSelectorEventLoop._child_watcher_callback)sslsockserver_hostnamec cs|r|dkr&tdn|dk r&td|dk r|dk r>tdtjtjtjd}y |jd|j||EdHWq|jYqXnB|dkrtd|jtjkstj |j  rtdj ||jd|j ||||EdH\}}||fS)Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with sslz3path and sock can not be specified at the same timerFzno path and sock were specifiedz2A UNIX Domain Stream Socket was expected, got {!r}) r9r#AF_UNIX SOCK_STREAM setblockingZ sock_connectr&familyr_is_stream_sockettyperAZ_create_connection_transport)r protocol_factoryrrhrirj transportrQrrrcreate_unix_connections8    z-_UnixSelectorEventLoop.create_unix_connectiond)ribacklogrhc !Cst|trtd|dk r0|dk r,tdt|}tjtjtj}|dd kry tj t j|j rnt j |WnBt k rYn0tk r}ztjd||WYdd}~XnXy|j|Wnjtk r}z8|j|jtjkrdj|}ttj|dnWYdd}~Xn|jYnXn>|dkrBtd|jtjks`tj|j rntdj|tj||g} |j||jd |j|||| | S) Nz*ssl argument must be an SSLContext or Nonez3path and sock can not be specified at the same timerz2Unable to check or remove stale UNIX socket %r: %rzAddress {!r} is already in usez-path was not specified, and no sock specifiedz2A UNIX Domain Stream Socket was expected, got {!r}F)rrv)rLboolr4r9_fspathr#rkrlstatS_ISSOCKosst_moderemoveFileNotFoundErrorr:rerrorZbindr&r?Z EADDRINUSErArnrrorpZServerZlistenrmZ_start_serving) r rqrrirurhrdrDmsgZserverrrrcreate_unix_serversP         z)_UnixSelectorEventLoop.create_unix_server)N)NN)NN)N)N)__name__ __module__ __qualname__rr$r&r2rFr0r*r5rTrVr rerZrsr __classcell__rr)r"rr1s* -      %r set_blockingcCstj|ddS)NF)r{r)fdrrr_set_nonblockingBsrcCs,tj|tj}|tjB}tj|tj|dS)N)fcntlZF_GETFLr{ O_NONBLOCKZF_SETFL)rflagsrrrrGs cseZdZdZd fdd ZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ e jrhddZd!ddZddZddZZS)"rOiNcstj|||jd<||_||_|j|_||_d|_t j |jj }t j |pbt j|pbt j|s~d|_d|_d|_tdt|j|jj|jj||jj|jj|j|j|dk r|jjtj|ddS)NrPFz)Pipe transport is for pipes/sockets only.)rr_extra_loop_piper8_fileno _protocol_closingr{fstatr|ryS_ISFIFOrzS_ISCHRr9r call_soonconnection_made _add_reader _read_readyr _set_result_unless_cancelled)r looprPrQrRrSmode)r"rrrQs,          z_UnixReadPipeTransport.__init__cCs|jjg}|jdkr |jdn|jr0|jd|jd|jt|jdd}|jdk r|dk rtj ||jt j }|r|jdq|jdn |jdk r|jdn |jddd j |S) Nclosedclosingzfd=%s _selectorpollingidleopenz<%s> ) r"rrappendrrgetattrrr _test_selector_eventr Z EVENT_READjoin)r r>r!rrrr__repr__ns$          z_UnixReadPipeTransport.__repr__cCsytj|j|j}WnDttfk r,Yntk rX}z|j|dWYdd}~Xn^X|rl|jj |nJ|j j rt j d|d|_|j j|j|j j|jj|j j|jddS)Nz"Fatal read error on pipe transportz%r was closed by peerT)r{readrmax_sizeBlockingIOErrorInterruptedErrorr: _fatal_errorrZ data_receivedr get_debugrr>r_remove_readerrZ eof_received_call_connection_lost)r r1rDrrrrs  z"_UnixReadPipeTransport._read_readycCs|jj|jdS)N)rrr)r rrr pause_readingsz$_UnixReadPipeTransport.pause_readingcCs|jj|j|jdS)N)rrrr)r rrrresume_readingsz%_UnixReadPipeTransport.resume_readingcCs ||_dS)N)r)r rQrrr set_protocolsz#_UnixReadPipeTransport.set_protocolcCs|jS)N)r)r rrr get_protocolsz#_UnixReadPipeTransport.get_protocolcCs|jS)N)r)r rrr is_closingsz!_UnixReadPipeTransport.is_closingcCs|js|jddS)N)r_close)r rrrr&sz_UnixReadPipeTransport.closecCs,|jdk r(tjd|t|d|jjdS)Nzunclosed transport %r)r%)rr+r,r-r&)r rrr__del__s  z_UnixReadPipeTransport.__del__Fatal error on pipe transportcCsZt|tr4|jtjkr4|jjrLtjd||ddn|jj||||j d|j |dS)Nz%r: %sT)exc_info)message exceptionrrrQ) rLr:r?ZEIOrrrdebugcall_exception_handlerrr)r rDrrrrrs  z#_UnixReadPipeTransport._fatal_errorcCs(d|_|jj|j|jj|j|dS)NT)rrrrrr)r rDrrrrsz_UnixReadPipeTransport._closec Cs4z|jj|Wd|jjd|_d|_d|_XdS)N)rconnection_lostrr&r)r rDrrrrs  z,_UnixReadPipeTransport._call_connection_losti)NN)r)rrrrrrrrrrrrr&rPY34rrrrrrr)r"rrOMs rOcseZdZd%fdd ZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZejr|ddZddZd&dd Zd'd!d"Zd#d$ZZS)(rUNc stj||||jd<||_|j|_||_t|_d|_ d|_ t j |jj }tj|}tj|}tj|} |px|px| sd|_d|_d|_tdt|j|jj|jj|| s|rtjjd r|jj|jj|j|j|dk r|jjtj|ddS)NrPrFz?Pipe transport is only for pipes, sockets and character devicesaix)rrrrr8rr bytearray_buffer _conn_lostrr{rr|ryrrrzr9rrrrr'platform startswithrrr r) r rrPrQrRrSrZis_charZis_fifoZ is_socket)r"rrrs2          z _UnixWritePipeTransport.__init__cCs|jjg}|jdkr |jdn|jr0|jd|jd|jt|jdd}|jdk r|dk rtj ||jt j }|r|jdn |jd|j }|jd|n |jdk r|jdn |jdd d j |S) Nrrzfd=%srrrz bufsize=%srz<%s>r)r"rrrrrrrr rr Z EVENT_WRITEget_write_buffer_sizer)r r>r!rr`rrrrs(          z _UnixWritePipeTransport.__repr__cCs t|jS)N)lenr)r rrrrsz-_UnixWritePipeTransport.get_write_buffer_sizecCs6|jjrtjd||jr*|jtn|jdS)Nz%r was closed by peer)rrrr>rrBrokenPipeError)r rrrrs   z#_UnixWritePipeTransport._read_readycCst|trt|}|sdS|js&|jrN|jtjkrs&   z$_UnixWritePipeTransport._write_readycCsdS)NTr)r rrr can_write_eofXsz%_UnixWritePipeTransport.can_write_eofcCs8|jr dSd|_|js4|jj|j|jj|jddS)NT)rrrrrrr)r rrr write_eof[s z!_UnixWritePipeTransport.write_eofcCs ||_dS)N)r)r rQrrrrdsz$_UnixWritePipeTransport.set_protocolcCs|jS)N)r)r rrrrgsz$_UnixWritePipeTransport.get_protocolcCs|jS)N)r)r rrrrjsz"_UnixWritePipeTransport.is_closingcCs|jdk r|j r|jdS)N)rrr)r rrrr&msz_UnixWritePipeTransport.closecCs,|jdk r(tjd|t|d|jjdS)Nzunclosed transport %r)r%)rr+r,r-r&)r rrrrvs  z_UnixWritePipeTransport.__del__cCs|jddS)N)r)r rrrabort|sz_UnixWritePipeTransport.abortFatal error on pipe transportcCsPt|tjr*|jjrBtjd||ddn|jj||||jd|j |dS)Nz%r: %sT)r)rrrrrQ) rLrZ_FATAL_ERROR_IGNORErrrrrrr)r rDrrrrrs   z$_UnixWritePipeTransport._fatal_errorcCsFd|_|jr|jj|j|jj|jj|j|jj|j|dS)NT) rrrrrr.rrr)r rDrrrrs  z_UnixWritePipeTransport._closec Cs4z|jj|Wd|jjd|_d|_d|_XdS)N)rrrr&r)r rDrrrrs  z-_UnixWritePipeTransport._call_connection_lost)NN)r)N)rrrrrrrrrrrrrrr&rrrrrrrrrr)r"rrUs$% !   rUset_inheritablecCsNttdd}tj|tj}|s4tj|tj||Bntj|tj||@dS)NZ FD_CLOEXECr)rrZF_GETFDZF_SETFD)rZ inheritableZ cloexec_flagoldrrr_set_inheritables  rc@seZdZddZdS)rXc Ksvd}|tjkr*|jj\}}t|jdtj|f||||d|d||_|dk rr|jt |j d|d|j_ dS)NF)r\r]r^r_Zuniversal_newlinesr`wb) buffering) subprocessPIPErr$rr8Popen_procr&rdetachr]) r rCr\r]r^r_r`raZstdin_wrrr_starts  z_UnixSubprocessTransport._startN)rrrrrrrrrXsrXc@s<eZdZddZddZddZddZd d Zd d Zd S)rcGs tdS)N)NotImplementedError)r rfrBrCrrrrYs z&AbstractChildWatcher.add_child_handlercCs tdS)N)r)r rfrrrremove_child_handlersz)AbstractChildWatcher.remove_child_handlercCs tdS)N)r)r rrrr attach_loopsz AbstractChildWatcher.attach_loopcCs tdS)N)r)r rrrr&szAbstractChildWatcher.closecCs tdS)N)r)r rrr __enter__szAbstractChildWatcher.__enter__cCs tdS)N)r)r abcrrr__exit__ szAbstractChildWatcher.__exit__N) rrrrYrrr&rrrrrrrs   c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)BaseChildWatchercCsd|_i|_dS)N)r _callbacks)r rrrrszBaseChildWatcher.__init__cCs|jddS)N)r)r rrrr&szBaseChildWatcher.closecCs tdS)N)r)r expected_pidrrr _do_waitpidszBaseChildWatcher._do_waitpidcCs tdS)N)r)r rrr_do_waitpid_allsz BaseChildWatcher._do_waitpid_allcCsf|jdk r$|dkr$|jr$tjdt|jdk r<|jjtj||_|dk rb|jtj|j |j dS)NzCA loop is being detached from a child watcher with pending handlers) rrr+r,RuntimeWarningr*r6SIGCHLDrF _sig_chldr)r rrrrrs zBaseChildWatcher.attach_loopcCsFy |jWn4tk r@}z|jjd|dWYdd}~XnXdS)Nz$Unknown exception in SIGCHLD handler)rr)rr[rr)r rDrrrr1s  zBaseChildWatcher._sig_chldcCs2tj|rtj| Stj|r*tj|S|SdS)N)r{ WIFSIGNALEDWTERMSIG WIFEXITED WEXITSTATUS)r statusrrr_compute_returncode=s     z$BaseChildWatcher._compute_returncodeN) rrrrr&rrrrrrrrrrs rcsLeZdZfddZddZddZddZd d Zd d Zd dZ Z S)rcs|jjtjdS)N)rr.rr&)r )r"rrr&Vs zSafeChildWatcher.closecCs|S)Nr)r rrrrZszSafeChildWatcher.__enter__cCsdS)Nr)r rrrrrrr]szSafeChildWatcher.__exit__cGs.|jdkrtd||f|j|<|j|dS)NzICannot add child handler, the child watcher does not have a loop attached)rr;rr)r rfrBrCrrrrY`s  z"SafeChildWatcher.add_child_handlerc Cs&y |j|=dStk r dSXdS)NTF)rrH)r rfrrrrks z%SafeChildWatcher.remove_child_handlercCs"xt|jD]}|j|q WdS)N)r)rr)r rfrrrrrsz SafeChildWatcher._do_waitpid_allcCsytj|tj\}}Wn(tk r>|}d}tjd|Yn0X|dkrLdS|j|}|jjrntj d||y|j j |\}}Wn.t k r|jjrtjd|ddYnX|||f|dS)Nz8Unknown child process pid %d, will report returncode 255rz$process %s exited with returncode %sz'Child watcher got an unexpected pid: %rT)r) r{waitpidWNOHANGChildProcessErrorrrrrrrrpoprH)r rrfrrgrBrCrrrrws*    zSafeChildWatcher._do_waitpid) rrrr&rrrYrrrrrr)r"rrKs  csPeZdZfddZfddZddZddZd d Zd d Zd dZ Z S)rcs$tjtj|_i|_d|_dS)Nr)rr threadingZLock_lock_zombies_forks)r )r"rrrs  zFastChildWatcher.__init__cs"|jj|jjtjdS)N)rr.rrr&)r )r"rrr&s  zFastChildWatcher.closec Cs$|j|jd7_|SQRXdS)Nr)rr)r rrrrszFastChildWatcher.__enter__c CsV|j:|jd8_|js$|j r(dSt|j}|jjWdQRXtjd|dS)Nrz5Caught subprocesses termination from unknown pids: %s)rrrr<r.rr)r rrrZcollateral_victimsrrrrs zFastChildWatcher.__exit__cGsl|jdkrtd|j:y|jj|}Wn"tk rL||f|j|<dSXWdQRX|||f|dS)NzICannot add child handler, the child watcher does not have a loop attached)rr;rrrrHr)r rfrBrCrgrrrrYs z"FastChildWatcher.add_child_handlerc Cs&y |j|=dStk r dSXdS)NTF)rrH)r rfrrrrs z%FastChildWatcher.remove_child_handlercCsxytjdtj\}}Wntk r,dSX|dkr:dS|j|}|jvy|jj|\}}WnBtk r|j r||j |<|j j rt jd||wd}YnX|j j rt jd||WdQRX|dkrt jd||q|||f|qWdS)Nrrz,unknown process %s exited with returncode %sz$process %s exited with returncode %sz8Caught subprocess termination from unknown pid: %d -> %dr3)r{rrrrrrrrHrrrrrrr)r rfrrgrBrCrrrrs6      z FastChildWatcher._do_waitpid_all) rrrrr&rrrYrrrrr)r"rrs  csDeZdZeZfddZddZfddZddZd d Z Z S) _UnixDefaultEventLoopPolicycstjd|_dS)N)rr_watcher)r )r"rrr s z$_UnixDefaultEventLoopPolicy.__init__c CsHtj8|jdkr:t|_ttjtjr:|jj|j j WdQRXdS)N) rrrrrLrcurrent_thread _MainThreadr_localr)r rrr _init_watchers  z)_UnixDefaultEventLoopPolicy._init_watchercs6tj||jdk r2ttjtjr2|jj|dS)N)rset_event_looprrLrrrr)r r)r"rrrs  z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr|j|jS)N)rr)r rrrrW&s z-_UnixDefaultEventLoopPolicy.get_child_watchercCs|jdk r|jj||_dS)N)rr&)r rbrrrset_child_watcher0s  z-_UnixDefaultEventLoopPolicy.set_child_watcher) rrrrZ _loop_factoryrrrrWrrrr)r"rrs    r)4r?r{r6r#ryrr'rr+rrrrrrr r r r r logr__all__r ImportErrorrfspathrxAttributeErrorZBaseSelectorEventLooprhasattrrrZ ReadTransportrOZ_FlowControlMixinZWriteTransportrUrrZBaseSubprocessTransportrXrrrrZBaseDefaultEventLoopPolicyrrrrrrrsl                O  F=On2