a i@sddlZejdkredddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZdZdZdZdZdZdZdZGdddejZGdddejZ Gddde Z!Gddde Z"Gddde#Z$Gdddej%Z&Gd d!d!ej'Z(Gd"d#d#Z)Gd$d%d%ej*Z+e&Z,Gd&d'd'e j-Z.Gd(d)d)e j-Z/e/Z0dS)*Nwin32z win32 only)events)base_subprocess)futures) exceptions)proactor_events)selector_events)tasks) windows_utils)logger)SelectorEventLoopProactorEventLoop IocpProactorDefaultEventLoopPolicyWindowsSelectorEventLoopPolicyWindowsProactorEventLoopPolicyiigMbP?g?cs\eZdZddfdd ZfddZddZdfd d Zfd d Zfd dZZ S)_OverlappedFutureNloopcs&tj|d|jr|jd=||_dSNr)super__init___source_traceback_ov)selfovr __class__./usr/lib64/python3.9/asyncio/windows_events.pyr6sz_OverlappedFuture.__init__csHt}|jdurD|jjr dnd}|dd|d|jjdd|S)NpendingZ completedrz overlapped=)r _repr_inforr#insertaddressrinfostaterr!r"r&<s    z_OverlappedFuture._repr_infoc Cst|jdurdSz|jWnLtyh}z4d||d}|jrH|j|d<|j|WYd}~n d}~00d|_dS)Nz&Cancelling an overlapped future failedmessage exceptionfuturesource_traceback)rcancelOSErrorr_loopcall_exception_handler)rexccontextr!r!r"_cancel_overlappedCs  "z$_OverlappedFuture._cancel_overlappedcs|tj|dSN)msg)r7rr1rr9rr!r"r1Ssz_OverlappedFuture.cancelcst||dSN)r set_exceptionr7rr.rr!r"r<Ws z_OverlappedFuture.set_exceptioncst|d|_dSr;)r set_resultrrresultrr!r"r>[s z_OverlappedFuture.set_result)N) __name__ __module__ __qualname__rr&r7r1r<r> __classcell__r!r!rr"r0s   rcsleZdZddfdd ZddZfddZd d Zd d Zdfd d ZfddZ fddZ Z S)_BaseWaitHandleFutureNrcs8tj|d|jr|jd=||_||_||_d|_dS)NrrT)rrrr_handle _wait_handle _registered)rrhandle wait_handlerrr!r"rcsz_BaseWaitHandleFuture.__init__cCst|jdtjkSNr)_winapiZWaitForSingleObjectrFZ WAIT_OBJECT_0rr!r!r"_pollqs z_BaseWaitHandleFuture._pollcsdt}|d|jd|jdurB|r4dnd}|||jdur`|d|jd|S)Nzhandle=r$signaledZwaitingz wait_handle=)rr&appendrFrNrGr)rr!r"r&vs    z _BaseWaitHandleFuture._repr_infocCs d|_dSr;)rrfutr!r!r"_unregister_wait_cbsz)_BaseWaitHandleFuture._unregister_wait_cbc Cs|js dSd|_|j}d|_zt|Wnfty}zN|jtjkr|d||d}|jrb|j|d<|j |WYd}~dSWYd}~n d}~00| ddSNFz$Failed to unregister the wait handler,r0) rHrG _overlappedZUnregisterWaitr2winerrorERROR_IO_PENDINGrr3r4rSrrJr5r6r!r!r"_unregister_waits$   $z&_BaseWaitHandleFuture._unregister_waitcs|tj|dSr8)rYrr1r:rr!r"r1sz_BaseWaitHandleFuture.cancelcs|t|dSr;)rYrr<r=rr!r"r<sz#_BaseWaitHandleFuture.set_exceptioncs|t|dSr;)rYrr>r?rr!r"r>sz _BaseWaitHandleFuture.set_result)N) rArBrCrrNr&rSrYr1r<r>rDr!r!rr"rE`s  rEcsBeZdZddfdd ZddZfddZfd d ZZS) _WaitCancelFutureNrcstj||||dd|_dS)Nr)rr_done_callback)rreventrJrrr!r"rsz_WaitCancelFuture.__init__cCs tddS)Nz'_WaitCancelFuture must not be cancelled) RuntimeErrorrMr!r!r"r1sz_WaitCancelFuture.cancelcs$t||jdur ||dSr;)rr>r[r?rr!r"r>s  z_WaitCancelFuture.set_resultcs$t||jdur ||dSr;)rr<r[r=rr!r"r<s  z_WaitCancelFuture.set_exception)rArBrCrr1r>r<rDr!r!rr"rZs rZcs6eZdZddfdd ZfddZddZZS) _WaitHandleFutureNrcs<tj||||d||_d|_tdddd|_d|_dS)NrTF)rr _proactorZ_unregister_proactorrUZ CreateEvent_event _event_fut)rrrIrJproactorrrr!r"rs z_WaitHandleFuture.__init__csF|jdur"t|jd|_d|_|j|jd|_t|dSr;) r`rL CloseHandlerar_ _unregisterrrrSrQrr!r"rSs   z%_WaitHandleFuture._unregister_wait_cbc Cs|js dSd|_|j}d|_zt||jWnfty}zN|jtjkrd||d}|jrf|j|d<|j |WYd}~dSWYd}~n d}~00|j |j|j |_dSrT)rHrGrUZUnregisterWaitExr`r2rVrWrr3r4r_ _wait_cancelrSrarXr!r!r"rYs(   $ z"_WaitHandleFuture._unregister_wait)rArBrCrrSrYrDr!r!rr"r^s r^c@s8eZdZddZddZddZddZd d ZeZd S) PipeServercCs,||_t|_d|_d|_|d|_dSNT)_addressweakrefWeakSet_free_instances_pipe_accept_pipe_future_server_pipe_handle)rr(r!r!r"rs  zPipeServer.__init__cCs|j|d}|_|SNF)rlrn)rtmpr!r!r"_get_unconnected_pipesz PipeServer._get_unconnected_pipec Csr|r dStjtjB}|r&|tjO}t|j|tjtjBtj Btj t j t j tj tj}t |}|j||Sr;)closedrLZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperhZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ PIPE_WAITZPIPE_UNLIMITED_INSTANCESr BUFSIZEZNMPWAIT_WAIT_FOREVERNULL PipeHandlerkadd)rfirstflagshpiper!r!r"rn s"     zPipeServer._server_pipe_handlecCs |jduSr;)rhrMr!r!r"rrszPipeServer.closedcCsR|jdur|jd|_|jdurN|jD] }|q*d|_d|_|jdSr;)rmr1rhrkcloserlclear)rrzr!r!r"r{"s     zPipeServer.closeN) rArBrCrrqrnrrr{__del__r!r!r!r"rfs   rfc@s eZdZdS)_WindowsSelectorEventLoopN)rArBrCr!r!r!r"r~1sr~csDeZdZd fdd ZfddZddZdd Zd d d ZZS)rNcs|durt}t|dSr;)rrr)rrbrr!r"r8szProactorEventLoop.__init__c szV||jtW|jdur|jj}|j|durP|jsP|j |d|_n>|jdur|jj}|j|dur|js|j |d|_0dSr;) call_soonZ_loop_self_readingr run_foreverZ_self_reading_futurerr1r#r_rdrrrr!r"r=s        zProactorEventLoop.run_forevercs8|j|}|IdH}|}|j||d|id}||fS)Naddrextra)r_ connect_pipe_make_duplex_pipe_transport)rprotocol_factoryr(frzprotocoltransr!r!r"create_pipe_connectionPs  z(ProactorEventLoop.create_pipe_connectioncs.tdfdd gS)Nc s d}zn|rN|}j|r4|WdS}j||did}|durdWdSj|}Wnt y}zN|r| dkr d||d|nj rt jd|ddWYd}~n8d}~0tjy|r|Yn0|_|dS) NrrrzPipe accept failed)r-r.rzzAccept pipe failed on pipe %rT)exc_info)r@rkdiscardrrr{rrqr_ accept_piper2filenor4Z_debugr warningrCancelledErrorrmadd_done_callback)rrzrr5r(loop_accept_piperrZserverr!r"r[sB   z>ProactorEventLoop.start_serving_pipe..loop_accept_pipe)N)rfr)rrr(r!rr"start_serving_pipeXs( z$ProactorEventLoop.start_serving_pipec s|} t||||||||f| |d| } z| IdHWn@ttfyRYn*tyz| | IdHYn0| S)N)waiterr) create_future_WindowsSubprocessTransport SystemExitKeyboardInterrupt BaseExceptionr{_wait) rrargsshellstdinstdoutstderrbufsizerkwargsrZtranspr!r!r"_make_subprocess_transports"  z,ProactorEventLoop._make_subprocess_transport)N)N) rArBrCrrrrrrDr!r!rr"r5s  0rc@seZdZd:ddZddZddZdd Zd;d d Zd dZdddZ d?ddZ d@ddZ ddZddZddZd d!Zd"d#ZdAd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1ZdBd2d3Zd4d5Zd6d7Zd8d9Zd S)CrrcCsDd|_g|_ttjtd||_i|_t |_ g|_ t |_ dSrK) r3_resultsrUCreateIoCompletionPortINVALID_HANDLE_VALUErt_iocp_cacherirjrH _unregistered_stopped_serving)rZ concurrencyr!r!r"rs  zIocpProactor.__init__cCs|jdurtddS)NzIocpProactor is closed)rr]rMr!r!r" _check_closeds zIocpProactor._check_closedcCsFdt|jdt|jg}|jdur0|dd|jjd|fS)Nzoverlapped#=%sz result#=%srrz<%s %s> )lenrrrrPr rAjoin)rr*r!r!r"__repr__s     zIocpProactor.__repr__cCs ||_dSr;)r3)rrr!r!r"set_loopszIocpProactor.set_loopNcCs |js|||j}g|_|Sr;)rrN)rtimeoutrpr!r!r"selects  zIocpProactor.selectcCs|j}|||Sr;)r3rr>)rvaluerRr!r!r"_results  zIocpProactor._resultrcCs|||tt}z4t|tjr6||||n|||Wnt yd| dYS0dd}| |||S)Nc SsTz |WStyN}z,|jtjtjfvr8t|jnWYd}~n d}~00dSr; getresultr2rVrUZERROR_NETNAME_DELETEDZERROR_OPERATION_ABORTEDConnectionResetErrorrrkeyrr5r!r!r" finish_recvs  z&IocpProactor.recv..finish_recv) _register_with_iocprU Overlappedrt isinstancesocketZWSARecvrZReadFileBrokenPipeErrorr _registerrconnnbytesrxrrr!r!r"recvs     zIocpProactor.recvcCs|||tt}z4t|tjr6||||n|||Wnt yd| dYS0dd}| |||S)Nrc SsTz |WStyN}z,|jtjtjfvr8t|jnWYd}~n d}~00dSr;rrr!r!r"rs  z+IocpProactor.recv_into..finish_recv) rrUrrtrrZ WSARecvIntorZ ReadFileIntorrr)rrbufrxrrr!r!r" recv_intos     zIocpProactor.recv_intocCs^||tt}z||||WntyF|dYS0dd}||||S)N)rNc SsTz |WStyN}z,|jtjtjfvr8t|jnWYd}~n d}~00dSr;rrr!r!r"rs  z*IocpProactor.recvfrom..finish_recv) rrUrrtZ WSARecvFromrrrrrr!r!r"recvfroms    zIocpProactor.recvfromcCs>||tt}|||||dd}||||S)Nc SsTz |WStyN}z,|jtjtjfvr8t|jnWYd}~n d}~00dSr;rrr!r!r" finish_send s  z(IocpProactor.sendto..finish_send)rrUrrtZ WSASendTorr)rrrrxrrrr!r!r"sendtos    zIocpProactor.sendtocCsZ||tt}t|tjr4||||n|||dd}| |||S)Nc SsTz |WStyN}z,|jtjtjfvr8t|jnWYd}~n d}~00dSr;rrr!r!r"rs  z&IocpProactor.send..finish_send) rrUrrtrrZWSASendrZ WriteFiler)rrrrxrrr!r!r"sends    zIocpProactor.sendcsv||jtt}|fdd}dd}|||}||}t j ||j d|S)NcsD|td}tjtj|   fS)Nz@P) rstructpackr setsockoptr SOL_SOCKETrUZSO_UPDATE_ACCEPT_CONTEXT settimeout gettimeout getpeername)rrrrrlistenerr!r" finish_accept/sz*IocpProactor.accept..finish_acceptcs2z|IdHWntjy,|Yn0dSr;)rrr{)r/rr!r!r" accept_coro8s z(IocpProactor.accept..accept_coror) r_get_accept_socketfamilyrUrrtZAcceptExrrr Z ensure_futurer3)rrrrrr/coror!rr"accept)s     zIocpProactor.acceptc sjtjkr4t||j}|d|S| zt j WnDt y}z,|j tjkrrddkrWYd}~n d}~00tt}||fdd}|||S)Nrrcs|tjtjdSrK)rrrrrUZSO_UPDATE_CONNECT_CONTEXTrrrrr!r"finish_connect[s z,IocpProactor.connect..finish_connect)typer SOCK_DGRAMrUZ WSAConnectrr3rr>rZ BindLocalrr2rVerrnoZ WSAEINVAL getsocknamerrtZ ConnectExr)rrr(rRerrr!rr"connectEs"       zIocpProactor.connectc Csb||tt}|d@}|d?d@}||t||||dddd}||||S)Nr rc SsTz |WStyN}z,|jtjtjfvr8t|jnWYd}~n d}~00dSr;rrr!r!r"finish_sendfilens  z.IocpProactor.sendfile..finish_sendfile) rrUrrtZ TransmitFilermsvcrtZ get_osfhandler) rsockfileoffsetcountrZ offset_lowZ offset_highrr!r!r"sendfileds      zIocpProactor.sendfilecsJ|tt}|}|r0|Sfdd}|||S)Ncs |Sr;)rrrzr!r"finish_accept_pipesz4IocpProactor.accept_pipe..finish_accept_pipe)rrUrrtZConnectNamedPiperrr)rrzrZ connectedrr!rr"rys    zIocpProactor.accept_pipec stt}zt|}WqjWn2tyH}z|jtjkr4WYd}~n d}~00t|dt}t |IdHqt |S)N) CONNECT_PIPE_INIT_DELAYrUZ ConnectPiper2rVZERROR_PIPE_BUSYminCONNECT_PIPE_MAX_DELAYr sleepr ru)rr(delayrIr5r!r!r"rs  zIocpProactor.connect_pipecCs|||dSro)_wait_for_handle)rrIrr!r!r"wait_for_handleszIocpProactor.wait_for_handlecCs||dd}||_|Srg)rr[)rr\Z done_callbackrRr!r!r"reszIocpProactor._wait_cancelcs||durtj}nt|d}tt}t||j |j |}|r\t ||||j dnt |||||j djr~jd=fdd}|d|f|j|j <S)N@@rrcsSr;)rNrrr!r"finish_wait_for_handlesz=IocpProactor._wait_for_handle..finish_wait_for_handler)rrLINFINITEmathceilrUrrtZRegisterWaitWithQueuerr(rZr3r^rr)rrIrZ _is_cancelmsrrJrr!rr"rs$    zIocpProactor._wait_for_handlecCs0||jvr,|j|t||jdddSrK)rHrvrUrrrrobjr!r!r"rs  z IocpProactor._register_with_iocpc Cs|t||jd}|jr$|jd=|jstz|dd|}Wn.tyh}z||WYd}~nd}~00||||||f|j|j <|Sr) rrr3rr#r2r<r>rr()rrrcallbackrrrr!r!r"rs  zIocpProactor._registercCs||j|dSr;)rrrPrr!r!r"rdszIocpProactor._unregistercCst|}|d|SrK)rr)rrsr!r!r"rs  zIocpProactor._get_accept_socketc Cs|durt}n0|dkr tdnt|d}|tkr>tdt|j|}|durXqZd}|\}}}}z|j|\}} } } WnVt y|j r|j dd||||fd|dtj fvrt|Yq>Yn0| |jvr|q>|s>z| ||| } Wn<ty@} z"|| |j|WYd} ~ q>d} ~ 00|| |j|q>|jD]} |j| jdq`|jdS)Nrznegative timeoutrztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r-status)r ValueErrorrrrUZGetQueuedCompletionStatusrrpopKeyErrorr3Z get_debugr4rrLrcrr1doner2r<rrPr>rr(r|)rrrrerrZ transferredrr(rrrrrrr!r!r"rNsL           "  zIocpProactor._pollcCs|j|dSr;)rrvrr!r!r" _stop_serving>szIocpProactor._stop_servingc Cs|jdurdSt|jD]\}\}}}}|r6qt|trBqz |Wqty}z>|j durd||d}|j r|j |d<|j |WYd}~qd}~00qd}t } | |} |jr| t krtd|t | t |} ||qg|_t|jd|_dS)NzCancelling a future failedr,r0g?z,%r is running after closing for %.1f seconds)rlistritems cancelledrrZr1r2r3rr4time monotonicr debugrNrrLrc) rr(rRrrrr5r6Z msg_updateZ start_timeZnext_msgr!r!r"r{Ds>     $     zIocpProactor.closecCs |dSr;)r{rMr!r!r"r}sszIocpProactor.__del__)r)N)r)r)r)rN)r)N)N)rArBrCrrrrrrrrrrrrrrrrrrerrrrdrrNrr{r}r!r!r!r"rs6        "    7/rc@seZdZddZdS)rc  sPtj|f|||||d|_fdd}jjtjj} | |dS)N)rrrrrcsj}|dSr;)_procpollZ_process_exited)r returncoderMr!r"r~s z4_WindowsSubprocessTransport._start..callback) r Popenrr3r_rintrFr) rrrrrrrrrrr!rMr"_startys z"_WindowsSubprocessTransport._startN)rArBrCrr!r!r!r"rwsrc@seZdZeZdS)rN)rArBrCr _loop_factoryr!r!r!r"rsrc@seZdZeZdS)rN)rArBrCrrr!r!r!r"rsr)1sysplatform ImportErrorrUrLrrrrrr rirrrrrr r r logr __all__rtrZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDrrFuturerrErZr^objectrfZBaseSelectorEventLoopr~ZBaseProactorEventLooprrZBaseSubprocessTransportrr ZBaseDefaultEventLoopPolicyrrrr!r!r!r"sV          0J4;e`