й¼]‡Üã @sùddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZd gZd Zd ZeeefZd d„Z dd„Z!dd„Z"dd„Z#dd„Z$dd„Z%dddej&dddddd„Z'dd „Z(Gd!d"„d"ej)ƒZ*Gd#d „d ej+ƒZ,dS)$éNé)Úcompat)Ú coroutines)Úevents)Úfutures)Útasks)Ú coroutine)ÚloggerÚ BaseEventLoopédgà?cCsH|j}tj|ƒr:t|jtjƒr:t|jƒSt|ƒSdS)N) Ú _callbackÚinspectZismethodÚ isinstanceÚ__self__rÚTaskÚreprÚstr)ÚhandleÚcb©rú0/opt/alt/python35/lib64/python3.5/base_events.pyÚ_format_handle:s $ rcCs4|tjkrdS|tjkr&dSt|ƒSdS)Nzz)Ú subprocessÚPIPEÚSTDOUTr)ÚfdrrrÚ _format_pipeCs rc Cs`ttdƒstdƒ‚n>y|jtjtjdƒWntk r[tdƒ‚YnXdS)NÚ SO_REUSEPORTz)reuse_port not supported by socket modulerzTreuse_port not supported by socket module, SO_REUSEPORT defined but not implemented.)ÚhasattrÚsocketÚ ValueErrorÚ setsockoptÚ SOL_SOCKETrÚOSError)ÚsockrrrÚ_set_reuseportLs  r%cCs|jtj@tjkS)N)ÚtyperÚ SOCK_STREAM)r$rrrÚ_is_stream_socketWsr(cCs|jtj@tjkS)N)r&rÚ SOCK_DGRAM)r$rrrÚ_is_dgram_socket^sr*cCsÏttdƒsdS|dtjtjhks:|dkr>dS|tjkrYtj}n|tjkrttj}ndS|dkr�d}nwt|tƒr±|dkr±d}nSt|tƒrÕ|dkrÕd}n/yt |ƒ}Wnt t fk rdSYnX|tj krAtj g}ttdƒrJ|jtjƒn |g}t|tƒrh|jdƒ}d|krxdSxP|D]H}y-tj||ƒ|||d||ffSWqtk rÆYqXqWdS)NÚ inet_ptonróÚÚAF_INET6Zidnaú%)rrÚ IPPROTO_TCPÚ IPPROTO_UDPr'r)rÚbytesrÚintÚ TypeErrorr Ú AF_UNSPECÚAF_INETÚappendr.Údecoder+r#)ÚhostÚportÚfamilyr&ÚprotoZafsÚafrrrÚ _ipaddr_infoesH              r>r;r&r<Úflagsc Cs†|dd…\}}t|||||ƒ}|dk rZ|jƒ} | j|gƒ| S|j||d|d|d|d|ƒSdS)Nér;r&r<r?)r>Ú create_futureÚ set_resultÚ getaddrinfo) Úaddressr;r&r<r?Úloopr9r:ÚinfoÚfutrrrÚ_ensure_resolved¢s  rHcCs=|j}t|tƒr,t|tƒ r,dS|jjƒdS)N)Ú _exceptionrÚ BaseExceptionÚ ExceptionÚ_loopÚstop)rGÚexcrrrÚ_run_until_complete_cb°s  rOc@sjeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Ze d d„ƒZ dS)ÚServercCs(||_||_d|_g|_dS)Nr)rLÚsocketsÚ _active_countÚ_waiters)ÚselfrErQrrrÚ__init__¼s   zServer.__init__cCsd|jj|jfS)Nz<%s sockets=%r>)Ú __class__Ú__name__rQ)rTrrrÚ__repr__ÂszServer.__repr__cCs|jd7_dS)Nr)rR)rTrrrÚ_attachÅszServer._attachcCs;|jd8_|jdkr7|jdkr7|jƒdS)Nrr)rRrQÚ_wakeup)rTrrrÚ_detachÉszServer._detachcCs`|j}|dkrdSd|_x|D]}|jj|ƒq)W|jdkr\|jƒdS)Nr)rQrLZ _stop_servingrRrZ)rTrQr$rrrÚcloseÏs    z Server.closecCs@|j}d|_x'|D]}|jƒs|j|ƒqWdS)N)rSÚdonerB)rTÚwaitersÚwaiterrrrrZÙs     zServer._wakeupccsN|jdks|jdkr"dS|jjƒ}|jj|ƒ|EdHdS)N)rQrSrLrAr7)rTr_rrrÚ wait_closedàs zServer.wait_closedN) rWÚ __module__Ú __qualname__rUrXrYr[r\rZrr`rrrrrPºs      rPc@s‡eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd dd dd dd„Z d dddd dd dd dd„Z d d d dd„Z d d dd„Z d d dd„Z ed dd„ƒZdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zed)d*„ƒZd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zejrƒd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#dCdD„Z$dEdF„Z%dGdH„Z&dIdJ„Z'dKdL„Z(dMdN„Z)dOdPdQdPdRdPdSdPdTdU„Z*dPdVdW„Z+ed d dXd dOdPdRdPdSdPdYd dZd dd d[d\„ƒZ,edd]d^„ƒZ-ed d dOdPdRdPdSdPd_d d`d dad dYd dbdc„ƒZ.eddde„ƒZ/ed d dOe0j1dSe0j2dYd dfdgdXd d_d d`d dhdi„ƒZ3edXd djdk„ƒZ4edldm„ƒZ5edndo„ƒZ6dpdq„Z7edre8j9dse8j9dte8j9duddvdwdxdPdydz„ƒZ:edre8j9dse8j9dte8j9duddvddxdPd{d|„ƒZ;d}d~„Z<dd€„Z=d�d‚„Z>dƒd„„Z?d…d†„Z@d‡dˆ„ZAd‰dŠ„ZBd‹dŒ„ZCd�dŽ„ZDd�d�„ZEd‘d’„ZFd S)“r cCsód|_d|_d|_tjƒ|_g|_d|_d|_d|_ t j dƒj |_ d|_|jtjj o”ttjjdƒƒƒd|_d|_d|_d|_ttdƒrÝtjƒ|_n d|_d|_dS)NrFÚ monotonicZPYTHONASYNCIODEBUGgš™™™™™¹?Úget_asyncgen_hooks) Ú_timer_cancelled_countÚ_closedÚ _stoppingÚ collectionsÚdequeÚ_readyÚ _scheduledÚ_default_executorZ _internal_fdsÚ _thread_idÚtimeÚget_clock_infoZ resolutionÚ_clock_resolutionÚ_exception_handlerÚ set_debugÚsysr?Úignore_environmentÚboolÚosÚenvironÚgetÚslow_callback_durationÚ_current_handleÚ _task_factoryÚ_coroutine_wrapper_setrÚweakrefÚWeakSetÚ _asyncgensÚ_asyncgens_shutdown_called)rTrrrrUës(             zBaseEventLoop.__init__cCs,d|jj|jƒ|jƒ|jƒfS)Nz"<%s running=%s closed=%s debug=%s>)rVrWÚ is_runningÚ is_closedÚ get_debug)rTrrrrX szBaseEventLoop.__repr__cCstjd|ƒS)NrE)rÚFuture)rTrrrrAszBaseEventLoop.create_futurecCsZ|jƒ|jdkrDtj|d|ƒ}|jrV|jd=n|j||ƒ}|S)NrEréÿÿÿÿ)Ú _check_closedr{rrÚ_source_traceback)rTÚcoroZtaskrrrÚ create_tasks   zBaseEventLoop.create_taskcCs2|dk r%t|ƒ r%tdƒ‚||_dS)Nz'task factory must be a callable or None)Úcallabler4r{)rTÚfactoryrrrÚset_task_factory#s  zBaseEventLoop.set_task_factorycCs|jS)N)r{)rTrrrÚget_task_factory1szBaseEventLoop.get_task_factoryNÚextraÚservercCs t‚dS)N)ÚNotImplementedError)rTr$Úprotocolr_rŽr�rrrÚ_make_socket_transport5sz$BaseEventLoop._make_socket_transportÚ server_sideFÚserver_hostnamec Cs t‚dS)N)r�) rTZrawsockr‘Ú sslcontextr_r“r”rŽr�rrrÚ_make_ssl_transport:sz!BaseEventLoop._make_ssl_transportcCs t‚dS)N)r�)rTr$r‘rDr_rŽrrrÚ_make_datagram_transport@sz&BaseEventLoop._make_datagram_transportcCs t‚dS)N)r�)rTÚpiper‘r_rŽrrrÚ_make_read_pipe_transportEsz'BaseEventLoop._make_read_pipe_transportcCs t‚dS)N)r�)rTr˜r‘r_rŽrrrÚ_make_write_pipe_transportJsz(BaseEventLoop._make_write_pipe_transportc Ks t‚dS)N)r�) rTr‘ÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizerŽÚkwargsrrrÚ_make_subprocess_transportOsz(BaseEventLoop._make_subprocess_transportcCs t‚dS)N)r�)rTrrrÚ_write_to_selfVszBaseEventLoop._write_to_selfcCs t‚dS)N)r�)rTÚ event_listrrrÚ_process_events_szBaseEventLoop._process_eventscCs|jrtdƒ‚dS)NzEvent loop is closed)rfÚ RuntimeError)rTrrrr†cs zBaseEventLoop._check_closedcCs=|jj|ƒ|jƒs9|j|jƒƒ|jƒdS)N)rÚdiscardr‚r‰Úacloser£)rTÚagenrrrÚ_asyncgen_finalizer_hookgs z&BaseEventLoop._asyncgen_finalizer_hookcCs<|jr(tjdj|ƒtd|ƒ|jj|ƒdS)NzNasynchronous generator {!r} was scheduled after loop.shutdown_asyncgens() callÚsource)r€ÚwarningsÚwarnÚformatÚResourceWarningrÚadd)rTr©rrrÚ_asyncgen_firstiter_hookos   z&BaseEventLoop._asyncgen_firstiter_hookccsÖd|_|jdks(t|jƒ r,dSt|jƒ}|jjƒtjdd„|Dƒddd|Œ}|EdH}xTt||ƒD]C\}}t|t ƒr‹|j ddj |ƒd|d |iƒq‹WdS) NTcSsg|]}|jƒ‘qSr)r¨)Ú.0Zagrrrú †s z4BaseEventLoop.shutdown_asyncgens..Zreturn_exceptionsrEÚmessagez?an error occurred during closing of asynchronous generator {!r}Ú exceptionZasyncgen) r€rÚlenÚlistÚclearrÚgatherÚziprrKÚcall_exception_handlerr®)rTZ closing_agensZ shutdown_coroÚresultsÚresultr©rrrÚshutdown_asyncgensxs"     z BaseEventLoop.shutdown_asyncgensc Cs|jƒ|jƒr"tdƒ‚tjƒdk r@tdƒ‚|j|jƒtjƒ|_ |j dk r–t j ƒ}t j d|jd|jƒz,tj|ƒx|jƒ|jr©Pq©WWdd|_d|_ tjdƒ|jdƒ|j dk r t j |ŒXdS)Nz"This event loop is already runningz7Cannot run the event loop while another loop is runningZ firstiterÚ finalizerF)r†r�r¦rZ_get_running_loopÚ_set_coroutine_wrapperÚ_debugÚ threadingÚ get_identrmrrsrdZset_asyncgen_hooksr±rªZ_set_running_loopÚ _run_oncerg)rTZold_agen_hooksrrrÚ run_forever”s0              zBaseEventLoop.run_forevercCsÇ|jƒtj|ƒ }tj|d|ƒ}|r>d|_|jtƒzIy|jƒWn4|r‹|j ƒr‹|j ƒ r‹|j ƒ‚YnXWd|j tƒX|j ƒs½t dƒ‚|jƒS)NrEFz+Event loop stopped before Future completed.)r†rZisfuturerZ ensure_futureZ_log_destroy_pendingÚadd_done_callbackrOrÅr]Ú cancelledrµZremove_done_callbackr¦r½)rTÚfutureZnew_taskrrrÚrun_until_complete°s       z BaseEventLoop.run_until_completecCs d|_dS)NT)rg)rTrrrrMÕszBaseEventLoop.stopcCs“|jƒrtdƒ‚|jr%dS|jr>tjd|ƒd|_|jjƒ|jjƒ|j }|dk r�d|_ |j ddƒdS)Nz!Cannot close a running event loopzClose %rTÚwaitF) r�r¦rfrÁr Údebugrjr¸rkrlÚshutdown)rTÚexecutorrrrr\Ýs          zBaseEventLoop.closecCs|jS)N)rf)rTrrrr‚ószBaseEventLoop.is_closedcCs:|jƒs6tjd|tƒ|jƒs6|jƒdS)Nzunclosed event loop %r)r‚r¬r­r¯r�r\)rTrrrÚ__del__ûs  zBaseEventLoop.__del__cCs |jdk S)N)rm)rTrrrr�szBaseEventLoop.is_runningcCs tjƒS)N)rnrc)rTrrrrnszBaseEventLoop.timecGs6|j|jƒ|||Œ}|jr2|jd=|S)Nrr…)Úcall_atrnr‡)rTÚdelayÚcallbackr›ÚtimerrrrÚ call_laters  zBaseEventLoop.call_latercGsx|jƒ|jr-|jƒ|j|dƒtj||||ƒ}|jrX|jd=tj|j |ƒd|_ |S)NrÏrTr…) r†rÁÚ _check_threadÚ_check_callbackrZ TimerHandler‡ÚheapqÚheappushrk)rTÚwhenrÑr›rÒrrrrÏ#s      zBaseEventLoop.call_atcGsV|jƒ|jr-|jƒ|j|dƒ|j||ƒ}|jrR|jd=|S)NÚ call_soonrr…)r†rÁrÔrÕÚ _call_soonr‡)rTrÑr›rrrrrÙ3s     zBaseEventLoop.call_sooncCs[tj|ƒstj|ƒr3tdj|ƒƒ‚t|ƒsWtdj||ƒƒ‚dS)Nz#coroutines cannot be used with {}()z0a callable object was expected by {}(), got {!r})rZ iscoroutineZiscoroutinefunctionr4r®rŠ)rTrÑÚmethodrrrrÕFs zBaseEventLoop._check_callbackcCs<tj|||ƒ}|jr(|jd=|jj|ƒ|S)Nrr…)rZHandler‡rjr7)rTrÑr›rrrrrÚQs   zBaseEventLoop._call_sooncCs>|jdkrdStjƒ}||jkr:tdƒ‚dS)NzMNon-thread-safe operation invoked on an event loop other than the current one)rmrÂrÃr¦)rTZ thread_idrrrrÔXs  zBaseEventLoop._check_threadcGsV|jƒ|jr#|j|dƒ|j||ƒ}|jrH|jd=|jƒ|S)NÚcall_soon_threadsaferr…)r†rÁrÕrÚr‡r£)rTrÑr›rrrrrÜis     z"BaseEventLoop.call_soon_threadsafecGs{|jƒ|jr#|j|dƒ|dkr\|j}|dkr\tjjƒ}||_tj|j||Œd|ƒS)NÚrun_in_executorrE) r†rÁrÕrlÚ concurrentrÚThreadPoolExecutorZ wrap_futureÚsubmit)rTrÍÚfuncr›rrrrÝts      zBaseEventLoop.run_in_executorcCs ||_dS)N)rl)rTrÍrrrÚset_default_executorsz"BaseEventLoop.set_default_executorc Csd||fg}|r*|jd|ƒ|rA|jd|ƒ|rX|jd|ƒ|ro|jd|ƒdj|ƒ}tjd|ƒ|jƒ}tj||||||ƒ} |jƒ|} d|| d | f}| |jkrþtj|ƒn tj|ƒ| S) Nz%s:%rz family=%rztype=%rzproto=%rzflags=%rz, zGet address info %sz(Getting address info %s took %.3f ms: %rg@�@) r7Újoinr rËrnrrCryrF) rTr9r:r;r&r<r?ÚmsgÚt0ZaddrinfoÚdtrrrÚ_getaddrinfo_debug‚s(  z BaseEventLoop._getaddrinfo_debugr;rr&r<r?c CsW|jr.|jd|j||||||ƒS|jdtj||||||ƒSdS)N)rÁrÝrçrrC)rTr9r:r;r&r<r?rrrrC›s  zBaseEventLoop.getaddrinfocCs|jdtj||ƒS)N)rÝrÚ getnameinfo)rTZsockaddrr?rrrrè¤szBaseEventLoop.getnameinfoÚsslr$Ú local_addrc#s#| dk r| rtdƒ‚| dkrI|rI|sCtdƒ‚|} |dk sa|dk r‰|dk rytdƒ‚t||fd|dtjd|d|d|ƒ} | g} | dk rþt| d|dtjd|d|d|ƒ} | j| ƒnd} tj| d|ƒEdH| jƒ}|s:td ƒ‚| dk rd| jƒ}|sdtd ƒ‚g}xU|D]Ž\}}}}}y tjd|d|d|ƒ}|j d ƒ| dk raxž|D]ƒ\}}}}}y|j |ƒPWqÇtk rI}z9t|j d j ||j jƒƒƒ}|j|ƒWYdd}~XqÇXqÇW|jƒd}wq|jr}tjd ||ƒ|j||ƒEdHWnhtk rÝ}z(|dk r¾|jƒ|j|ƒWYdd}~Xqq|dk rö|jƒ‚YqqXPqqWt|ƒd kr"|d‚qÂt|dƒ‰t‡fdd†|Dƒƒr[|d‚tdj djdd„|Dƒƒƒƒ‚n9|dkr¡tdƒ‚t|ƒsÂtdj |ƒƒ‚|j|||| ƒEdH\}}|jr|jdƒ}tjd|||||ƒ||fS)Nz+server_hostname is only meaningful with sslz:You must set server_hostname when using ssl without a hostz8host/port and sock can not be specified at the same timer;r&r<r?rEz!getaddrinfo() returned empty listFz2error while attempting to bind on address {!r}: {}zconnect %r to %rrrc3s!|]}t|ƒˆkVqdS)N)r)r²rN)Úmodelrrú sz2BaseEventLoop.create_connection..zMultiple exceptions: {}z, css|]}t|ƒVqdS)N)r)r²rNrrrrìsz5host and port was not specified and no sock specifiedz&A Stream Socket was expected, got {!r}rz%r connected to %s:%r: (%r, %r))r rHrr'r7rrÊr½r#Ú setblockingÚbindÚerrnor®ÚstrerrorÚlowerr\rÁr rËÚ sock_connectr¶rÚallrãr(Ú_create_connection_transportÚget_extra_info)rTÚprotocol_factoryr9r:rér;r<r?r$rêr”Úf1ÚfsÚf2ÚinfosZ laddr_infosÚ exceptionsr&ZcnamerDÚ_ÚladdrrNÚ transportr‘r)rërÚcreate_connection§sœ                $         %     zBaseEventLoop.create_connectionc cs®|jdƒ|ƒ}|jƒ}|rjt|tƒr=dn|}|j||||d|d|ƒ} n|j|||ƒ} y |EdHWn| jƒ‚YnX| |fS)NFr“r”)rírArrur–r’r\) rTr$rörér”r“r‘r_r•rþrrrrô+s     z*BaseEventLoop._create_connection_transportÚ reuse_addressÚ reuse_portÚallow_broadcastc#sT| dk rãt| ƒs-tdj| ƒƒ‚ˆs]ˆs]|s]|s]|s]|s]|s]| rÍtdˆdˆd|d|d|d|d|d | ƒ} d jd d „| jƒDƒƒ} td j| ƒƒ‚| jdƒd} nÔˆpìˆs|dkrtdƒ‚||fdff}ntjƒ}xÌdˆfdˆffD]²\}}|dk rDt |d|dt j d|d|d|ƒEdH}|s t dƒ‚xS|D]K\}}}}}||f}||kräddg||<||||.zNsocket modifier keyword arguments can not be used when sock is specified. ({})Frzunexpected address familyrr&rEz!getaddrinfo() returned empty listcsNg|]D\}}ˆr(|ddkp;ˆo;|ddks||f‘qS)rNrr)r²ÚkeyZ addr_pair)rêrrrr³xs z:BaseEventLoop.create_datagram_endpoint..zcan not get address informationÚposixÚcygwinz@Datagram endpoint local_addr=%r remote_addr=%r created: (%r, %r)z2Datagram endpoint remote_addr=%r created: (%r, %r))NN) r*r r®ÚdictrãÚitemsrírhÚ OrderedDictrHrr)r#rvÚnamersÚplatformr!r"Ú SO_REUSEADDRr%Ú SO_BROADCASTrîròr\r7rAr—rÁr rFrË)rTrörêrr;r<r?rrrr$ZoptsZproblemsZr_addrZaddr_pairs_infoZ addr_infosÚidxÚaddrrúZfamrüZprorDrrûZ local_addressZremote_addressrNr‘r_rþr)rêrrÚcreate_datagram_endpointCs°            %    "                    z&BaseEventLoop.create_datagram_endpointc csQt||fd|dtjd|d|ƒEdH}|sMtdj|ƒƒ‚|S)Nr;r&r?rEz%getaddrinfo({!r}) returned empty list)rHrr'r#r®)rTr9r:r;r?rúrrrÚ_create_server_getaddrinfo½s  z(BaseEventLoop._create_server_getaddrinfoÚbacklogr c #sdt|tƒrtdƒ‚|dk s3ˆdk r²|dk rKtdƒ‚ttddƒ} | dkr‡tjdko„tj dk} g} |dkr¥dg} n4t|t ƒsÇt|t j ƒ rÓ|g} n|} ‡‡‡‡fdd †| Dƒ}t j|d ˆŒEdH}ttjj|ƒƒ}d }zWxJ|D]B}|\}}}}}ytj|||ƒ}Wn=tjk r°ˆjr©tjd |||d dƒw=YnX| j|ƒ| rÝ|jtjtjdƒ| rít|ƒ|| kr!ttdƒr!|jtjtjdƒy|j|ƒWq=t k r~}z*t |j!d||j"j#ƒfƒ‚WYdd}~Xq=Xq=Wd}Wd|s®x| D]}|j$ƒqšWXnB|dkrÊtdƒ‚t%|ƒsëtdj&|ƒƒ‚|g} t'ˆ| ƒ}xA| D]9}|j(|ƒ|j)d ƒˆj*|||||ƒq Wˆjr`tj+d|ƒ|S)Nz*ssl argument must be an SSLContext or Nonez8host/port and sock can not be specified at the same timer.rrrr-c s.g|]$}ˆj|ˆdˆdˆƒ‘qS)r;r?)r)r²r9)r;r?r:rTrrr³òs z/BaseEventLoop.create_server..rEFz:create_server() failed to create socket.socket(%r, %r, %r)Úexc_infoTÚ IPPROTO_IPV6z0error while attempting to bind on address %r: %sz)Neither host/port nor sock were specifiedz&A Stream Socket was expected, got {!r}z %r is serving),rrur4r Úgetattrrrvr rsr rrhÚIterablerr¹ÚsetÚ itertoolsÚchainÚ from_iterableÚerrorrÁr Úwarningr7r!r"rr%rrÚ IPV6_V6ONLYrîr#rïrðrñr\r(r®rPÚlistenríZ_start_servingrF)rTrör9r:r;r?r$rrérrr.rQZhostsrørúZ completedÚresr=Úsocktyper<Ú canonnameÚsaÚerrr�r)r;r?r:rTrÚ create_serverÆs€               0          zBaseEventLoop.create_serverccs‚t|ƒs!tdj|ƒƒ‚|j|||dddƒEdH\}}|jrx|jdƒ}tjd|||ƒ||fS)Nz&A Stream Socket was expected, got {!r}r-r“Trz%r handled: (%r, %r))r(r r®rôrÁrõr rË)rTrör$rérþr‘rrrÚconnect_accepted_socket.s # z%BaseEventLoop.connect_accepted_socketc cs~|ƒ}|jƒ}|j|||ƒ}y |EdHWn|jƒ‚YnX|jrttjd|jƒ||ƒ||fS)Nz Read pipe %r connected: (%r, %r))rAr™r\rÁr rËÚfileno)rTrör˜r‘r_rþrrrÚconnect_read_pipeEs      zBaseEventLoop.connect_read_pipec cs~|ƒ}|jƒ}|j|||ƒ}y |EdHWn|jƒ‚YnX|jrttjd|jƒ||ƒ||fS)Nz!Write pipe %r connected: (%r, %r))rAršr\rÁr rËr()rTrör˜r‘r_rþrrrÚconnect_write_pipeVs      z BaseEventLoop.connect_write_pipecCsÁ|g}|dk r,|jdt|ƒƒ|dk ra|tjkra|jdt|ƒƒnF|dk r„|jdt|ƒƒ|dk r§|jdt|ƒƒtjdj|ƒƒdS)Nzstdin=%szstdout=stderr=%sz stdout=%sz stderr=%sú )r7rrrr rËrã)rTrär�ržrŸrFrrrÚ_log_subprocessgs    zBaseEventLoop._log_subprocessr�ržrŸÚuniversal_newlinesrœTr c ksÞt|ttfƒs!tdƒ‚|r3tdƒ‚|sEtdƒ‚|dkr]tdƒ‚|ƒ} |jr�d|} |j| |||ƒ|j| |d||||| �EdH} |jrÔtjd| | ƒ| | fS) Nzcmd must be a stringz universal_newlines must be Falsezshell must be Truerzbufsize must be 0zrun shell command %rTz%s: %r) rr2rr rÁr,r¢r rF) rTröÚcmdr�ržrŸr-rœr r¡r‘Ú debug_logrþrrrÚsubprocess_shellts"        # zBaseEventLoop.subprocess_shellc os |rtdƒ‚|r$tdƒ‚|dkr<tdƒ‚|f| } x<| D]4} t| ttfƒsPtdt| ƒjƒ‚qPW|ƒ} |jrºd|}|j||||ƒ|j | | d||||| �EdH}|jrÿt j d||ƒ|| fS) Nz universal_newlines must be Falsezshell must be Falserzbufsize must be 0z8program arguments must be a bytes or text string, not %szexecute program %rFz%s: %r) r rrr2r4r&rWrÁr,r¢r rF)rTröZprogramr�ržrŸr-rœr r›r¡Z popen_argsÚargr‘r/rþrrrÚsubprocess_exec�s*          zBaseEventLoop.subprocess_execcCs|jS)N)rq)rTrrrÚget_exception_handler«sz#BaseEventLoop.get_exception_handlercCs;|dk r.t|ƒ r.tdj|ƒƒ‚||_dS)Nz/A callable object or None is expected, got {!r})rŠr4r®rq)rTÚhandlerrrrÚset_exception_handler°s   z#BaseEventLoop.set_exception_handlerc Cs†|jdƒ}|sd}|jdƒ}|dk rQt|ƒ||jf}nd}d|krŽ|jdk rŽ|jjrŽ|jj|d<|g}xÌt|ƒD]¾}|d kr¹q¤||}|dkrdjtj|ƒƒ}d}||j ƒ7}nI|dkr=djtj|ƒƒ}d }||j ƒ7}n t |ƒ}|j d j ||ƒƒq¤Wt jd j|ƒd |ƒdS)Nr´z!Unhandled exception in event looprµFZsource_tracebackZhandle_tracebackr-z+Object created at (most recent call last): z+Handle created at (most recent call last): z{}: {}Ú r>r´rµ)rxr&Ú __traceback__rzr‡ÚsortedrãÚ tracebackÚ format_listÚrstriprr7r®r r) rTÚcontextr´rµrZ log_linesrÚvalueÚtbrrrÚdefault_exception_handlerÁs6          z'BaseEventLoop.default_exception_handlercCsÖ|jdkrKy|j|ƒWqÒtk rGtjdddƒYqÒXn‡y|j||ƒWnptk rÑ}zPy#|jddd|d|iƒWn%tk r¾tjdddƒYnXWYdd}~XnXdS) Nz&Exception in default exception handlerrTr´z$Unhandled error in exception handlerrµr<zeException in default exception handler while handling an unexpected error in custom exception handler)rqr?rKr r)rTr<rNrrrr»ís"    z$BaseEventLoop.call_exception_handlercCs!|jr dS|jj|ƒdS)N)Ú _cancelledrjr7)rTrrrrÚ _add_callbacks zBaseEventLoop._add_callbackcCs|j|ƒ|jƒdS)N)rAr£)rTrrrrÚ_add_callback_signalsafe's z&BaseEventLoop._add_callback_signalsafecCs|jr|jd7_dS)Nr)rkre)rTrrrrÚ_timer_handle_cancelled,s z%BaseEventLoop._timer_handle_cancelledc Cslt|jƒ}|tkrŒ|j|tkrŒg}x3|jD](}|jrYd|_q>|j|ƒq>Wtj|ƒ||_d|_nJxG|jrÕ|jdjrÕ|jd8_tj |jƒ}d|_q�Wd}|j sî|j r÷d}n2|jr)|jdj }t d||jƒƒ}|jr|dkr|jƒ}|jj|ƒ}|jƒ|}|dkr„tj} n tj} t|ƒ} |dkrÂtj| d|d| ƒq+| rìtj| d|d|d| ƒq+|dkr+tj| d|d|dƒn|jj|ƒ}|j|ƒ|jƒ|j} xU|jr¢|jd}|j | krtPtj |jƒ}d|_|j j|ƒqNWt|j ƒ} x­t| ƒD]Ÿ} |j jƒ}|jràq¿|jrTz[||_|jƒ}|jƒ|jƒ|}||jkrCtjd t|ƒ|ƒWdd|_Xq¿|jƒq¿Wd}dS) NFrrgð?zpoll took %.3f ms: %s eventsg@�@z$poll %.3f ms took %.3f ms: %s eventsz"poll %.3f ms took %.3f ms: timeoutzExecuting %s took %.3f seconds) r¶rkÚ_MIN_SCHEDULED_TIMER_HANDLESreÚ%_MIN_CANCELLED_TIMER_HANDLES_FRACTIONr@r7rÖÚheapifyÚheappoprjrgZ_whenÚmaxrnrÁÚ _selectorÚselectÚloggingÚINFOÚDEBUGr Úlogr¥rpÚrangeÚpopleftrzZ_runryrr)rTZ sched_countZ new_scheduledrÚtimeoutrØrår¤ræÚlevelZneventÚend_timeZntodoÚirrrrÄ1sˆ                                zBaseEventLoop._run_oncec Csåytj}tj}Wntk r.dSYnXt|ƒ}|j|krNdStj}|ƒ}|r¥|d|fkr�tj d|t ƒqá||ƒd|_n<|d|fkrÎtj d|t ƒn|dƒd|_dS)Nz[loop.set_debug(True): cannot set debug coroutine wrapper; another wrapper is already set %rTzWloop.set_debug(False): cannot unset debug coroutine wrapper; another wrapper was set %rF) rsÚset_coroutine_wrapperÚget_coroutine_wrapperÚAttributeErrorrur|rZ debug_wrapperr¬r­ÚRuntimeWarning)rTÚenabledZ set_wrapperZ get_wrapperÚwrapperZcurrent_wrapperrrrrÀ”s.          z$BaseEventLoop._set_coroutine_wrappercCs|jS)N)rÁ)rTrrrrƒµszBaseEventLoop.get_debugcCs&||_|jƒr"|j|ƒdS)N)rÁr�rÀ)rTrYrrrrr¸s  zBaseEventLoop.set_debug)GrWrarbrUrXrAr‰rŒr�r’r–r—r™ršrr¢r£r¥r†rªr±r¾rÅrÉrMr\r‚rZPY34rÎr�rnrÓrÏrÙrÕrÚrÔrÜrÝrârçrCrèrÿrôrrrr5Ú AI_PASSIVEr&r'r)r*r,rrr0r2r3r5r?r»rArBrCrÄrÀrƒrrrrrrr és¶  !            %             ! �  u    _     , 2    c ! )-rhÚconcurrent.futuresrÞrÖr rrKrvrrrÂrnr9rsr¬r}r-rrrrrrrNr Ú__all__rDrEÚBrokenPipeErrorÚConnectionResetErrorÚConnectionAbortedErrorZ_FATAL_ERROR_IGNORErrr%r(r*r>r'rHrOZAbstractServerrPZAbstractEventLoopr rrrrÚsJ                    = /