B ©Ø1ɨ›ã@sdZddlZddlZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd l mZGd d „d e je jƒZGdd„dee jƒZGdd„dee jƒZGdd„deƒZGdd„deee jƒZGdd„deee jƒZGdd„dejƒZdS))ÚBaseProactorEventLoopéNé)Ú base_events)Ú constants)Úevents)Úfutures)Ú protocols)Ússlproto)Ú transports)ÚloggercsxeZdZd‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z ddd„Z dd„Z dd„Z dd„Z‡ZS)Ú_ProactorBasePipeTransportNcsœtƒ ||¡| |¡||_| |¡||_d|_d|_d|_d|_ d|_ d|_ d|_ |jdk rl|j  ¡|j |jj|¡|dk r˜|j tj|d¡dS)NrF)ÚsuperÚ__init__Ú _set_extraÚ_sockÚ set_protocolÚ_serverÚ_bufferÚ _read_futÚ _write_futÚ_pending_writeÚ _conn_lostÚ_closingÚ _eof_writtenZ_attachÚ_loopÚ call_soonÚ _protocolZconnection_maderZ_set_result_unless_cancelled)ÚselfÚloopÚsockÚprotocolÚwaiterÚextraÚserver)Ú __class__©ú:/opt/alt/python37/lib/python3.7/asyncio/proactor_events.pyrs$     z#_ProactorBasePipeTransport.__init__cCsÄ|jjg}|jdkr | d¡n|jr0| d¡|jdk rP| d|j ¡›¡|jdk rl| d|j›¡|jdk rˆ| d|j›¡|jr¤| dt |jƒ›¡|j r´| d¡d  d   |¡¡S) NÚclosedÚclosingzfd=zread=zwrite=zwrite_bufsize=z EOF writtenz<{}>ú ) r$Ú__name__rÚappendrÚfilenorrrÚlenrÚformatÚjoin)rÚinfor%r%r&Ú__repr__2s         z#_ProactorBasePipeTransport.__repr__cCs||jd<dS)NÚpipe)Ú_extra)rrr%r%r&rDsz%_ProactorBasePipeTransport._set_extracCs ||_dS)N)r)rr r%r%r&rGsz'_ProactorBasePipeTransport.set_protocolcCs|jS)N)r)rr%r%r&Ú get_protocolJsz'_ProactorBasePipeTransport.get_protocolcCs|jS)N)r)rr%r%r&Ú is_closingMsz%_ProactorBasePipeTransport.is_closingcCs\|jr dSd|_|jd7_|js>|jdkr>|j |jd¡|jdk rX|j ¡d|_dS)NTr) rrrrrrÚ_call_connection_lostrÚcancel)rr%r%r&ÚclosePs  z _ProactorBasePipeTransport.closecCs,|jdk r(tjd|›t|d| ¡dS)Nzunclosed transport )Úsource)rÚwarningsÚwarnÚResourceWarningr8)rr%r%r&Ú__del__[s z"_ProactorBasePipeTransport.__del__úFatal error on pipe transportc CsVzDt|tƒr*|j ¡rBtjd||ddn|j ||||jdœ¡Wd| |¡XdS)Nz%r: %sT)Úexc_info)ÚmessageÚ exceptionZ transportr ) Ú isinstanceÚOSErrorrÚ get_debugr ÚdebugÚcall_exception_handlerrÚ _force_close)rÚexcr@r%r%r&Ú _fatal_erroras  z'_ProactorBasePipeTransport._fatal_errorcCs |jdk r6|j ¡s6|dkr*|j d¡n |j |¡|jr@dSd|_|jd7_|jrj|j ¡d|_|jr€|j ¡d|_d|_ d|_ |j   |j |¡dS)NTrr)Ú _empty_waiterÚdoneÚ set_resultZ set_exceptionrrrr7rrrrrr6)rrHr%r%r&rGps"   z'_ProactorBasePipeTransport._force_closec Cs^z|j |¡Wdt|jdƒr,|j tj¡|j ¡d|_|j}|dk rX|  ¡d|_XdS)NÚshutdown) rZconnection_lostÚhasattrrrMÚsocketZ SHUT_RDWRr8rZ_detach)rrHr#r%r%r&r6„s  z0_ProactorBasePipeTransport._call_connection_lostcCs"|j}|jdk r|t|jƒ7}|S)N)rrr-)rÚsizer%r%r&Úget_write_buffer_size•s z0_ProactorBasePipeTransport.get_write_buffer_size)NNN)r>)r*Ú __module__Ú __qualname__rr1rrr4r5r8r=rIrGr6rQÚ __classcell__r%r%)r$r&r s  r csPeZdZd‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zddd„Z ‡Z S)Ú_ProactorReadPipeTransportNcs:d|_d|_tƒ ||||||¡|j |j¡d|_dS)NTF)Ú _pending_dataÚ_pausedr rrrÚ _loop_reading)rrrr r!r"r#)r$r%r&r s z#_ProactorReadPipeTransport.__init__cCs|j o|j S)N)rWr)rr%r%r&Ú is_reading©sz%_ProactorReadPipeTransport.is_readingcCs0|js |jrdSd|_|j ¡r,t d|¡dS)NTz%r pauses reading)rrWrrDr rE)rr%r%r&Ú pause_reading¬s   z(_ProactorReadPipeTransport.pause_readingcCsn|js |jsdSd|_|jdkr0|j |jd¡|j}d|_|dk rT|j |j|¡|j ¡rjt   d|¡dS)NFz%r resumes reading) rrWrrrrXrVÚ_data_receivedrDr rE)rÚdatar%r%r&Úresume_reading¿s   z)_ProactorReadPipeTransport.resume_readingc Csd|j ¡rt d|¡y|j ¡}Wn.tk rR}z| |d¡dSd}~XYnX|s`| ¡dS)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) rrDr rErZ eof_receivedÚ ExceptionrIr8)rZ keep_openrHr%r%r&Ú _eof_receivedÑs  z(_ProactorReadPipeTransport._eof_receivedc Cs‚|jr||_dS|s | ¡dSt|jtjƒrryt |j|¡Wq~tk rn}z|  |d¡dSd}~XYq~Xn |j  |¡dS)Nz3Fatal error: protocol.buffer_updated() call failed.) rWrVr_rBrrZBufferedProtocolZ_feed_data_to_buffered_protor^rIZ data_received)rr\rHr%r%r&r[ßsz)_ProactorReadPipeTransport._data_receivedc Csdd}zBy`|dk r2d|_| ¡r*| ¡}n| ¡|jr@d}dS|dkrLdS|jsf|jj |j d¡|_WnÆt k r¶}z0|jsŽ|  |d¡n|j  ¡r¦t jdddWdd}~XYntk rà}z| |¡Wdd}~XYnftk r}z|  |d¡Wdd}~XYn8tjk r.|js*‚YnX|jsF|j |j¡Wd|dk r^| |¡XdS)Nói€z"Fatal read error on pipe transportz*Read error on pipe transport while closingT)r?)rrKÚresultr7rrWrÚ _proactorÚrecvrÚConnectionAbortedErrorrIrDr rEÚConnectionResetErrorrGrCrÚCancelledErrorÚadd_done_callbackrXr[)rÚfutr\rHr%r%r&rXös>   z(_ProactorReadPipeTransport._loop_reading)NNN)N) r*rRrSrrYrZr]r_r[rXrTr%r%)r$r&rUœsrUcsZeZdZdZ‡fdd„Zdd„Zddd„Zd d „Zd d „Zd d„Z dd„Z dd„Z ‡Z S)Ú_ProactorBaseWritePipeTransportTcstƒj||Žd|_dS)N)r rrJ)rÚargsÚkw)r$r%r&r.sz(_ProactorBaseWritePipeTransport.__init__cCsÈt|tttfƒs$tdt|ƒj›ƒ‚|jr2tdƒ‚|j dk rDtdƒ‚|sLdS|j rz|j t j krht  d¡|j d7_ dS|jdkr–|jt|ƒdn.|js°t|ƒ|_| ¡n|j |¡| ¡dS)Nz/data argument must be a bytes-like object, not zwrite_eof() already calledz(unable to write; sendfile is in progresszsocket.send() raised exception.r)r\)rBÚbytesÚ bytearrayÚ memoryviewÚ TypeErrorÚtyper*rÚ RuntimeErrorrJrrZ!LOG_THRESHOLD_FOR_CONNLOST_WRITESr ÚwarningrÚ _loop_writingrÚ_maybe_pause_protocolÚextend)rr\r%r%r&Úwrite2s*       z%_ProactorBaseWritePipeTransport.writeNc CsTyò|dk r|jdkr|jrdSd|_d|_|r6| ¡|dkrJ|j}d|_|s‚|jrd|j |jd¡|jrx|j   t j ¡|  ¡nN|jj |j |¡|_|j ¡sÂt|ƒ|_|j |j¡| ¡n|j |j¡|jdk rð|jdkrð|j d¡Wn\tk r }z| |¡Wdd}~XYn0tk rN}z| |d¡Wdd}~XYnXdS)Nrz#Fatal write error on pipe transport)rrrrarrrr6rrrMrOÚSHUT_WRZ_maybe_resume_protocolrbÚsendrKr-rgrsrtrJrLrerGrCrI)rÚfr\rHr%r%r&rsXs8    z-_ProactorBaseWritePipeTransport._loop_writingcCsdS)NTr%)rr%r%r&Ú can_write_eofsz-_ProactorBaseWritePipeTransport.can_write_eofcCs | ¡dS)N)r8)rr%r%r&Ú write_eof„sz)_ProactorBaseWritePipeTransport.write_eofcCs| d¡dS)N)rG)rr%r%r&Úabort‡sz%_ProactorBaseWritePipeTransport.abortcCs:|jdk rtdƒ‚|j ¡|_|jdkr4|j d¡|jS)NzEmpty waiter is already set)rJrqrZ create_futurerrL)rr%r%r&Ú_make_empty_waiterŠs     z2_ProactorBaseWritePipeTransport._make_empty_waitercCs d|_dS)N)rJ)rr%r%r&Ú_reset_empty_waiter’sz3_ProactorBaseWritePipeTransport._reset_empty_waiter)NN) r*rRrSZ_start_tls_compatiblerrvrsrzr{r|r}r~rTr%r%)r$r&ri(s & )rics$eZdZ‡fdd„Zdd„Z‡ZS)Ú_ProactorWritePipeTransportcs4tƒj||Ž|jj |jd¡|_|j |j¡dS)Né) r rrrbrcrrrgÚ _pipe_closed)rrjrk)r$r%r&r—sz$_ProactorWritePipeTransport.__init__cCs@| ¡r dS|jrdSd|_|jdk r4| tƒ¡n| ¡dS)N)Z cancelledrrrrGÚBrokenPipeErrorr8)rrhr%r%r&rœs z(_ProactorWritePipeTransport._pipe_closed)r*rRrSrrrTr%r%)r$r&r–s rc@seZdZdd„Zdd„ZdS)Ú_ProactorDuplexPipeTransportcCsdS)NFr%)rr%r%r&rz±sz*_ProactorDuplexPipeTransport.can_write_eofcCst‚dS)N)ÚNotImplementedError)rr%r%r&r{´sz&_ProactorDuplexPipeTransport.write_eofN)r*rRrSrzr{r%r%r%r&rƒ¬srƒcs>eZdZejjZd ‡fdd„ Zdd„Zdd„Z dd „Z ‡Z S) Ú_ProactorSocketTransportNcs$tƒ ||||||¡t |¡dS)N)r rrZ _set_nodelay)rrrr r!r"r#)r$r%r&r¿sz!_ProactorSocketTransport.__init__c Cs¨||jd<y| ¡|jd<Wn4tjtfk rP|j ¡rLtjd|ddYnXd|jkr¤y|  ¡|jd<Wn4tjtfk r¢|j ¡ržtjd|ddYnXdS)NrOZsocknamezgetsockname() failed on %rT)r?Úpeernamezgetpeername() failed on %r) r3Z getsocknamerOÚerrorÚAttributeErrorrrDr rrZ getpeername)rrr%r%r&rÄs    z#_ProactorSocketTransport._set_extracCsdS)NTr%)rr%r%r&rzÖsz&_ProactorSocketTransport.can_write_eofcCs2|js |jrdSd|_|jdkr.|j tj¡dS)NT)rrrrrMrOrw)rr%r%r&r{Ùs   z"_ProactorSocketTransport.write_eof)NNN) r*rRrSrZ _SendfileModeZ TRY_NATIVEZ_sendfile_compatiblerrrzr{rTr%r%)r$r&r…¸s r…csäeZdZ‡fdd„Zd1dd„Zd2ddddddœdd „Zd3d d „Zd4d d „Zd5dd„Z‡fdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zd d!„Zd"d#„Zd6d$d%„Zd&d'„Zd7d)d*„Zd+d,„Zd-d.„Zd/d0„Z‡ZS)8rcsHtƒ ¡t d|jj¡||_||_d|_i|_ |  |¡|  ¡dS)NzUsing proactor: %s) r rr rEr$r*rbÚ _selectorÚ_self_reading_futureÚ_accept_futuresZset_loopÚ_make_self_pipe)rZproactor)r$r%r&rãs  zBaseProactorEventLoop.__init__NcCst||||||ƒS)N)r…)rrr r!r"r#r%r%r&Ú_make_socket_transportís z,BaseProactorEventLoop._make_socket_transportF)Ú server_sideÚserver_hostnamer"r#Ússl_handshake_timeoutc Cs0tj||||||| d} t||| ||d| jS)N)r)r"r#)r Z SSLProtocolr…Z_app_transport) rZrawsockr Ú sslcontextr!rŽrr"r#rZ ssl_protocolr%r%r&Ú_make_ssl_transportòs z)BaseProactorEventLoop._make_ssl_transportcCst|||||ƒS)N)rƒ)rrr r!r"r%r%r&Ú_make_duplex_pipe_transportÿsz1BaseProactorEventLoop._make_duplex_pipe_transportcCst|||||ƒS)N)rU)rrr r!r"r%r%r&Ú_make_read_pipe_transportsz/BaseProactorEventLoop._make_read_pipe_transportcCst|||||ƒS)N)r)rrr r!r"r%r%r&Ú_make_write_pipe_transportsz0BaseProactorEventLoop._make_write_pipe_transportcsP| ¡rtdƒ‚| ¡rdS| ¡| ¡|j ¡d|_d|_tƒ ¡dS)Nz!Cannot close a running event loop) Z is_runningrqÚ is_closedÚ_stop_accept_futuresÚ_close_self_piperbr8r‰r )r)r$r%r&r8s zBaseProactorEventLoop.closecÃs|j ||¡IdHS)N)rbrc)rrÚnr%r%r&Ú sock_recv szBaseProactorEventLoop.sock_recvcÃs|j ||¡IdHS)N)rbZ recv_into)rrÚbufr%r%r&Úsock_recv_into#sz$BaseProactorEventLoop.sock_recv_intocÃs|j ||¡IdHS)N)rbrx)rrr\r%r%r&Ú sock_sendall&sz"BaseProactorEventLoop.sock_sendallcÃs|j ||¡IdHS)N)rbZconnect)rrZaddressr%r%r&Ú sock_connect)sz"BaseProactorEventLoop.sock_connectcÃs|j |¡IdHS)N)rbÚaccept)rrr%r%r&Ú sock_accept,sz!BaseProactorEventLoop.sock_acceptc Ãs(y | ¡}Wn2ttjfk r>}zt d¡‚Wdd}~XYnXyt |¡j}Wn,t k r|}zt d¡‚Wdd}~XYnX|r†|n|}|s’dSt |dƒ}|r®t |||ƒn|} t ||ƒ}d} zLxFt | ||ƒ}|dkrÞ| S|j   ||||¡IdH||7}| |7} qÄWWd| dkr"|  |¡XdS)Nznot a regular filerlÿÿ)r,rˆÚioÚUnsupportedOperationrZSendfileNotAvailableErrorÚosÚfstatÚst_sizerCÚminrbÚsendfileÚseek) rrÚfileÚoffsetÚcountr,ÚerrZfsizeZ blocksizeZend_posZ total_sentr%r%r&Ú_sock_sendfile_native/s2     z+BaseProactorEventLoop._sock_sendfile_nativecÃsV| ¡}| ¡| ¡IdHz|j|j|||ddIdHS| ¡|rP| ¡XdS)NF)Úfallback)rYrZr}Z sock_sendfilerr~r])rZtranspr©rªr«r]r%r%r&Ú_sendfile_nativeLsz&BaseProactorEventLoop._sendfile_nativecCsL|jdk r|j ¡d|_|j ¡d|_|j ¡d|_|jd8_dS)Nr)rŠr7Ú_ssockr8Ú_csockÚ _internal_fds)rr%r%r&r˜Xs    z&BaseProactorEventLoop._close_self_pipecCsFt ¡\|_|_|j d¡|j d¡|jd7_| |j¡dS)NFr)rOZ socketpairr°r±Z setblockingr²rÚ_loop_self_reading)rr%r%r&rŒbs   z%BaseProactorEventLoop._make_self_pipec Cs„y$|dk r| ¡|j |jd¡}WnHtjk r:dStk rl}z| d||dœ¡Wdd}~XYnX||_|  |j ¡dS)Niz.Error on reading from the event loop self pipe)r@rAr) rarbrcr°rrfr^rFrŠrgr³)rryrHr%r%r&r³jsz(BaseProactorEventLoop._loop_self_readingcCs>y|j d¡Wn(tk r8|jr4tjdddYnXdS)Nóz3Fail to write a null byte into the self-pipe socketT)r?)r±rxrCÚ_debugr rE)rr%r%r&Ú_write_to_self|s z$BaseProactorEventLoop._write_to_selfédcs(d‡‡‡‡‡‡‡fdd„ ‰ˆ ˆ¡dS)Nc s$yˆ|dk rn| ¡\}}ˆjr,t dˆ||¡ˆƒ}ˆdk rXˆj||ˆdd|iˆˆdnˆj||d|iˆdˆ ¡rzdSˆj ˆ¡}Wn~t k rè}zBˆ  ¡dkrˆ  d|ˆdœ¡ˆ  ¡nˆjrØtjd ˆdd Wdd}~XYn8t jk rˆ  ¡YnX|ˆjˆ  ¡<| ˆ¡dS) Nz#%r got a new connection from %r: %rTr†)rŽr"r#r)r"r#éÿÿÿÿzAccept failed on a socket)r@rArOzAccept failed on socket %r)r?)rarµr rEr’rr–rbrŸrCr,rFr8rrfr‹rg)ryZconnZaddrr rH)rÚprotocol_factoryrr#rrr‘r%r&r‰s@      z2BaseProactorEventLoop._start_serving..loop)N)r)rr¹rr‘r#Zbacklogrr%)rr¹rr#rrr‘r&Ú_start_serving…s%z$BaseProactorEventLoop._start_servingcCsdS)Nr%)rZ event_listr%r%r&Ú_process_events°sz%BaseProactorEventLoop._process_eventscCs*x|j ¡D] }| ¡q W|j ¡dS)N)r‹Úvaluesr7Úclear)rÚfuturer%r%r&r—´s z*BaseProactorEventLoop._stop_accept_futurescCs6|j | ¡d¡}|r| ¡|j |¡| ¡dS)N)r‹Úpopr,r7rbÚ _stop_servingr8)rrr¾r%r%r&rÀ¹s  z#BaseProactorEventLoop._stop_serving)NNN)N)NN)NN)NN)N)NNr·N)r*rRrSrrr’r“r”r•r8ršrœrržr r­r¯r˜rŒr³r¶rºr»r—rÀrTr%r%)r$r&rás<            )r)Ú__all__r¡r£rOr:Úrrrrrr r Úlogr Z_FlowControlMixinZ BaseTransportr Z ReadTransportrUZWriteTransportrirZ Transportrƒr…Z BaseEventLooprr%r%r%r&Ús8          m  '