B ‡Ž€Æ›Õ0œã@s–ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl m Z ddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd lmZd Zejdkræedƒ‚dd„ZGdd„dejƒZGdd„dejƒZGdd„dejej ƒZ!Gdd„de j"ƒZ#Gdd„dƒZ$Gdd„de$ƒZ%Gdd„de%ƒZ&Gd d!„d!e%ƒZ'Gd"d#„d#ej(ƒZ)eZ*e)Z+dS)$éNé)Ú base_events)Úbase_subprocess)Ú constants)Ú coroutines)Úevents)Úfutures)Úselector_events)Útasks)Ú transports)Úlogger)ÚSelectorEventLoopÚAbstractChildWatcherÚSafeChildWatcherÚFastChildWatcherÚDefaultEventLoopPolicyÚwin32z+Signals are not really supported on WindowscCsdS)N©)ÚsignumÚframerrú6/opt/alt/python37/lib/python3.7/asyncio/unix_events.pyÚ_sighandler_noop'srcsÆeZdZd(‡fdd„ Z‡fdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z d)dd„Z d*dd„Z d+dd„Z dd„Z d,dddddœdd„Zd-ddddddœdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Z‡ZS).Ú_UnixSelectorEventLoopNcstƒ |¡i|_dS)N)ÚsuperÚ__init__Ú_signal_handlers)ÚselfÚselector)Ú __class__rrr2s z_UnixSelectorEventLoop.__init__cs^tƒ ¡t ¡s2xFt|jƒD]}| |¡qWn(|jrZtjd|›dt |d|j  ¡dS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removal)Úsource) rÚcloseÚsysÚ is_finalizingÚlistrÚremove_signal_handlerÚwarningsÚwarnÚResourceWarningÚclear)rÚsig)rrrr 6s z_UnixSelectorEventLoop.closecCs"x|D]}|sq| |¡qWdS)N)Ú_handle_signal)rÚdatarrrrÚ_process_self_dataDs z)_UnixSelectorEventLoop._process_self_datac GsLt |¡st |¡rtdƒ‚| |¡| ¡yt |j  ¡¡Wn2t t fk rt}zt t |ƒƒ‚Wdd}~XYnXt |||d¡}||j|<yt |t¡t |d¡Wnšt k rF}zz|j|=|jsyt d¡Wn4t t fk r}zt d|¡Wdd}~XYnX|jtjkr4t d|›dƒ‚n‚Wdd}~XYnXdS)Nz3coroutines cannot be used with add_signal_handler()Féÿÿÿÿzset_wakeup_fd(-1) failed: %szsig z cannot be caught)rZ iscoroutineZiscoroutinefunctionÚ TypeErrorÚ _check_signalZ _check_closedÚsignalÚ set_wakeup_fdZ_csockÚfilenoÚ ValueErrorÚOSErrorÚ RuntimeErrorÚstrrZHandlerrÚ siginterruptr ÚinfoÚerrnoÚEINVAL)rr)ÚcallbackÚargsÚexcÚhandleZnexcrrrÚadd_signal_handlerKs0     z)_UnixSelectorEventLoop.add_signal_handlercCs8|j |¡}|dkrdS|jr*| |¡n | |¡dS)N)rÚgetZ _cancelledr$Z_add_callback_signalsafe)rr)r>rrrr*xs   z%_UnixSelectorEventLoop._handle_signalc Csä| |¡y |j|=Wntk r*dSX|tjkr>tj}ntj}yt ||¡WnBtk r–}z$|jtj kr„t d|›dƒ‚n‚Wdd}~XYnX|jsàyt  d¡Wn2t tfk rÞ}zt  d|¡Wdd}~XYnXdS)NFzsig z cannot be caughtr-zset_wakeup_fd(-1) failed: %sT)r/rÚKeyErrorr0ÚSIGINTÚdefault_int_handlerÚSIG_DFLr4r9r:r5r1r3r r8)rr)Zhandlerr=rrrr$‚s(    z,_UnixSelectorEventLoop.remove_signal_handlercCsLt|tƒstd|›ƒ‚d|kr.tjksHntd|›dtj›dƒ‚dS)Nzsig must be an int, not rzsig z out of range(1, ú))Ú isinstanceÚintr.r0ÚNSIGr3)rr)rrrr/¢s z$_UnixSelectorEventLoop._check_signalcCst|||||ƒS)N)Ú_UnixReadPipeTransport)rÚpipeÚprotocolÚwaiterÚextrarrrÚ_make_read_pipe_transport®sz0_UnixSelectorEventLoop._make_read_pipe_transportcCst|||||ƒS)N)Ú_UnixWritePipeTransport)rrJrKrLrMrrrÚ_make_write_pipe_transport²sz1_UnixSelectorEventLoop._make_write_pipe_transportc Ës”t ¡‚} | ¡} t||||||||f| |dœ| —Ž} |  |  ¡|j| ¡y| IdHWn,tk r„|  ¡|   ¡IdH‚YnXWdQRX| S)N)rLrM) rÚget_child_watcherÚ create_futureÚ_UnixSubprocessTransportÚadd_child_handlerZget_pidÚ_child_watcher_callbackÚ Exceptionr Z_wait) rrKr<ÚshellÚstdinÚstdoutÚstderrÚbufsizerMÚkwargsÚwatcherrLÚtransprrrÚ_make_subprocess_transport¶s     z1_UnixSelectorEventLoop._make_subprocess_transportcCs| |j|¡dS)N)Zcall_soon_threadsafeZ_process_exited)rÚpidÚ returncoder^rrrrUËsz._UnixSelectorEventLoop._child_watcher_callback)ÚsslÚsockÚserver_hostnameÚssl_handshake_timeoutc Ãs |r|dkr6tdƒ‚n |dk r&tdƒ‚|dk r6tdƒ‚|dk r¤|dk rNtdƒ‚t |¡}t tjtjd¡}y | d¡| ||¡IdHWqä| ¡‚YqäXn@|dkr´tdƒ‚|j tjksÌ|j tjkrÚtd|›ƒ‚| d¡|j |||||d IdH\}}||fS) Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with sslz1ssl_handshake_timeout is only meaningful with sslz3path and sock can not be specified at the same timerFzno path and sock were specifiedz.A UNIX Domain Stream Socket was expected, got )re) r3ÚosÚfspathÚsocketÚAF_UNIXÚ SOCK_STREAMÚ setblockingZ sock_connectr ÚfamilyÚtypeZ_create_connection_transport) rÚprotocol_factoryÚpathrbrcrdreÚ transportrKrrrÚcreate_unix_connectionÎs@       z-_UnixSelectorEventLoop.create_unix_connectionédT)rcÚbacklogrbreÚ start_servingc ÃsÊt|tƒrtdƒ‚|dk r&|s&tdƒ‚|dk rH|dk r@tdƒ‚t |¡}t tjtj¡}|ddkrÊy t   t  |¡j ¡r„t  |¡WnBt k ršYn0tk rÈ}zt d||¡Wdd}~XYnXy| |¡Wnltk r0} z8| ¡| jtjkrd|›d} ttj| ƒd‚n‚Wdd} ~ XYn| ¡‚YnXn<|dkrZtd ƒ‚|jtjksv|jtjkr„td |›ƒ‚| d ¡t ||g||||¡} |rÆ|  ¡tjd|d IdH| S) Nz*ssl argument must be an SSLContext or Nonez1ssl_handshake_timeout is only meaningful with sslz3path and sock can not be specified at the same timer)rúz2Unable to check or remove stale UNIX socket %r: %rzAddress z is already in usez-path was not specified, and no sock specifiedz.A UNIX Domain Stream Socket was expected, got F)Úloop)rFÚboolr.r3rfrgrhrirjÚstatÚS_ISSOCKÚst_modeÚremoveÚFileNotFoundErrorr4r ÚerrorZbindr r9Z EADDRINUSErlrmrkrZServerZ_start_servingr Zsleep) rrnrorcrsrbrertÚerrr=ÚmsgZserverrrrÚcreate_unix_serverûsZ            z)_UnixSelectorEventLoop.create_unix_serverc Ãsôy tjWn,tk r6}zt d¡‚Wdd}~XYnXy | ¡}Wn2ttjfk rv}zt d¡‚Wdd}~XYnXyt |¡j }Wn,t k r´}zt d¡‚Wdd}~XYnX|r¾|n|} | sÊdS|  ¡} |  | d||||| d¡| IdHS)Nzos.sendfile() is not availableznot a regular filer) rfÚsendfileÚAttributeErrorrÚSendfileNotAvailableErrorr2ÚioÚUnsupportedOperationÚfstatÚst_sizer4rRÚ_sock_sendfile_native_impl) rrcÚfileÚoffsetÚcountr=r2r~ZfsizeÚ blocksizeÚfutrrrÚ_sock_sendfile_native>s(     z,_UnixSelectorEventLoop._sock_sendfile_nativec Cs| ¡} |dk r| |¡| ¡r4| |||¡dS|rd||}|dkrd| |||¡| |¡dSyt | |||¡} Wn*ttfk rÆ|dkr¢|  ||¡|  | |j || ||||||¡ YnHt k rj} z†|dk r| j t jkrt| ƒtk rtdt jƒ} | | _| } |dkrBt d¡} | |||¡| | ¡n| |||¡| | ¡Wdd} ~ XYn¤tk r¤} z| |||¡| | ¡Wdd} ~ XYnjX| dkrÊ| |||¡| |¡nD|| 7}|| 7}|dkrð|  ||¡|  | |j || ||||||¡ dS)Nrzsocket is not connectedzos.sendfile call failed)r2Ú remove_writerÚ cancelledÚ_sock_sendfile_update_fileposZ set_resultrfrÚBlockingIOErrorÚInterruptedErrorÚ_sock_add_cancellation_callbackZ add_writerrˆr4r9ZENOTCONNrmÚConnectionErrorÚ __cause__rrƒZ set_exceptionrV)rrZ registered_fdrcr2rŠr‹rŒÚ total_sentÚfdZsentr=Únew_excr~rrrrˆUs`             z1_UnixSelectorEventLoop._sock_sendfile_native_implcCs|dkrt ||tj¡dS)Nr)rfÚlseekÚSEEK_SET)rr2rŠr—rrrr‘™sz4_UnixSelectorEventLoop._sock_sendfile_update_fileposcs‡‡fdd„}| |¡dS)Ncs&| ¡r"ˆ ¡}|dkr"ˆ |¡dS)Nr-)rr2r)rr˜)rrcrrÚcbžszB_UnixSelectorEventLoop._sock_add_cancellation_callback..cb)Zadd_done_callback)rrrcrœr)rrcrr”sz6_UnixSelectorEventLoop._sock_add_cancellation_callback)N)NN)NN)N)N)N)Ú__name__Ú __module__Ú __qualname__rr r,r?r*r$r/rNrPr_rUrqr€rŽrˆr‘r”Ú __classcell__rr)rrr,s2 -      *?Drcs„eZdZdZd‡fdd„ Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z ddd„Zdd„Zdd„Z‡ZS) rIiNcsÚtƒ |¡||jd<||_||_| ¡|_||_d|_d|_ t   |j¡j }t  |¡s„t  |¡s„t  |¡s„d|_d|_d|_tdƒ‚t  |jd¡|j |jj|¡|j |jj|j|j¡|dk rÖ|j tj|d¡dS)NrJFz)Pipe transport is for pipes/sockets only.)rrÚ_extraÚ_loopÚ_piper2Ú_filenoÚ _protocolÚ_closingÚ_pausedrfr†rzrxÚS_ISFIFOryÚS_ISCHRr3Ú set_blockingÚ call_soonÚconnection_madeÚ _add_readerÚ _read_readyrÚ_set_result_unless_cancelled)rrvrJrKrLrMÚmode)rrrrªs.         z_UnixReadPipeTransport.__init__cCsÀ|jjg}|jdkr | d¡n|jr0| d¡| d|j›¡t|jddƒ}|jdk r|dk rt  ||jt j ¡}|r„| d¡q°| d¡n |jdk r¦| d¡n | d¡d  d   |¡¡S) NÚclosedÚclosingzfd=Ú _selectorÚpollingÚidleÚopenz<{}>ú )rrr£Úappendr¦r¤Úgetattrr¢r Ú_test_selector_eventÚ selectorsZ EVENT_READÚformatÚjoin)rr8rr´rrrÚ__repr__Ès"         z_UnixReadPipeTransport.__repr__c Csºyt |j|j¡}WnDttfk r,YnŠtk rX}z| |d¡Wdd}~XYn^X|rl|j  |¡nJ|j   ¡r‚t   d|¡d|_|j  |j¡|j  |jj¡|j  |jd¡dS)Nz"Fatal read error on pipe transportz%r was closed by peerT)rfÚreadr¤Úmax_sizer’r“r4Ú _fatal_errorr¥Z data_receivedr¢Ú get_debugr r8r¦Ú_remove_readerr«Z eof_receivedÚ_call_connection_lost)rr+r=rrrr®Ýs  z"_UnixReadPipeTransport._read_readycCs>|js |jrdSd|_|j |j¡|j ¡r:t d|¡dS)NTz%r pauses reading)r¦r§r¢rÃr¤rÂr Údebug)rrrrÚ pause_readingïs   z$_UnixReadPipeTransport.pause_readingcCsB|js |jsdSd|_|j |j|j¡|j ¡r>t d|¡dS)NFz%r resumes reading) r¦r§r¢r­r¤r®rÂr rÅ)rrrrÚresume_reading÷s   z%_UnixReadPipeTransport.resume_readingcCs ||_dS)N)r¥)rrKrrrÚ set_protocolÿsz#_UnixReadPipeTransport.set_protocolcCs|jS)N)r¥)rrrrÚ get_protocolsz#_UnixReadPipeTransport.get_protocolcCs|jS)N)r¦)rrrrÚ is_closingsz!_UnixReadPipeTransport.is_closingcCs|js| d¡dS)N)r¦Ú_close)rrrrr sz_UnixReadPipeTransport.closecCs.|jdk r*tjd|›t|d|j ¡dS)Nzunclosed transport )r)r£r%r&r'r )rrrrÚ__del__ s z_UnixReadPipeTransport.__del__úFatal error on pipe transportcCsZt|tƒr4|jtjkr4|j ¡rLtjd||ddn|j ||||j dœ¡|  |¡dS)Nz%r: %sT)Úexc_info)ÚmessageÚ exceptionrprK) rFr4r9ZEIOr¢rÂr rÅÚcall_exception_handlerr¥rË)rr=rÏrrrrÁs  z#_UnixReadPipeTransport._fatal_errorcCs(d|_|j |j¡|j |j|¡dS)NT)r¦r¢rÃr¤r«rÄ)rr=rrrrË sz_UnixReadPipeTransport._closecCs4z|j |¡Wd|j ¡d|_d|_d|_XdS)N)r¥Úconnection_lostr£r r¢)rr=rrrrÄ%s  z,_UnixReadPipeTransport._call_connection_lost)NN)rÍ)rržrŸrÀrr¾r®rÆrÇrÈrÉrÊr rÌrÁrËrÄr rr)rrrI¦s rIcs¢eZdZd%‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zd&dd „Zd'd!d"„Zd#d$„Z‡ZS)(rONc sþtƒ ||¡||jd<||_| ¡|_||_tƒ|_d|_ d|_ t   |j¡j }t |¡}t |¡}t |¡} |s”|s”| s”d|_d|_d|_tdƒ‚t  |jd¡|j |jj|¡| sÈ|ràtj d¡sà|j |jj|j|j¡|dk rú|j tj|d¡dS)NrJrFz?Pipe transport is only for pipes, sockets and character devicesZaix)rrr¡r£r2r¤r¥Ú bytearrayÚ_bufferÚ _conn_lostr¦rfr†rzrxr©r¨ryr3rªr¢r«r¬r!ÚplatformÚ startswithr­r®rr¯) rrvrJrKrLrMr°Zis_charZis_fifoZ is_socket)rrrr2s2         z _UnixWritePipeTransport.__init__cCsØ|jjg}|jdkr | d¡n|jr0| d¡| d|j›¡t|jddƒ}|jdk r¨|dk r¨t  ||jt j ¡}|r„| d¡n | d¡|  ¡}| d|›¡n |jdk r¾| d¡n | d¡d   d  |¡¡S) Nr±r²zfd=r³r´rµzbufsize=r¶z<{}>r·)rrr£r¸r¦r¤r¹r¢r rºr»Z EVENT_WRITEÚget_write_buffer_sizer¼r½)rr8rr´r[rrrr¾Ws&         z _UnixWritePipeTransport.__repr__cCs t|jƒS)N)ÚlenrÔ)rrrrrØosz-_UnixWritePipeTransport.get_write_buffer_sizecCs6|j ¡rt d|¡|jr*| tƒ¡n| ¡dS)Nz%r was closed by peer)r¢rÂr r8rÔrËÚBrokenPipeError)rrrrr®rs   z#_UnixWritePipeTransport._read_readyc Cst|tƒrt|ƒ}|sdS|js&|jrN|jtjkr|}d}t d|¡Yn0X|dkrLdS| |¡}|j ¡rnt  d||¡y|j   |¡\}}Wn.t k r°|j ¡r¬tjd|ddYnX|||f|žŽdS)Néÿz8Unknown child process pid %d, will report returncode 255rz$process %s exited with returncode %sz'Child watcher got an unexpected pid: %rT)rÎ) rfÚwaitpidÚWNOHANGÚChildProcessErrorr rÜrr¢rÂrÅröÚpoprA)rr÷r`rrar;r<rrrrøÁs*    zSafeChildWatcher._do_waitpid) rržrŸr rðrôrTrîrùrør rr)rrr•s  rcsPeZdZ‡fdd„Z‡fdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z ‡Z S)rcs$tƒ ¡t ¡|_i|_d|_dS)Nr)rrÚ threadingZLockÚ_lockÚ_zombiesÚ_forks)r)rrrrîs  zFastChildWatcher.__init__cs"|j ¡|j ¡tƒ ¡dS)N)rör(r rr )r)rrrr ôs  zFastChildWatcher.closec Cs$|j|jd7_|SQRXdS)Nr)r r )rrrrrðùszFastChildWatcher.__enter__c CsT|j8|jd8_|js"|js&dSt|jƒ}|j ¡WdQRXt d|¡dS)Nrz5Caught subprocesses termination from unknown pids: %s)r r r r6r(r rÜ)rrñròróZcollateral_victimsrrrrôÿs  zFastChildWatcher.__exit__c Gsl|jdkrtdƒ‚|j:y|j |¡}Wn"tk rL||f|j|<dSXWdQRX|||f|žŽdS)NzICannot add child handler, the child watcher does not have a loop attached)r¢r5r r rrArö)rr`r;r<rarrrrT s z"FastChildWatcher.add_child_handlercCs&y |j|=dStk r dSXdS)NTF)rörA)rr`rrrrî s z%FastChildWatcher.remove_child_handlerc Csöxðyt dtj¡\}}Wntk r,dSX|dkr:dS| |¡}|jvy|j |¡\}}WnBtk r¢|j rš||j |<|j   ¡r˜t  d||¡wd}YnX|j   ¡r¼t  d||¡WdQRX|dkrÞt  d||¡q|||f|žŽqWdS)Nr-rz,unknown process %s exited with returncode %sz$process %s exited with returncode %sz8Caught subprocess termination from unknown pid: %d -> %d)rfrrrrr rörrAr r r¢rÂr rÅrÜ)rr`rrar;r<rrrrù's6      z FastChildWatcher._do_waitpid_all) rržrŸrr rðrôrTrîrùr rr)rrräs  rcsDeZdZeZ‡fdd„Zdd„Z‡fdd„Zdd„Zd d „Z ‡Z S) Ú_UnixDefaultEventLoopPolicycstƒ ¡d|_dS)N)rrÚ_watcher)r)rrrrVs z$_UnixDefaultEventLoopPolicy.__init__c CsHtj8|jdkr:tƒ|_tt ¡tjƒr:|j |j j ¡WdQRXdS)N) rr r rrFrÚcurrent_threadÚ _MainThreadrïÚ_localr¢)rrrrÚ _init_watcherZs  z)_UnixDefaultEventLoopPolicy._init_watchercs6tƒ |¡|jdk r2tt ¡tjƒr2|j |¡dS)N)rÚset_event_loopr rFrrrrï)rrv)rrrrbs  z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr| ¡|jS)N)r r)rrrrrQps z-_UnixDefaultEventLoopPolicy.get_child_watchercCs|jdk r|j ¡||_dS)N)r r )rr]rrrÚset_child_watcherzs  z-_UnixDefaultEventLoopPolicy.set_child_watcher) rržrŸrZ _loop_factoryrrrrQrr rr)rrr Rs    r ),r9r„rfr»r0rhrxrçr!rr%Úrrrrrrr r r Úlogr Ú__all__rÖÚ ImportErrorrZBaseSelectorEventLooprZ ReadTransportrIZ_FlowControlMixinZWriteTransportrOZBaseSubprocessTransportrSrrõrrZBaseDefaultEventLoopPolicyr r rrrrrÚsP           | JF=On3