a XC?h’}ã@sTdZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z dd lmZdd lmZdd lmZdd lmZd d„ZGdd„dejejƒZGdd„deejƒZGdd„deejƒZGdd„deƒZGdd„deejƒZGdd„deeejƒZGdd„deeejƒZ Gdd„de j!ƒZ"dS))ÚBaseProactorEventLoopéNé)Ú base_events)Ú constants)Úfutures)Ú exceptions)Ú protocols)Ússlproto)Ú transports)Útrsock)ÚloggercCs’t |¡|jd<z| ¡|jd<Wn.tjyP|j ¡rLtj d|dd�Yn0d|jvrŽz|  ¡|jd<WntjyŒd|jd<Yn0dS)NÚsocketZsocknamezgetsockname() failed on %rT©Úexc_infoÚpeername) r ÚTransportSocketÚ_extraZ getsocknamer ÚerrorÚ_loopÚ get_debugr ÚwarningZ getpeername)Ú transportÚsock©rúú ) r4Ú__name__r Úappendr(Úfilenor$r%r#Úlenr)ÚformatÚjoin)r-ÚinforrrÚ__repr__Hs         z#_ProactorBasePipeTransport.__repr__cCs||jd<dS)NÚpipe)r©r-rrrrrZsz%_ProactorBasePipeTransport._set_extracCs ||_dS©N©r+)r-r/rrrr!]sz'_ProactorBasePipeTransport.set_protocolcCs|jSrBrC©r-rrrÚ get_protocol`sz'_ProactorBasePipeTransport.get_protocolcCs|jSrB)r(rDrrrÚ is_closingcsz%_ProactorBasePipeTransport.is_closingcCs\|jr dSd|_|jd7_|js>|jdur>|j |jd¡|jdurX|j ¡d|_dS)NTr) r(r'r#r%rr*Ú_call_connection_lostr$ÚcancelrDrrrÚclosefs  z _ProactorBasePipeTransport.closecCs*|jdur&|d|›�t|d�| ¡dS)Nzunclosed transport )Úsource)r ÚResourceWarningrI)r-Z_warnrrrÚ__del__qs z"_ProactorBasePipeTransport.__del__úFatal error on pipe transportc Cs`zNt|tƒr*|j ¡rBtjd||dd�n|j ||||jdœ¡W| |¡n | |¡0dS)Nz%r: %sTr)ÚmessageÚ exceptionrr/) Ú isinstanceÚOSErrorrrr ÚdebugÚcall_exception_handlerr+Ú _force_close)r-ÚexcrNrrrÚ _fatal_errorvs  ü z'_ProactorBasePipeTransport._fatal_errorcCs |jdur6|j ¡s6|dur*|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_exceptionr(r'r%rHr$r&r#rr*rG)r-rUrrrrT…s"   z'_ProactorBasePipeTransport._force_closec CsÀzd|j |¡Wt|jdƒr8|j ¡dkr8|j tj¡|j ¡d|_|j }|dur¼|  ¡d|_ nVt|jdƒrŽ|j ¡dkrŽ|j tj¡|j ¡d|_|j }|durº|  ¡d|_ 0dS)NÚshutdownéÿÿÿÿ) r+Zconnection_lostÚhasattrr r:rZr Z SHUT_RDWRrIr"Z_detach)r-rUr2rrrrG™s$ ù z0_ProactorBasePipeTransport._call_connection_lostcCs"|j}|jdur|t|jƒ7}|SrB)r&r#r;)r-ÚsizerrrÚget_write_buffer_sizeªs z0_ProactorBasePipeTransport.get_write_buffer_size)NNN)rM)r8Ú __module__Ú __qualname__rr?rr!rErFrIÚwarningsÚwarnrLrVrTrGr^Ú __classcell__rrr3rr.sÿ  rcsPeZdZd‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zddd„Z ‡Z S)Ú_ProactorReadPipeTransportNcs:d|_d|_tƒ ||||||¡|j |j¡d|_dS)NTF)Ú _pending_dataÚ_pausedrrrr*Ú _loop_readingr,r3rrrµs z#_ProactorReadPipeTransport.__init__cCs|j o|j SrB)rfr(rDrrrÚ is_reading¾sz%_ProactorReadPipeTransport.is_readingcCs0|js |jrdSd|_|j ¡r,t d|¡dS)NTz%r pauses reading)r(rfrrr rRrDrrrÚ pause_readingÁs   z(_ProactorReadPipeTransport.pause_readingcCsn|js |jsdSd|_|jdur0|j |jd¡|j}d|_|durT|j |j|¡|j ¡rjt   d|¡dS)NFz%r resumes reading) r(rfr$rr*rgreÚ_data_receivedrr rR©r-ÚdatarrrÚresume_readingÔs   z)_ProactorReadPipeTransport.resume_readingc Cs~|j ¡rt d|¡z|j ¡}WnHttfy<‚Yn2tyl}z|  |d¡WYd}~dSd}~00|sz|  ¡dS)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) rrr rRr+Z eof_receivedÚ SystemExitÚKeyboardInterruptÚ BaseExceptionrVrI)r-Z keep_openrUrrrÚ _eof_receivedæs  ÿz(_ProactorReadPipeTransport._eof_receivedc Csœ|jr||_dS|s | ¡dSt|jtjƒrŒzt |j|¡Wq˜tt fyX‚Yq˜t yˆ}z|  |d¡WYd}~dSd}~00n |j  |¡dS)Nz3Fatal error: protocol.buffer_updated() call failed.) rfrerqrPr+rZBufferedProtocolZ_feed_data_to_buffered_protornrorprVZ data_received)r-rlrUrrrrjös"ÿz)_ProactorReadPipeTransport._data_receivedc Csªd}�zˆzŒ|dur2d|_| ¡r*| ¡}n| ¡|jrVd}WW|durR| |¡dS|dkrxWW|durt| |¡dS|js’|jj  |j d¡|_WnÌt yä}z8|js¸|  |d¡n|j  ¡rÐtjddd�WYd}~nœd}~0t�y}z| |¡WYd}~nnd}~0t�yB}z|  |d¡WYd}~n>d}~0tj�y`|j�s\‚Yn0|j�sx|j |j¡W|du�r¦| |¡n|du�r¤| |¡0dS)Nói€z"Fatal read error on pipe transportz*Read error on pipe transport while closingTr)r$rXÚresultrHr(rjrfrÚ _proactorÚrecvr ÚConnectionAbortedErrorrVrr rRÚConnectionResetErrorrTrQrÚCancelledErrorÚadd_done_callbackrg)r-ÚfutrlrUrrrrgsP  â æ ÿ   ÿ z(_ProactorReadPipeTransport._loop_reading)NNN)N) r8r_r`rrhrirmrqrjrgrcrrr3rrd±sÿ rdcsZeZdZdZ‡fdd„Zdd„Zddd„Zd d „Zd d „Zd d„Z dd„Z dd„Z ‡Z S)Ú_ProactorBaseWritePipeTransportTcstƒj|i|¤Žd|_dSrB)rrrW©r-ÚargsÚkwr3rrrGsz(_ProactorBaseWritePipeTransport.__init__cCsÈt|tttfƒs$tdt|ƒj›�ƒ‚|jr2tdƒ‚|j durDtdƒ‚|sLdS|j rz|j t j krht  d¡|j d7_ dS|jdur–|jt|ƒd�n.|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)rl)rPÚbytesÚ bytearrayÚ memoryviewÚ TypeErrorÚtyper8r)Ú RuntimeErrorrWr'rÚ!LOG_THRESHOLD_FOR_CONNLOST_WRITESr rr%Ú _loop_writingr#Ú_maybe_pause_protocolÚextendrkrrrÚwriteKs0ÿÿ       z%_ProactorBaseWritePipeTransport.writeNc CsZzô|dur |jdur |jr WdSd|_d|_|r8| ¡|durL|j}d|_|s„|jrf|j |jd¡|jrz|j   t j ¡|  ¡nN|jj |j |¡|_|j ¡sÄt|ƒ|_|j |j¡| ¡n|j |j¡|jdurò|jdurò|j d¡Wn`t�y$}z| |¡WYd}~n:d}~0t�yT}z| |d¡WYd}~n d}~00dS)Nrz#Fatal write error on pipe transport)r%r(r&rsr#rr*rGr)r rZr ÚSHUT_WRÚ_maybe_resume_protocolrtÚsendrXr;ryr†r‡rWrYrwrTrQrV)r-ÚfrlrUrrrr†qs8    z-_ProactorBaseWritePipeTransport._loop_writingcCsdS©NTrrDrrrÚ can_write_eofšsz-_ProactorBaseWritePipeTransport.can_write_eofcCs | ¡dSrB)rIrDrrrÚ write_eof�sz)_ProactorBaseWritePipeTransport.write_eofcCs| d¡dSrB©rTrDrrrÚabort sz%_ProactorBaseWritePipeTransport.abortcCs:|jdurtdƒ‚|j ¡|_|jdur4|j d¡|jS)NzEmpty waiter is already set)rWr„rZ create_futurer%rYrDrrrÚ_make_empty_waiter£s     z2_ProactorBaseWritePipeTransport._make_empty_waitercCs d|_dSrB)rWrDrrrÚ_reset_empty_waiter«sz3_ProactorBaseWritePipeTransport._reset_empty_waiter)NN) r8r_r`Z_start_tls_compatiblerr‰r†r�r�r’r“r”rcrrr3rr{As & )r{cs$eZdZ‡fdd„Zdd„Z‡ZS)Ú_ProactorWritePipeTransportcs8tƒj|i|¤Ž|jj |jd¡|_|j |j¡dS)Né) rrrrtrur r$ryÚ _pipe_closedr|r3rrr°sz$_ProactorWritePipeTransport.__init__cCs@| ¡r dS|jrdSd|_|jdur4| tƒ¡n| ¡dSrB)Z cancelledr(r$r%rTÚBrokenPipeErrorrI)r-rzrrrr—µs z(_ProactorWritePipeTransport._pipe_closed)r8r_r`rr—rcrrr3rr•¯s r•csXeZdZdZd‡fdd„ Zdd„Zdd„Zd d „Zdd d „Zdd d„Z ddd„Z ‡Z S)Ú_ProactorDatagramTransportiNcs>||_d|_tƒj|||||d�t ¡|_|j |j ¡dS)N)r0r1) Ú_addressrWrrÚ collectionsÚdequer#rr*rg)r-r.rr/Úaddressr0r1r3rrrÈs  z#_ProactorDatagramTransport.__init__cCst||ƒdSrB©rrArrrrÔsz%_ProactorDatagramTransport._set_extracCstdd„|jDƒƒS)Ncss|]\}}t|ƒVqdSrB)r;)Ú.0rlÚ_rrrÚ ØrrzC_ProactorDatagramTransport.get_write_buffer_size..)Úsumr#rDrrrr^×sz0_ProactorDatagramTransport.get_write_buffer_sizecCs| d¡dSrBr‘rDrrrr’Úsz _ProactorDatagramTransport.abortcCs´t|tttfƒstdt|ƒƒ‚|s&dS|jdurN|d|jfvrNtd|j›�ƒ‚|jr‚|jr‚|jt j krpt   d¡|jd7_dS|j  t|ƒ|f¡|jdur¨| ¡| ¡dS)Nz,data argument must be bytes-like object (%r)z!Invalid address: must be None or z!socket.sendto() raised exception.r)rPrr€r�r‚rƒršÚ ValueErrorr'rr…r rr#r9r%r†r‡)r-rlÚaddrrrrÚsendtoÝs&ÿ ÿ    z!_ProactorDatagramTransport.sendtoc Csz–|jrWdSd|_|r | ¡|jr2|jrN|jrN|jrH|j |jd¡WdS|j  ¡\}}|jdur||jj   |j |¡|_n|jj j |j ||d�|_Wn^tyÆ}z|j |¡WYd}~nNd}~0tyô}z| |d¡WYd}~n d}~00|j |j¡| ¡dS)N)r¤z'Fatal write error on datagram transport)r'r%rsr#ršr(rr*rGÚpopleftrtrŒr r¥rQr+Úerror_receivedÚ ExceptionrVryr†r‹)r-rzrlr¤rUrrrr†ùs2  ÿ þ  "z(_ProactorDatagramTransport._loop_writingc Cs|d}�zZzÖ|jr*WW|r&|j ||¡dSd|_|dur„| ¡}|jrdd}WW|r`|j ||¡dS|jdur|||j}}n|\}}|jr¤WW|r |j ||¡dS|jdurÆ|jj  |j |j ¡|_n|jj  |j |j ¡|_WnPt �y}z|j |¡WYd}~nBd}~0tj�y.|j�s*‚Yn0|jdu�rJ|j |j¡W|�rx|j ||¡n|�rv|j ||¡0dSrB)r'r+Zdatagram_receivedr$rsr(ršrrtrur Úmax_sizeZrecvfromrQr§rrxryrg)r-rzrlr¤ÚresrUrrrrgsT$Ûç ï  ÿ ÿ   ÿz(_ProactorDatagramTransport._loop_reading)NNN)N)N)N) r8r_r`r©rrr^r’r¥r†rgrcrrr3rr™Åsÿ   !r™c@seZdZdd„Zdd„ZdS)Ú_ProactorDuplexPipeTransportcCsdS)NFrrDrrrr�Ksz*_ProactorDuplexPipeTransport.can_write_eofcCst‚dSrB)ÚNotImplementedErrorrDrrrr�Nsz&_ProactorDuplexPipeTransport.write_eofN)r8r_r`r�r�rrrrr«Fsr«cs>eZdZejjZd ‡fdd„ Zdd„Zdd„Z dd „Z ‡Z S) Ú_ProactorSocketTransportNcs$tƒ ||||||¡t |¡dSrB)rrrZ _set_nodelayr,r3rrrYsz!_ProactorSocketTransport.__init__cCst||ƒdSrBržrArrrr^sz#_ProactorSocketTransport._set_extracCsdSrŽrrDrrrr�asz&_ProactorSocketTransport.can_write_eofcCs2|js |jrdSd|_|jdur.|j tj¡dSrŽ)r(r)r%r rZr rŠrDrrrr�ds   z"_ProactorSocketTransport.write_eof)NNN) r8r_r`rZ _SendfileModeZ TRY_NATIVEZ_sendfile_compatiblerrr�r�rcrrr3rr­Rsÿr­csîeZdZ‡fdd„Zd3dd„Zd4ddddddœdd „Zd5d d „Zd6d d „Zd7dd„Zd8dd„Z ‡fdd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd9d&d'„Zd(d)„Zd:d+d,„Zd-d.„Zd/d0„Zd1d2„Z‡ZS);rcshtƒ ¡t d|jj¡||_||_d|_i|_ |  |¡|  ¡t   ¡t  ¡urdt |j ¡¡dS)NzUsing proactor: %s)rrr rRr4r8rtÚ _selectorÚ_self_reading_futureÚ_accept_futuresZset_loopÚ_make_self_pipeÚ threadingÚcurrent_threadÚ main_threadÚsignalÚ set_wakeup_fdÚ_csockr:)r-Zproactorr3rrrns  zBaseProactorEventLoop.__init__NcCst||||||ƒSrB)r­)r-rr/r0r1r2rrrÚ_make_socket_transport{s ÿz,BaseProactorEventLoop._make_socket_transportF)Ú server_sideÚserver_hostnamer1r2Ússl_handshake_timeoutc Cs0tj||||||| d�} t||| ||d�| jS)N)r»©r1r2)r Z SSLProtocolr­Z_app_transport) r-Zrawsockr/Ú sslcontextr0r¹rºr1r2r»Z ssl_protocolrrrÚ_make_ssl_transport€sýÿz)BaseProactorEventLoop._make_ssl_transportcCst||||||ƒSrB)r™)r-rr/r�r0r1rrrÚ_make_datagram_transport�s ÿz.BaseProactorEventLoop._make_datagram_transportcCst|||||ƒSrB)r«©r-rr/r0r1rrrÚ_make_duplex_pipe_transport’sÿz1BaseProactorEventLoop._make_duplex_pipe_transportcCst|||||ƒSrB)rdrÀrrrÚ_make_read_pipe_transport—sz/BaseProactorEventLoop._make_read_pipe_transportcCst|||||ƒSrB)r•rÀrrrÚ_make_write_pipe_transport›sÿz0BaseProactorEventLoop._make_write_pipe_transportcsj| ¡rtdƒ‚| ¡rdSt ¡t ¡ur6t d¡| ¡|  ¡|j   ¡d|_ d|_ t ƒ  ¡dS)Nz!Cannot close a running event loopr[)Z is_runningr„Ú is_closedr²r³r´rµr¶Ú_stop_accept_futuresÚ_close_self_pipertrIr®rrDr3rrrI¡s  zBaseProactorEventLoop.closecÃs|j ||¡IdHSrB)rtru)r-rÚnrrrÚ sock_recvµszBaseProactorEventLoop.sock_recvcÃs|j ||¡IdHSrB)rtZ recv_into)r-rZbufrrrÚsock_recv_into¸sz$BaseProactorEventLoop.sock_recv_intocÃs|j ||¡IdHSrB)rtrŒ)r-rrlrrrÚ sock_sendall»sz"BaseProactorEventLoop.sock_sendallcÃs|j ||¡IdHSrB)rtZconnect)r-rr�rrrÚ sock_connect¾sz"BaseProactorEventLoop.sock_connectcÃs|j |¡IdHSrB)rtÚacceptrArrrÚ sock_acceptÁsz!BaseProactorEventLoop.sock_acceptc Ãs>z | ¡}Wn4ttjfy@}zt d¡‚WYd}~n d}~00zt |¡j}Wnt ynt d¡‚Yn0|rx|n|}|s„dSt |dƒ}|r t |||ƒn|} t ||ƒ}d} zpt | ||ƒ}|dkrâ| W| dkrà|  |¡S|j   ||||¡IdH||7}| |7} q´W| dk�r:|  |¡n| dk�r8|  |¡0dS)Nznot a regular filerlÿÿ)r:ÚAttributeErrorÚioÚUnsupportedOperationrZSendfileNotAvailableErrorÚosÚfstatÚst_sizerQÚminÚseekrtÚsendfile) r-rÚfileÚoffsetÚcountr:ÚerrZfsizeZ blocksizeZend_posZ total_sentrrrÚ_sock_sendfile_nativeÄs:       ú   ÿ z+BaseProactorEventLoop._sock_sendfile_nativecÃsn| ¡}| ¡| ¡IdHz4|j|j|||dd�IdHW| ¡|rP| ¡Sn| ¡|rh| ¡0dS)NF)Zfallback)rhrir“Z sock_sendfiler r”rm)r-Ztranspr×rØrÙrmrrrÚ_sendfile_nativeás"ÿ ûþz&BaseProactorEventLoop._sendfile_nativecCsL|jdur|j ¡d|_|j ¡d|_|j ¡d|_|jd8_dS)Nr)r¯rHÚ_ssockrIr·Ú _internal_fdsrDrrrrÆís    z&BaseProactorEventLoop._close_self_pipecCs:t ¡\|_|_|j d¡|j d¡|jd7_dS)NFr)r Z socketpairrÝr·Z setblockingrÞrDrrrr±÷s  z%BaseProactorEventLoop._make_self_pipec Cs¬z4|dur| ¡|j|ur"WdS|j |jd¡}Wn`tjyJYdSttfy`‚YnHt y”}z|  d||dœ¡WYd}~nd}~00||_|  |j ¡dS)Niz.Error on reading from the event loop self pipe)rNrOr.) rsr¯rtrurÝrrxrnrorprSryÚ_loop_self_reading)r-r�rUrrrrßþs$ ýz(BaseProactorEventLoop._loop_self_readingcCsL|j}|durdSz| d¡Wn&tyF|jrBtjddd�Yn0dS)Nóz3Fail to write a null byte into the self-pipe socketTr)r·rŒrQÚ_debugr rR)r-ZcsockrrrÚ_write_to_selfs þz$BaseProactorEventLoop._write_to_selfédcs(d‡‡‡‡‡‡‡fdd„ ‰ˆ ˆ¡dS)Nc s,zŠ|durn| ¡\}}ˆjr,t dˆ||¡ˆƒ}ˆdurXˆj||ˆdd|iˆˆd�nˆj||d|iˆd�ˆ ¡r|WdSˆj ˆ¡}Wn„t yò}zPˆ  ¡dkrȈ  d|t   ˆ¡dœ¡ˆ ¡nˆjrÞtjd ˆdd �WYd}~n>d}~0tj�yˆ ¡Yn0|ˆjˆ  ¡<| ˆ¡dS) Nz#%r got a new connection from %r: %rTr)r¹r1r2r»r¼r[zAccept failed on a socket)rNrOr zAccept failed on socket %rr)rsrár rRr¾r¸rÄrtrÌrQr:rSr rrIrrxr°ry)r�Zconnr¤r/rU©r.Úprotocol_factoryr-r2rr»r½rrr.0sJ ÿýþ ý ÿz2BaseProactorEventLoop._start_serving..loop)N)r*)r-rårr½r2Zbacklogr»rrärÚ_start_serving,s%z$BaseProactorEventLoop._start_servingcCsdSrBr)r-Z event_listrrrÚ_process_eventsWsz%BaseProactorEventLoop._process_eventscCs&|j ¡D] }| ¡q |j ¡dSrB)r°ÚvaluesrHÚclear)r-ÚfuturerrrrÅ[s z*BaseProactorEventLoop._stop_accept_futurescCs6|j | ¡d¡}|r| ¡|j |¡| ¡dSrB)r°Úpopr:rHrtÚ _stop_servingrI)r-rrêrrrrì`s  z#BaseProactorEventLoop._stop_serving)NNN)N)NNN)NN)NN)NN)N)NNrãN)r8r_r`rr¸r¾r¿rÁrÂrÃrIrÈrÉrÊrËrÍrÛrÜrÆr±rßrârærçrÅrìrcrrr3rrlsN ÿ ÿü ÿ ÿ ÿ ÿ     þ +r)#Ú__all__rÏrÑr rarµr²r›Úrrrrrr r r Úlogr rZ_FlowControlMixinZ BaseTransportrZ ReadTransportrdZWriteTransportr{r•ZDatagramTransportr™Z Transportr«r­Z BaseEventLooprrrrrÚsT         ÿ ÿ ÿn ÿ þ þ