й¼].lã@sddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z ddlm Z dd lm Z dd lmZdd lmZdd lmZd dddgZdZdZdZdZdZdZGdd„de jƒZGdd„de jƒZGdd„deƒZGdd„deƒZGdd„deƒZ Gd d!„d!e j!ƒZ"Gd"d„de j#ƒZ$Gd#d„dƒZ%Gd$d%„d%ej&ƒZ'e"Z(Gd&d'„d'ej)ƒZ*e*Z+dS)(éNé)Úevents)Úbase_subprocess)Úfutures)Úproactor_events)Úselector_events)Útasks)Ú windows_utils)Ú _overlapped)Ú coroutine)ÚloggerÚSelectorEventLoopÚProactorEventLoopÚ IocpProactorÚDefaultEventLoopPolicylÿÿiÉiÔgü©ñÒMbP?gš™™™™™¹?cs|eZdZdd‡fdd†Z‡fdd†Zdd„Z‡fd d †Z‡fd d †Z‡fd d†Z‡S)Ú_OverlappedFutureÚloopNcs3tƒjd|ƒ|jr&|jd=||_dS)Nrréÿÿÿÿ)ÚsuperÚ__init__Ú_source_tracebackÚ_ov)ÚselfÚovr)Ú __class__©ú3/opt/alt/python35/lib64/python3.5/windows_events.pyr-s  z_OverlappedFuture.__init__csZtƒjƒ}|jdk rV|jjr0dnd}|jdd||jjfƒ|S)NÚpendingZ completedrzoverlapped=<%s, %#x>)rÚ _repr_inforrÚinsertÚaddress)rÚinfoÚstate)rrrr3s  z_OverlappedFuture._repr_infocCs—|jdkrdSy|jjƒWnctk r‰}zCddd|d|i}|jrg|j|d<|jj|ƒWYdd}~XnXd|_dS)NÚmessagez&Cancelling an overlapped future failedÚ exceptionÚfutureÚsource_traceback)rÚcancelÚOSErrorrÚ_loopÚcall_exception_handler)rÚexcÚcontextrrrÚ_cancel_overlapped:s   #z$_OverlappedFuture._cancel_overlappedcs|jƒtƒjƒS)N)r-rr')r)rrrr'Js z_OverlappedFuture.cancelcstƒj|ƒ|jƒdS)N)rÚ set_exceptionr-)rr$)rrrr.Nsz_OverlappedFuture.set_exceptioncstƒj|ƒd|_dS)N)rÚ set_resultr)rÚresult)rrrr/Rsz_OverlappedFuture.set_result) Ú__name__Ú __module__Ú __qualname__rrr-r'r.r/rr)rrr's  rcs”eZdZdd‡fdd†Zdd„Z‡fdd†Zd d „Zd d „Z‡fd d†Z‡fdd†Z ‡fdd†Z ‡S)Ú_BaseWaitHandleFuturerNcsNtƒjd|ƒ|jr&|jd=||_||_||_d|_dS)NrrTr)rrrrÚ_handleÚ _wait_handleÚ _registered)rrÚhandleÚ wait_handler)rrrrZs     z_BaseWaitHandleFuture.__init__cCstj|jdƒtjkS)Nr)Ú_winapiZWaitForSingleObjectr5Z WAIT_OBJECT_0)rrrrÚ_pollhsz_BaseWaitHandleFuture._pollcs~tƒjƒ}|jd|jƒ|jdk rW|jƒrDdnd}|j|ƒ|jdk rz|jd|jƒ|S)Nz handle=%#xÚsignaledZwaitingzwait_handle=%#x)rrÚappendr5r;r6)rr!r")rrrrms z _BaseWaitHandleFuture._repr_infocCs d|_dS)N)r)rÚfutrrrÚ_unregister_wait_cbwsz)_BaseWaitHandleFuture._unregister_wait_cbcCsÆ|js dSd|_|j}d|_ytj|ƒWnytk r´}zY|jtjkr¢ddd|d|i}|jrŽ|j|d<|jj |ƒdSWYdd}~XnX|j dƒdS)NFr#z$Failed to unregister the wait handler$r%r&) r7r6r ZUnregisterWaitr(ÚwinerrorÚERROR_IO_PENDINGrr)r*r?)rr9r+r,rrrÚ_unregister_wait|s"       z&_BaseWaitHandleFuture._unregister_waitcs|jƒtƒjƒS)N)rBrr')r)rrrr'”s z_BaseWaitHandleFuture.cancelcs|jƒtƒj|ƒdS)N)rBrr.)rr$)rrrr.˜s z#_BaseWaitHandleFuture.set_exceptioncs|jƒtƒj|ƒdS)N)rBrr/)rr0)rrrr/œs z _BaseWaitHandleFuture.set_result) r1r2r3rr;rr?rBr'r.r/rr)rrr4Ws    r4csFeZdZdd‡fdd†Zdd„Z‡fdd†Z‡S) Ú_WaitCancelFuturerNcs)tƒj|||d|ƒd|_dS)Nr)rrÚ_done_callback)rrÚeventr9r)rrrr¦sz_WaitCancelFuture.__init__cCstdƒ‚dS)Nz'_WaitCancelFuture must not be cancelled)Ú RuntimeError)rrrrr'«sz_WaitCancelFuture.cancelcs3tt|ƒjƒ|jdk r/|j|ƒdS)N)rrCÚ_schedule_callbacksrD)r)rrrrG®sz%_WaitCancelFuture._schedule_callbacks)r1r2r3rr'rGrr)rrrC¡s  rCcsFeZdZdd‡fdd†Z‡fdd†Zdd„Z‡S) Ú_WaitHandleFuturerNcsVtƒj|||d|ƒ||_d|_tjddddƒ|_d|_dS)NrTF)rrÚ _proactorZ_unregister_proactorr Z CreateEventÚ_eventÚ _event_fut)rrr8r9Úproactorr)rrrrµs   z_WaitHandleFuture.__init__csa|jdk r1tj|jƒd|_d|_|jj|jƒd|_tƒj|ƒdS)N) rJr:Ú CloseHandlerKrIÚ _unregisterrrr?)rr>)rrrr?¼s   z%_WaitHandleFuture._unregister_wait_cbcCsÝ|js dSd|_|j}d|_ytj||jƒWnytk rº}zY|jtjkr¨ddd|d|i}|jr”|j|d<|j j |ƒdSWYdd}~XnX|j j |j|j ƒ|_dS)NFr#z$Failed to unregister the wait handler$r%r&)r7r6r ZUnregisterWaitExrJr(r@rArr)r*rIÚ _wait_cancelr?rK)rr9r+r,rrrrBÎs$       z"_WaitHandleFuture._unregister_wait)r1r2r3rr?rBrr)rrrH´s rHc@sReZdZdd„Zdd„Zdd„Zdd„Zd d „ZeZd S) Ú PipeServercCs@||_tjƒ|_d|_d|_|jdƒ|_dS)NT)Ú_addressÚweakrefÚWeakSetÚ_free_instancesÚ_pipeÚ_accept_pipe_futureÚ_server_pipe_handle)rr rrrrís    zPipeServer.__init__cCs |j|jdƒ}|_|S)NF)rUrW)rÚtmprrrÚ_get_unconnected_pipe÷sz PipeServer._get_unconnected_pipec Cs�|jƒrdStjtjB}|r3|tjO}tj|j|tjtjBtj Btj t j t j tj tjƒ}t j|ƒ}|jj|ƒ|S)N)Úclosedr:ZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperQZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ PIPE_WAITZPIPE_UNLIMITED_INSTANCESr ÚBUFSIZEZNMPWAIT_WAIT_FOREVERÚNULLÚ PipeHandlerTÚadd)rÚfirstÚflagsÚhÚpiperrrrWÿs     zPipeServer._server_pipe_handlecCs |jdkS)N)rQ)rrrrrZszPipeServer.closedcCsu|jdk r%|jjƒd|_|jdk rqx|jD]}|jƒq>Wd|_d|_|jjƒdS)N)rVr'rQrTÚcloserUÚclear)rrbrrrrcs    zPipeServer.closeN) r1r2r3rrYrWrZrcÚ__del__rrrrrPès     rPc@seZdZdd„ZdS)Ú_WindowsSelectorEventLoopcCs tjƒS)N)r Ú socketpair)rrrrÚ _socketpair&sz%_WindowsSelectorEventLoop._socketpairN)r1r2r3rhrrrrrf#s rfcsjeZdZd‡fdd†Zdd„Zedd„ƒZedd „ƒZedd d „ƒZ‡S) rNcs)|dkrtƒ}tƒj|ƒdS)N)rrr)rrL)rrrr-s  zProactorEventLoop.__init__cCs tjƒS)N)r rg)rrrrrh2szProactorEventLoop._socketpairccsN|jj|ƒ}|EdH}|ƒ}|j||dd|iƒ}||fS)NÚextraÚaddr)rIÚ connect_pipeÚ_make_duplex_pipe_transport)rÚprotocol_factoryr ÚfrbÚprotocolÚtransrrrÚcreate_pipe_connection5s   z(ProactorEventLoop.create_pipe_connectioncsAtˆƒ‰d‡‡‡‡‡fdd†‰ˆjˆƒˆgS)Ncsbd}y“|rj|jƒ}ˆjj|ƒˆjƒrE|jƒdSˆƒ}ˆj||ddˆiƒˆjƒ}|dkr†dSˆjj|ƒ}Wn¬t k r#}zh|rò|j ƒd kròˆj ddd|d|iƒ|jƒnˆj rt jd|d d ƒWYdd}~Xn;tjk rG|rC|jƒYnX|ˆ_|jˆƒdS) Nrirjrr#zPipe accept failedr$rbzAccept pipe failed on pipe %rÚexc_infoTr)r0rTÚdiscardrZrcrlrYrIÚ accept_piper(Úfilenor*Z_debugr ÚwarningrÚCancelledErrorrVÚadd_done_callback)rnrbror+)r Úloop_accept_pipermrÚserverrrryBs<           z>ProactorEventLoop.start_serving_pipe..loop_accept_pipe)rPZ call_soon)rrmr r)r ryrmrrzrÚstart_serving_pipe>s !( z$ProactorEventLoop.start_serving_pipec ks¬|jƒ} t||||||||d| d|| �} y | EdHWn+tk rv} z | } WYdd} ~ XnXd} | dk r¨| jƒ| jƒEdH| ‚| S)NÚwaiterri)Ú create_futureÚ_WindowsSubprocessTransportÚ ExceptionrcÚ_wait)rroÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizeriÚkwargsr|Ztranspr+ÚerrrrrÚ_make_subprocess_transportms      z,ProactorEventLoop._make_subprocess_transport) r1r2r3rrhr rqr{r‰rr)rrr*s   /c@s0eZdZddd„Zdd„Zdd„Zdd d „Zd d „Zd dd„Zd dd„Z dd„Z dd„Z dd„Z e dd„ƒZddd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zdd(d)„Zd*d+„Zd,d-„Zd.d/„ZdS)0rlÿÿcCsdd|_g|_tjtjtd|ƒ|_i|_tj ƒ|_ g|_ tj ƒ|_ dS)Nr) r)Ú_resultsr ÚCreateIoCompletionPortÚINVALID_HANDLE_VALUEr\Ú_iocpÚ_cacherRrSr7Ú _unregisteredÚ_stopped_serving)rZ concurrencyrrrrŠs    zIocpProactor.__init__cCs)d|jjt|jƒt|jƒfS)Nz<%s overlapped#=%s result#=%s>)rr1ÚlenrŽrŠ)rrrrÚ__repr__”szIocpProactor.__repr__cCs ||_dS)N)r))rrrrrÚset_loop™szIocpProactor.set_loopNcCs,|js|j|ƒ|j}g|_|S)N)rŠr;)rÚtimeoutrXrrrÚselectœs     zIocpProactor.selectcCs |jjƒ}|j|ƒ|S)N)r)r}r/)rÚvaluer>rrrÚ_result£s zIocpProactor._resultrc Cs¥|j|ƒtjtƒ}yHt|tjƒrM|j|jƒ||ƒn|j|jƒ|ƒWnt k r…|j dƒSYnXdd„}|j |||ƒS)NócSsay|jƒSWnLtk r\}z,|jtjkrGt|jŒ‚n‚WYdd}~XnXdS)N)Ú getresultr(r@r ÚERROR_NETNAME_DELETEDÚConnectionResetErrorr�)rpÚkeyrr+rrrÚ finish_recv³s z&IocpProactor.recv..finish_recv) Ú_register_with_iocpr Ú Overlappedr\Ú isinstanceÚsocketZWSARecvruZReadFileÚBrokenPipeErrorr—Ú _register)rÚconnÚnbytesr`rr�rrrÚrecv¨s   zIocpProactor.recvcCs|j|ƒtjtƒ}t|tjƒrJ|j|jƒ||ƒn|j|jƒ|ƒdd„}|j |||ƒS)NcSsay|jƒSWnLtk r\}z,|jtjkrGt|jŒ‚n‚WYdd}~XnXdS)N)r™r(r@r ršr›r�)rprœrr+rrrÚ finish_sendÆs z&IocpProactor.send..finish_send) ržr rŸr\r r¡ZWSASendruZ WriteFiler£)rr¤Úbufr`rr§rrrÚsend¾s  zIocpProactor.sendcs¯|jˆƒ|jˆjƒ‰tjtƒ}|jˆjƒˆjƒƒ‡‡fdd†}tdd„ƒ}|j |ˆ|ƒ}||ˆƒ}t j |d|j ƒ|S)Ncs^|jƒtjdˆjƒƒ}ˆjtjtj|ƒˆj ˆj ƒƒˆˆj ƒfS)Nz@P) r™ÚstructÚpackruÚ setsockoptr¡Ú SOL_SOCKETr ZSO_UPDATE_ACCEPT_CONTEXTÚ settimeoutÚ gettimeoutÚ getpeername)rprœrr¨)r¤ÚlistenerrrÚ finish_accept×s    z*IocpProactor.accept..finish_acceptc ss6y |EdHWn"tjk r1|jƒ‚YnXdS)N)rrwrc)r%r¤rrrÚ accept_coroàs   z(IocpProactor.accept..accept_coror) ržÚ_get_accept_socketÚfamilyr rŸr\ZAcceptExrur r£rZ ensure_futurer))rr±rr²r³r%Úcoror)r¤r±rÚacceptÑs   zIocpProactor.acceptcsÊ|jˆƒytjˆjƒˆjƒWnStk r}z3|jtjkrT‚ˆj ƒddkrm‚WYdd}~XnXtj t ƒ}|j ˆjƒ|ƒ‡fdd†}|j |ˆ|ƒS)Nrrcs'|jƒˆjtjtjdƒˆS)Nr)r™r¬r¡r­r ZSO_UPDATE_CONNECT_CONTEXT)rprœr)r¤rrÚfinish_connectüs   z,IocpProactor.connect..finish_connect)ržr Z BindLocalrurµr(r@ÚerrnoZ WSAEINVALÚ getsocknamerŸr\Z ConnectExr£)rr¤r Úerr¸r)r¤rÚconnectîs zIocpProactor.connectcsi|jˆƒtjtƒ}|jˆjƒƒ}|rD|jˆƒS‡fdd†}|j|ˆ|ƒS)Ncs|jƒˆS)N)r™)rprœr)rbrrÚfinish_accept_pipes z4IocpProactor.accept_pipe..finish_accept_pipe)ržr rŸr\ZConnectNamedPiperur—r£)rrbrZ connectedr½r)rbrrts  zIocpProactor.accept_pipeccs™t}xƒytj|ƒ}PWn:tk rY}z|jtjkrG‚WYdd}~XnXt|dtƒ}tj |d|j ƒEdHq Wt j |ƒS)Nér) ÚCONNECT_PIPE_INIT_DELAYr Z ConnectPiper(r@ZERROR_PIPE_BUSYÚminÚCONNECT_PIPE_MAX_DELAYrÚsleepr)r r])rr Údelayr8r+rrrrkszIocpProactor.connect_pipecCs|j||dƒS)NF)Ú_wait_for_handle)rr8r”rrrÚwait_for_handle*szIocpProactor.wait_for_handlecCs"|j|ddƒ}||_|S)NT)rÄrD)rrEZ done_callbackr>rrrrO2s zIocpProactor._wait_cancelcsß|dkrtj}ntj|dƒ}tjtƒ}tj||j|j |ƒ}|r|t |||d|j ƒ‰nt ||||d|j ƒ‰ˆj r­ˆj d=‡fdd†}ˆ|d|f|j|j <ˆS)Ng@�@rrcs ˆjƒS)N)r;)rprœr)rnrrÚfinish_wait_for_handleMsz=IocpProactor._wait_for_handle..finish_wait_for_handlerr)r:ÚINFINITEÚmathÚceilr rŸr\ZRegisterWaitWithQueuer�r rCr)rHrrŽ)rr8r”Z _is_cancelÚmsrr9rÆr)rnrrÄ9s      zIocpProactor._wait_for_handlecCsB||jkr>|jj|ƒtj|jƒ|jddƒdS)Nr)r7r^r r‹rur�)rÚobjrrrržYsz IocpProactor._register_with_iocpcCs©t|d|jƒ}|jr(|jd=|js‰y|dd|ƒ}Wn2tk r{}z|j|ƒWYdd}~XnX|j|ƒ||||f|j|j<|S)Nrrr) rr)rrr(r.r/rŽr )rrrËÚcallbackrnr–r»rrrr£cs     zIocpProactor._registercCs|jj|ƒdS)N)r�r=)rrrrrrN�szIocpProactor._unregistercCs tj|ƒ}|jdƒ|S)Nr)r¡r®)rrµÚsrrrr´Šs zIocpProactor._get_accept_socketcCs|dkrt}nF|dkr0tdƒ‚n+tj|dƒ}|tkr[tdƒ‚xutj|j|ƒ}|dkr€Pd}|\}}}}y"|jj|ƒ\}} } } Wnrt k r.|j j ƒr|j j dddd||||fiƒ|dtj fkr'tj|ƒw^YnX| |jkrK|jƒq^|jƒs^y| ||| ƒ} WnBtk r±} z"|j| ƒ|jj|ƒWYdd} ~ Xq^X|j| ƒ|jj|ƒq^Wx'|jD]} |jj| jdƒqÝW|jjƒdS) Nrznegative timeoutg@�@ztimeout too bigr#z8GetQueuedCompletionStatus() returned an unexpected eventÚstatusz)err=%s transferred=%s key=%#x address=%#x)rÇÚ ValueErrorrÈrÉr ZGetQueuedCompletionStatusr�rŽÚpopÚKeyErrorr)Z get_debugr*rŒr:rMr�r'Údoner(r.rŠr=r/r�r rd)rr”rÊrÎrˆZ transferredrœr rnrrËrÌr–r»rrrr;�sJ      "      # zIocpProactor._pollcCs|jj|ƒdS)N)r�r^)rrËrrrÚ _stop_servingÆszIocpProactor._stop_servingcCs7xÓt|jjƒƒD]¼\}\}}}}|jƒr=qt|tƒrOqy|jƒWqtk rÑ}zR|jdk r¿ddd|d|i}|j r¯|j |d<|jj |ƒWYdd}~XqXqWx)|jr|j dƒsÙt j dƒqÙWg|_|jdk r3tj|jƒd|_dS)Nr#zCancelling a future failedr$r%r&rz"taking long time to close proactor)ÚlistrŽÚitemsÚ cancelledr rCr'r(r)rr*r;r ÚdebugrŠr�r:rM)rr r>rrËrÌr+r,rrrrcÌs,.    '  zIocpProactor.closecCs|jƒdS)N)rc)rrrrreìszIocpProactor.__del__)r1r2r3rr’r“r•r—r¦r©r·r¼rtr rkrÅrOrÄržr£rNr´r;rÓrcrerrrrr‡s,          7  c@seZdZdd„ZdS)r~c swtj|d|d|d|d|d||�ˆ_‡fdd†}ˆjjjtˆjjƒƒ} | j|ƒdS)Nr‚rƒr„r…r†cs ˆjjƒ}ˆj|ƒdS)N)Ú_procÚpollZ_process_exited)rnÚ returncode)rrrrÌ÷sz4_WindowsSubprocessTransport._start..callback) r ÚPopenrØr)rIrÅÚintr5rx) rr�r‚rƒr„r…r†r‡rÌrnr)rrÚ_startòs !z"_WindowsSubprocessTransport._startN)r1r2r3rÝrrrrr~ðs r~c@seZdZeZdS)Ú_WindowsDefaultEventLoopPolicyN)r1r2r3r Z _loop_factoryrrrrrÞs rÞ),r:r¹rÈr¡rªrRÚrrrrrrr r Z coroutinesr Úlogr Ú__all__r\rÇZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDr¿rÁÚFuturerr4rCrHÚobjectrPZBaseSelectorEventLooprfZBaseProactorEventLooprrZBaseSubprocessTransportr~r ZBaseDefaultEventLoopPolicyrÞrrrrrÚsH        0J4;]ÿj