U ifۿ@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZdZe jdkredddZGdddejZGdddejZ Gdddej!ej"Z#Gdddej$Z%GdddZ&ddZ'Gdd d e&Z(Gd!d"d"e(Z)Gd#d$d$e(Z*Gd%d&d&e&Z+Gd'd(d(e&Z,Gd)d*d*ej-Z.eZ/e.Z0dS)+N) base_events)base_subprocess) constants) coroutines)events) exceptions)futures)selector_events)tasks) transports)logger)SelectorEventLoopAbstractChildWatcherSafeChildWatcherFastChildWatcherMultiLoopChildWatcherThreadedChildWatcherDefaultEventLoopPolicyZwin32z+Signals are not really supported on WindowscCsdSN)signumframerr8/opt/alt/python38/lib64/python3.8/asyncio/unix_events.py_sighandler_noop*srcseZdZd(fdd ZfddZddZdd Zd d Zd d ZddZ d)ddZ d*ddZ d+ddZ ddZ d,dddddddZd-ddddddddZd d!Zd"d#Zd$d%Zd&d'ZZS)._UnixSelectorEventLoopNcst|i|_dSr)super__init___signal_handlers)selfselector __class__rrr5s z_UnixSelectorEventLoop.__init__csZtts.t|jD]}||qn(|jrVtjd|dt |d|j dS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removalsource) rclosesys is_finalizinglistrremove_signal_handlerwarningswarnResourceWarningclearrsigr!rrr%9s z_UnixSelectorEventLoop.closecCs|D]}|sq||qdSr)_handle_signal)rdatarrrr_process_self_dataGsz)_UnixSelectorEventLoop._process_self_datac GsLt|st|rtd|||zt|j Wn2t t fk rt}zt t |W5d}~XYnXt|||d}||j|<zt|tt|dWnt k rF}zz|j|=|jsztdWn4t t fk r}ztd|W5d}~XYnX|jtjkr4t d|dnW5d}~XYnXdS)Nz3coroutines cannot be used with add_signal_handler()Fset_wakeup_fd(-1) failed: %ssig  cannot be caught)rZ iscoroutineZiscoroutinefunction TypeError _check_signalZ _check_closedsignal set_wakeup_fdZ_csockfileno ValueErrorOSError RuntimeErrorstrrZHandlerr siginterruptr infoerrnoEINVAL)rr/callbackargsexchandleZnexcrrradd_signal_handlerNs2    z)_UnixSelectorEventLoop.add_signal_handlercCs8|j|}|dkrdS|jr*||n ||dSr)rgetZ _cancelledr)Z_add_callback_signalsafe)rr/rGrrrr0{s   z%_UnixSelectorEventLoop._handle_signalc Cs||z |j|=Wntk r,YdSX|tjkr@tj}ntj}zt||WnBtk r}z$|jtj krt d|dnW5d}~XYnX|jszt dWn2t tfk r}zt d|W5d}~XYnXdS)NFr5r6r3r4T)r8rKeyErrorr9SIGINTdefault_int_handlerSIG_DFLr=rBrCr>r:r<r rA)rr/handlerrFrrrr)s(    z,_UnixSelectorEventLoop.remove_signal_handlercCs6t|tstd||tkr2td|dS)Nzsig must be an int, not zinvalid signal number ) isinstanceintr7r9 valid_signalsr<r.rrrr8s  z$_UnixSelectorEventLoop._check_signalcCst|||||Sr)_UnixReadPipeTransportrpipeprotocolwaiterextrarrr_make_read_pipe_transportsz0_UnixSelectorEventLoop._make_read_pipe_transportcCst|||||Sr)_UnixWritePipeTransportrSrrr_make_write_pipe_transportsz1_UnixSelectorEventLoop._make_write_pipe_transportc st} | std|} t||||||||f| |d| } | | |j| z| IdHWnDt t fk rYn,t k r| | IdHYnXW5QRX| S)NzRasyncio.get_child_watcher() is not activated, subprocess support is not installed.)rVrW)rget_child_watcher is_activer> create_future_UnixSubprocessTransportadd_child_handlerZget_pid_child_watcher_callback SystemExitKeyboardInterrupt BaseExceptionr%Z_wait) rrUrEshellstdinstdoutstderrbufsizerWkwargswatcherrVtransprrr_make_subprocess_transports8   z1_UnixSelectorEventLoop._make_subprocess_transportcCs||j|dSr)call_soon_threadsafeZ_process_exited)rpid returncoderkrrrr`sz._UnixSelectorEventLoop._child_watcher_callback)sslsockserver_hostnamessl_handshake_timeoutc s |r|dkr6tdn |dk r&td|dk r6td|dk r|dk rNtdt|}ttjtjd}z |d|||IdHWq|YqXn@|dkrtd|j tjks|j tjkrtd||d|j |||||d IdH\}}||fS) Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with ssl1ssl_handshake_timeout is only meaningful with ssl3path and sock can not be specified at the same timerFzno path and sock were specified.A UNIX Domain Stream Socket was expected, got )rs) r<osfspathsocketAF_UNIX SOCK_STREAM setblockingZ sock_connectr%familytypeZ_create_connection_transport) rprotocol_factorypathrprqrrrs transportrUrrrcreate_unix_connectionsR      z-_UnixSelectorEventLoop.create_unix_connectiondT)rqbacklogrprs start_servingc st|trtd|dk r&|s&td|dk rH|dk r@tdt|}ttjtj}|ddkrz t t |j rt |WnBt k rYn0tk r}ztd||W5d}~XYnXz||Wnltk r0} z8|| jtjkrd|d} ttj| dnW5d} ~ XYn|YnXn<|dkrZtd |jtjksv|jtjkrtd ||d t||g||||} |r| tjd|d IdH| S) Nz*ssl argument must be an SSLContext or Nonertrur)rz2Unable to check or remove stale UNIX socket %r: %rzAddress z is already in usez-path was not specified, and no sock specifiedrvF)loop)rOboolr7r<rwrxryrzr{statS_ISSOCKst_moderemoveFileNotFoundErrorr=r errorZbindr%rBZ EADDRINUSEr}r~r|rZServerZ_start_servingr sleep) rrrrqrrprsrerrrFmsgZserverrrrcreate_unix_serversn           z)_UnixSelectorEventLoop.create_unix_serverc sz tjWn,tk r6}ztdW5d}~XYnXz |}Wn2ttjfk rv}ztdW5d}~XYnXzt|j }Wn,t k r}ztdW5d}~XYnX|r|n|} | sdS| } | | d||||| d| IdHS)Nzos.sendfile() is not availableznot a regular filer) rwsendfileAttributeErrorrSendfileNotAvailableErrorr;ioUnsupportedOperationfstatst_sizer=r]_sock_sendfile_native_impl) rrqfileoffsetcountrFr;rZfsize blocksizefutrrr_sock_sendfile_nativeJs2    z,_UnixSelectorEventLoop._sock_sendfile_nativec Cs,|} |dk r|||r4||||dS|rd||}|dkrd||||||dSzt| |||} WnDttfk r|dkr| ||| | |j || |||||| Ynbt k rj} z|dk r| j t jkrt| tk rtdt j} | | _| } |dkrBtd} |||||| n|||||| W5d} ~ XYnttfk rYntk r} z|||||| W5d} ~ XYnjX| dkr||||||nD|| 7}|| 7}|dkr | ||| | |j || |||||| dS)Nrzsocket is not connectedzos.sendfile call failed)r; remove_writer cancelled_sock_sendfile_update_fileposZ set_resultrwrBlockingIOErrorInterruptedError_sock_add_cancellation_callbackZ add_writerrr=rBZENOTCONNr~ConnectionError __cause__rrZ set_exceptionrarbrc)rrZ registered_fdrqr;rrr total_sentfdZsentrFnew_excrrrrras               z1_UnixSelectorEventLoop._sock_sendfile_native_implcCs|dkrt||tjdSNr)rwlseekSEEK_SET)rr;rrrrrrsz4_UnixSelectorEventLoop._sock_sendfile_update_fileposcsfdd}||dS)Ncs&|r"}|dkr"|dS)Nr3)rr;r)rrrrqrrcbszB_UnixSelectorEventLoop._sock_add_cancellation_callback..cb)Zadd_done_callback)rrrqrrrrrsz6_UnixSelectorEventLoop._sock_add_cancellation_callback)N)NN)NN)N)N)N)__name__ __module__ __qualname__rr%r2rHr0r)r8rXrZrlr`rrrrrr __classcell__rrr!rr/sF -       . CFrcseZdZdZdfdd ZddZddZd d Zd d Zd dZ ddZ ddZ ddZ e jfddZdddZddZddZZS) rRiNcst|||jd<||_||_||_||_d|_d|_ t |jj }t |st |st |sd|_d|_d|_tdt |jd|j|jj||j|jj|j|j|dk r|jtj|ddS)NrTFz)Pipe transport is for pipes/sockets only.)rr_extra_loop_piper;_fileno _protocol_closing_pausedrwrrrS_ISFIFOrS_ISCHRr< set_blocking call_soonconnection_made _add_reader _read_readyr _set_result_unless_cancelled)rrrTrUrVrWmoder!rrrs:      z_UnixReadPipeTransport.__init__cCs|jjg}|jdkr |dn|jr0|d|d|jt|jdd}|jdk r|dk rt ||jt j }|r|dq|dn |jdk r|dn |dd d |S) Nclosedclosingfd= _selectorpollingidleopen<{}> )r"rrappendrrgetattrrr _test_selector_event selectorsZ EVENT_READformatjoin)rrAr rrrr__repr__s(         z_UnixReadPipeTransport.__repr__c Cszt|j|j}WnDttfk r,Yntk rX}z||dW5d}~XYn^X|rl|j |nJ|j rt d|d|_|j |j|j |jj|j |jddS)Nz"Fatal read error on pipe transport%r was closed by peerT)rwreadrmax_sizerrr= _fatal_errorrZ data_receivedr get_debugr rAr_remove_readerrZ eof_received_call_connection_lost)rr1rFrrrrs  z"_UnixReadPipeTransport._read_readycCs>|js |jrdSd|_|j|j|jr:td|dS)NTz%r pauses reading)rrrrrrr debugrrrr pause_readings   z$_UnixReadPipeTransport.pause_readingcCsB|js |jsdSd|_|j|j|j|jr>td|dS)NFz%r resumes reading) rrrrrrrr rrrrrresume_readings   z%_UnixReadPipeTransport.resume_readingcCs ||_dSrrrrUrrr set_protocol sz#_UnixReadPipeTransport.set_protocolcCs|jSrrrrrr get_protocolsz#_UnixReadPipeTransport.get_protocolcCs|jSrrrrrr is_closingsz!_UnixReadPipeTransport.is_closingcCs|js|ddSr)r_closerrrrr%sz_UnixReadPipeTransport.closecCs,|jdk r(|d|t|d|jdSNzunclosed transport r#rr,r%r_warnrrr__del__s z_UnixReadPipeTransport.__del__Fatal error on pipe transportcCsZt|tr4|jtjkr4|jrLtjd||ddn|j||||j d| |dSNz%r: %sTexc_info)message exceptionrrU) rOr=rBZEIOrrr rcall_exception_handlerrrrrFrrrrrs z#_UnixReadPipeTransport._fatal_errorcCs(d|_|j|j|j|j|dSNT)rrrrrrrrFrrrr-sz_UnixReadPipeTransport._closecCs4z|j|W5|jd|_d|_d|_XdSrrr%rrZconnection_lostrrrrr2s  z,_UnixReadPipeTransport._call_connection_lost)NN)r)rrrrrrrrrrrrr%r*r+rrrrrrrr!rrRs rRcseZdZd%fdd ZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZejfddZddZd&dd Zd'd!d"Zd#d$ZZS)(rYNc st||||jd<||_||_||_t|_d|_ d|_ t |jj }t|}t|}t|} |s|s| sd|_d|_d|_tdt |jd|j|jj|| s|rtjds|j|jj|j|j|dk r|jtj|ddS)NrTrFz?Pipe transport is only for pipes, sockets and character devicesZaix)rrrrr;rr bytearray_buffer _conn_lostrrwrrrrrrr<rrrrr&platform startswithrrr r) rrrTrUrVrWrZis_charZis_fifoZ is_socketr!rrr?s:        z _UnixWritePipeTransport.__init__cCs|jjg}|jdkr |dn|jr0|d|d|jt|jdd}|jdk r|dk rt ||jt j }|r|dn |d| }|d|n |jdk r|dn |dd d |S) Nrrrrrrzbufsize=rrr)r"rrrrrrrr rrZ EVENT_WRITEget_write_buffer_sizerr)rrAr rrhrrrrds,         z _UnixWritePipeTransport.__repr__cCs t|jSr)lenrrrrrr|sz-_UnixWritePipeTransport.get_write_buffer_sizecCs6|jrtd||jr*|tn|dS)Nr)rrr rArrBrokenPipeErrorrrrrrs   z#_UnixWritePipeTransport._read_readyc Cs4t|trt|}|sdS|js&|jrN|jtjkr|}d}td|Yn.X|dkrLdSt|}|jrlt d||z|j |\}}Wn.t k r|jrtjd|ddYnX|||f|dS)N8Unknown child process pid %d, will report returncode 255r$process %s exited with returncode %s'Child watcher got an unexpected pid: %rTr) rwwaitpidWNOHANGChildProcessErrorr rr#rrrr%poprJ)rr&rnr"rorDrErrrr's4    zSafeChildWatcher._do_waitpid) rrrr%rrr_rr(r'rrrr!rrs rcsPeZdZfddZfddZddZddZd d Zd d Zd dZ Z S)rcs$tt|_i|_d|_dSr)rr threadingZLock_lock_zombies_forksrr!rrrs  zFastChildWatcher.__init__cs"|j|jtdSr)r%r-r:rr%rr!rrr%s  zFastChildWatcher.closec Cs0|j |jd7_|W5QRSQRXdS)Nr)r9r;rrrrrszFastChildWatcher.__enter__c Cs^|jB|jd8_|js"|js0W5QRdSt|j}|jW5QRXtd|dS)Nrz5Caught subprocesses termination from unknown pids: %s)r9r;r:r?r-r r)rrrrZcollateral_victimsrrrrs  zFastChildWatcher.__exit__c Gsf|jFz|j|}Wn.tk rF||f|j|<YW5QRdSXW5QRX|||f|dSr)r9r:r7rJr%)rrnrDrErorrrr_'sz"FastChildWatcher.add_child_handlercCs*z|j|=WdStk r$YdSXdSr-r.rrrrr5s z%FastChildWatcher.remove_child_handlerc Csztdtj\}}Wntk r,YdSX|dkr:dSt|}|jz|j|\}}WnNtk r|j r||j |<|j rt d||YW5QRqd}YnX|j rt d||W5QRX|dkrt d||q|||f|qdS)Nr3rz,unknown process %s exited with returncode %sr2z8Caught subprocess termination from unknown pid: %d -> %d)rwr4r5r6r#r9r%r7rJr;r:rrr rr)rrnr"rorDrErrrr(<s@    z FastChildWatcher._do_waitpid_all) rrrrr%rrr_rr(rrrr!rrs  rc@sdeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ dS)rcCsi|_d|_dSr)r%_saved_sighandlerrrrrrzszMultiLoopChildWatcher.__init__cCs |jdk Sr)r<rrrrr\~szMultiLoopChildWatcher.is_activecCsT|j|jdkrdSttj}||jkr:tdnttj|jd|_dS)Nz+SIGCHLD handler was changed by outside code) r%r-r<r9 getsignalr*r+r r)rrNrrrr%s     zMultiLoopChildWatcher.closecCs|SrrrrrrrszMultiLoopChildWatcher.__enter__cCsdSrrrexc_typeZexc_valZexc_tbrrrrszMultiLoopChildWatcher.__exit__cGs&t}|||f|j|<||dSr)rget_running_loopr%r')rrnrDrErrrrr_sz'MultiLoopChildWatcher.add_child_handlercCs*z|j|=WdStk r$YdSXdSr-r.rrrrrs z*MultiLoopChildWatcher.remove_child_handlercCsN|jdk rdSttj|j|_|jdkrsz6ThreadedChildWatcher._join_threads..)r(rEvaluesr)rthreadsrKrrrrFsz"ThreadedChildWatcher._join_threadscCs|SrrrrrrrszThreadedChildWatcher.__enter__cCsdSrrr>rrrrszThreadedChildWatcher.__exit__cCs6ddt|jD}|r2||jdt|ddS)NcSsg|]}|r|qSr)rGrIrrrrL sz0ThreadedChildWatcher.__del__..z0 has registered but not finished child processesr#)r(rErMr"r,)rrrNrrrrs  zThreadedChildWatcher.__del__cGsFt}tj|jdt|j||||fdd}||j|<|dS)Nzwaitpid-T)targetnamerErH) rr@r8ZThreadr'nextrDrEstart)rrnrDrErrKrrrr_s  z&ThreadedChildWatcher.add_child_handlercCsdSrrrrrrrsz)ThreadedChildWatcher.remove_child_handlercCsdSrrrrrrrsz ThreadedChildWatcher.attach_loopcCszt|d\}}Wn(tk r<|}d}td|Yn Xt|}|r\td|||rttd||n|j |||f||j |dS)Nrr0r1r2rA) rwr4r6r rr#rrrBrmrEr7)rrr&rDrErnr"rorrrr'"s& z ThreadedChildWatcher._do_waitpidN)rrrrr\r%rFrrr*r+rr_rrr'rrrrrs  rcsDeZdZeZfddZddZfddZddZd d Z Z S) _UnixDefaultEventLoopPolicycstd|_dSr)rr_watcherrr!rrrAs z$_UnixDefaultEventLoopPolicy.__init__c CsHtj8|jdkr:t|_tttjr:|j|j j W5QRXdSr) rr9rTrrOr8current_thread _MainThreadr_localrrrrr _init_watcherEs z)_UnixDefaultEventLoopPolicy._init_watchercs6t||jdk r2tttjr2|j|dSr)rset_event_looprTrOr8rUrVrrr!rrrYMs   z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr||jSr)rTrXrrrrr[[s z-_UnixDefaultEventLoopPolicy.get_child_watchercCs|jdk r|j||_dSr)rTr%)rrjrrrset_child_watcheres  z-_UnixDefaultEventLoopPolicy.set_child_watcher) rrrrZ _loop_factoryrrXrYr[rZrrrr!rrS=s    rS)1rBrrCrwrr9ryrr r&r8r*rrrrrrr r r r logr __all__r ImportErrorrZBaseSelectorEventLooprZ ReadTransportrRZ_FlowControlMixinZWriteTransportrYZBaseSubprocessTransportr^rr#r$rrrrZBaseDefaultEventLoopPolicyrSrrrrrrs^             NO5Ji}Y3