3 Õì2aâã@sŒddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZd gZd Zd ZeeefZe ed ƒZ!d(Z"e#ƒZ$dd„Z%dd„Z&dd„Z'dd„Z(dd„Z)dd„Z*dej+dddœdd„Z,e edƒ�rTd d!„Z-nd"d!„Z-d#d$„Z.Gd%d&„d&ej/ƒZ0Gd'd „d ej1ƒZ2dS))éNé)Úcompat)Ú coroutines)Úevents)Úfutures)Útasks)Ú coroutine)ÚloggerÚ BaseEventLoopédgà?ÚAF_INET6éicCs0|j}tt|ddƒtjƒr$t|jƒSt|ƒSdS)NÚ__self__)Z _callbackÚ isinstanceÚgetattrrÚTaskÚreprrÚstr)ÚhandleÚcb©rú0/opt/alt/python36/lib64/python3.6/base_events.pyÚ_format_handleCs rcCs(|tjkrdS|tjkrdSt|ƒSdS)Nzz)Ú subprocessÚPIPEÚSTDOUTr)ÚfdrrrÚ _format_pipeLs   rc CsLttdƒstdƒ‚n4y|jtjtjdƒWntk rFtdƒ‚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_reuseportUs   r&cCs&ttdƒr|d@tjkS|tjkSdS)NÚ SOCK_NONBLOCKé)rr Ú SOCK_STREAM)Ú sock_typerrrÚ_is_stream_socket`s r+cCs&ttdƒr|d@tjkS|tjkSdS)Nr'r()rr Ú SOCK_DGRAM)r*rrrÚ_is_dgram_socketls r-cCsvttdƒsdS|dtjtjhks(|dkr,dSt|ƒrt|tƒrŽ|dkrŽd}n&y t |ƒ}Wnt t fk r²dSX|tj krØtj g}trÞ|jtjƒn|g}t|tƒrò|jdƒ}d|k�rdSxp|D]h}yJtj||ƒt�r@|tjk�r@|||d||ddffS|||d||ffSWntk �rjYnX�qWdS)NÚ inet_ptonróÚZidnaú%)rr Ú IPPROTO_TCPZ IPPROTO_UDPr+r-rÚbytesrÚintÚ TypeErrorr!Ú AF_UNSPECÚAF_INETÚ _HAS_IPv6Úappendr Údecoder.r$)ÚhostÚportÚfamilyÚtypeÚprotoZafsÚafrrrÚ _ipaddr_infotsL         rA)r=r>r?Úflagsc CsZ|dd…\}}t|||||ƒ}|dk r@|jƒ} | j|gƒ| S|j||||||d�SdS)Né)r=r>r?rB)rAÚ create_futureÚ set_resultÚ getaddrinfo) Úaddressr=r>r?rBÚloopr;r<ÚinfoÚfutrrrÚ_ensure_resolved¯s  rKÚ TCP_NODELAYcCs>|jtjtjhkr:t|jƒr:|jtjkr:|jtjtj dƒdS)Nr) r=r r7r r+r>r?r2r"rL)r%rrrÚ _set_nodelay¾s  rMcCsdS)Nr)r%rrrrMÄscCs.|j}t|tƒr t|tƒ r dS|jjƒdS)N)Z _exceptionrÚ BaseExceptionÚ ExceptionÚ_loopÚstop)rJÚexcrrrÚ_run_until_complete_cbÈs   rSc@sHeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Ze d d„ƒZ dS)ÚServercCs||_||_d|_g|_dS)Nr)rPÚsocketsÚ _active_countÚ_waiters)ÚselfrHrUrrrÚ__init__ÔszServer.__init__cCsd|jj|jfS)Nz<%s sockets=%r>)Ú __class__Ú__name__rU)rXrrrÚ__repr__ÚszServer.__repr__cCs|jd7_dS)Nr)rV)rXrrrÚ_attachÝszServer._attachcCs.|jd8_|jdkr*|jdkr*|jƒdS)Nrr)rVrUÚ_wakeup)rXrrrÚ_detachászServer._detachcCsH|j}|dkrdSd|_x|D]}|jj|ƒqW|jdkrD|jƒdS)Nr)rUrPZ _stop_servingrVr^)rXrUr%rrrÚcloseçs  z Server.closecCs0|j}d|_x|D]}|jƒs|j|ƒqWdS)N)rWÚdonerE)rXÚwaitersÚwaiterrrrr^ñs  zServer._wakeupccs<|jdks|jdkrdS|jjƒ}|jj|ƒ|EdHdS)N)rUrWrPrDr9)rXrcrrrÚ wait_closedøs   zServer.wait_closedN) r[Ú __module__Ú __qualname__rYr\r]r_r`r^rrdrrrrrTÒs rTc @sÆeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd†d d dœdd„Z d‡dd d d dœdd„Z dˆdd„Z d‰dd„Z dŠdd„Z ed‹dd„ƒZdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zed'd(„ƒZd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zej�rød3d4„Zd5d6„Zd7d8„Zd9d:„Z d;d<„Z!d=d>„Z"d?d@„Z#dAdB„Z$dCdD„Z%dEdF„Z&dGdH„Z'dIdJ„Z(dKdL„Z)dMdMdMdMdNœdOdP„Z*dŒdQdR„Z+ed�d dMdMdMd d d dSœdTdU„ƒZ,edŽdVdW„ƒZ-ed�dMdMdMe.d d d dXœdYdZ„ƒZ/ed[d\„ƒZ0ed�e1j2e1j3d d]d d d d^œd_d`„ƒZ4ed daœdbdc„ƒZ5eddde„ƒZ6edfdg„ƒZ7dhdi„Z8ee9j:e9j:e9j:ddjdMdkœdldm„ƒZ;ee9j:e9j:e9j:dddMdkœdndo„ƒZdtdu„Z?dvdw„Z@dxdy„ZAdzd{„ZBd|d}„ZCd~d„ZDd€d�„ZEd‚dƒ„ZFd„d…„ZGd S)‘r cCs¦d|_d|_d|_tjƒ|_g|_d|_d|_d|_ t j dƒj |_ d|_|jtjj odttjjdƒƒƒd|_d|_d|_d|_ttdƒr–tjƒ|_nd|_d|_dS)NrFÚ monotonicZPYTHONASYNCIODEBUGgš™™™™™¹?Úget_asyncgen_hooks) Ú_timer_cancelled_countÚ_closedÚ _stoppingÚ collectionsÚdequeÚ_readyÚ _scheduledÚ_default_executorZ _internal_fdsÚ _thread_idÚtimeZget_clock_infoZ resolutionÚ_clock_resolutionÚ_exception_handlerÚ set_debugÚsysrBÚignore_environmentÚboolÚosÚenvironÚgetÚslow_callback_durationÚ_current_handleÚ _task_factoryÚ_coroutine_wrapper_setrÚweakrefÚWeakSetÚ _asyncgensÚ_asyncgens_shutdown_called)rXrrrrYs(   zBaseEventLoop.__init__cCs d|jj|jƒ|jƒ|jƒfS)Nz"<%s running=%s closed=%s debug=%s>)rZr[Ú is_runningÚ is_closedÚ get_debug)rXrrrr\$s zBaseEventLoop.__repr__cCs tj|d�S)N)rH)rZFuture)rXrrrrD)szBaseEventLoop.create_futurecCs@|jƒ|jdkr0tj||d�}|jr<|jd=n |j||ƒ}|S)N)rHréÿÿÿÿ)Ú _check_closedr~rrÚ_source_traceback)rXÚcoroZtaskrrrÚ create_task-s   zBaseEventLoop.create_taskcCs$|dk rt|ƒ rtdƒ‚||_dS)Nz'task factory must be a callable or None)Úcallabler5r~)rXÚfactoryrrrÚset_task_factory;s zBaseEventLoop.set_task_factorycCs|jS)N)r~)rXrrrÚget_task_factoryIszBaseEventLoop.get_task_factoryN)ÚextraÚservercCst‚dS)N)ÚNotImplementedError)rXr%Úprotocolrcr�r‘rrrÚ_make_socket_transportMsz$BaseEventLoop._make_socket_transportF)Ú server_sideÚserver_hostnamer�r‘c Cst‚dS)N)r’) rXZrawsockr“Ú sslcontextrcr•r–r�r‘rrrÚ_make_ssl_transportRsz!BaseEventLoop._make_ssl_transportcCst‚dS)N)r’)rXr%r“rGrcr�rrrÚ_make_datagram_transportXsz&BaseEventLoop._make_datagram_transportcCst‚dS)N)r’)rXÚpiper“rcr�rrrÚ_make_read_pipe_transport]sz'BaseEventLoop._make_read_pipe_transportcCst‚dS)N)r’)rXršr“rcr�rrrÚ_make_write_pipe_transportbsz(BaseEventLoop._make_write_pipe_transportc Kst‚dS)N)r’) rXr“ÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizer�ÚkwargsrrrÚ_make_subprocess_transportgsz(BaseEventLoop._make_subprocess_transportcCst‚dS)N)r’)rXrrrÚ_write_to_selfnszBaseEventLoop._write_to_selfcCst‚dS)N)r’)rXÚ event_listrrrÚ_process_eventswszBaseEventLoop._process_eventscCs|jrtdƒ‚dS)NzEvent loop is closed)rjÚ RuntimeError)rXrrrrˆ{szBaseEventLoop._check_closedcCs*|jj|ƒ|jƒs&|j|j|jƒƒdS)N)r‚Údiscardr…Úcall_soon_threadsafer‹Úaclose)rXÚagenrrrÚ_asyncgen_finalizer_hooks z&BaseEventLoop._asyncgen_finalizer_hookcCs,|jrtjdj|ƒt|d�|jj|ƒdS)NzNasynchronous generator {!r} was scheduled after loop.shutdown_asyncgens() call)Úsource)rƒÚwarningsÚwarnÚformatÚResourceWarningr‚Úadd)rXr¬rrrÚ_asyncgen_firstiter_hook„s  z&BaseEventLoop._asyncgen_firstiter_hookccs˜d|_|jdkst|jƒ r dSt|jƒ}|jjƒtjdd„|Dƒd|dœŽ}|EdH}x8t||ƒD]*\}}t|t ƒrf|j dj |ƒ||dœƒqfWdS)NTcSsg|] }|jƒ‘qSr)r«)Ú.0Zagrrrú ›sz4BaseEventLoop.shutdown_asyncgens..)Zreturn_exceptionsrHz?an error occurred during closing of asynchronous generator {!r})ÚmessageÚ exceptionZasyncgen) rƒr‚ÚlenÚlistÚclearrÚgatherÚziprrOÚcall_exception_handlerr±)rXZ closing_agensZ shutdown_coroÚresultsÚresultr¬rrrÚshutdown_asyncgens�s"      z BaseEventLoop.shutdown_asyncgensc CsÆ|jƒ|jƒrtdƒ‚tjƒdk r,tdƒ‚|j|jƒtjƒ|_ |j dk rft j ƒ}t j |j|jd�z$tj|ƒx|jƒ|jrtPqtWWdd|_d|_ tjdƒ|jdƒ|j dk rÀt j |ŽXdS)Nz"This event loop is already runningz7Cannot run the event loop while another loop is running)Ú firstiterÚ finalizerF)rˆr„r¨rZ_get_running_loopÚ_set_coroutine_wrapperÚ_debugÚ threadingÚ get_identrqr‚rvrhÚset_asyncgen_hooksr´r­Z_set_running_loopÚ _run_oncerk)rXZold_agen_hooksrrrÚ run_forever©s0          zBaseEventLoop.run_forevercCsš|jƒtj|ƒ }tj||d�}|r,d|_|jtƒz>y |jƒWn,|rj|j ƒrj|j ƒ rj|j ƒ‚YnXWd|j tƒX|j ƒs’t dƒ‚|jƒS)N)rHFz+Event loop stopped before Future completed.)rˆrZisfuturerZ ensure_futureZ_log_destroy_pendingZadd_done_callbackrSrÊraZ cancelledr¸Zremove_done_callbackr¨rÀ)rXZfutureZnew_taskrrrÚrun_until_completeÅs      z BaseEventLoop.run_until_completecCs d|_dS)NT)rk)rXrrrrQêszBaseEventLoop.stopcCsj|jƒrtdƒ‚|jrdS|jr,tjd|ƒd|_|jjƒ|jjƒ|j }|dk rfd|_ |j dd�dS)Nz!Cannot close a running event loopzClose %rTF)Úwait) r„r¨rjrÅr Údebugrnr»rorpZshutdown)rXÚexecutorrrrr`òs   zBaseEventLoop.closecCs|jS)N)rj)rXrrrr…szBaseEventLoop.is_closedcCs0|jƒs,tjd|t|d�|jƒs,|jƒdS)Nzunclosed event loop %r)r®)r…r¯r°r²r„r`)rXrrrÚ__del__s  zBaseEventLoop.__del__cCs |jdk S)N)rq)rXrrrr„szBaseEventLoop.is_runningcCstjƒS)N)rrrg)rXrrrrrszBaseEventLoop.timecGs,|j|jƒ||f|žŽ}|jr(|jd=|S)Nrr‡)Úcall_atrrr‰)rXZdelayÚcallbackr�ÚtimerrrrÚ call_later$szBaseEventLoop.call_latercGsX|jƒ|jr"|jƒ|j|dƒtj||||ƒ}|jr@|jd=tj|j |ƒd|_ |S)NrÐrTr‡) rˆrÅÚ _check_threadÚ_check_callbackrZ TimerHandler‰ÚheapqÚheappushro)rXÚwhenrÑr�rÒrrrrÐ9s zBaseEventLoop.call_atcGs@|jƒ|jr"|jƒ|j|dƒ|j||ƒ}|jr<|jd=|S)NÚ call_soonrr‡)rˆrÅrÔrÕÚ _call_soonr‰)rXrÑr�rrrrrÙIs   zBaseEventLoop.call_sooncCs>tj|ƒstj|ƒr"tdj|ƒƒ‚t|ƒs:tdj||ƒƒ‚dS)Nz#coroutines cannot be used with {}()z0a callable object was expected by {}(), got {!r})rZ iscoroutineZiscoroutinefunctionr5r±rŒ)rXrÑÚmethodrrrrÕ\s   zBaseEventLoop._check_callbackcCs,tj|||ƒ}|jr|jd=|jj|ƒ|S)Nrr‡)rZHandler‰rnr9)rXrÑr�rrrrrÚgs  zBaseEventLoop._call_sooncCs,|jdkrdStjƒ}||jkr(tdƒ‚dS)NzMNon-thread-safe operation invoked on an event loop other than the current one)rqrÆrÇr¨)rXZ thread_idrrrrÔns  zBaseEventLoop._check_threadcGs@|jƒ|jr|j|dƒ|j||ƒ}|jr4|jd=|jƒ|S)Nrªrr‡)rˆrÅrÕrÚr‰r¥)rXrÑr�rrrrrªs  z"BaseEventLoop.call_soon_threadsafecGsZ|jƒ|jr|j|dƒ|dkr@|j}|dkr@tjjƒ}||_tj|j|f|žŽ|d�S)NÚrun_in_executor)rH) rˆrÅrÕrpÚ concurrentrZThreadPoolExecutorZ wrap_futureZsubmit)rXrÎÚfuncr�rrrrÜŠs  zBaseEventLoop.run_in_executorcCs ||_dS)N)rp)rXrÎrrrÚset_default_executor•sz"BaseEventLoop.set_default_executorc CsÊd||fg}|r |jd|ƒ|r2|jd|ƒ|rD|jd|ƒ|rV|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@�@) r9Újoinr rÍrrr rFr|rI) rXr;r<r=r>r?rBÚmsgÚt0ZaddrinfoÚdtrrrÚ_getaddrinfo_debug˜s(      z BaseEventLoop._getaddrinfo_debugr)r=r>r?rBc Cs>|jr |jd|j||||||ƒS|jdtj||||||ƒSdS)N)rÅrÜrär rF)rXr;r<r=r>r?rBrrrrF±s   zBaseEventLoop.getaddrinfocCs|jdtj||ƒS)N)rÜr Ú getnameinfo)rXZsockaddrrBrrrråºszBaseEventLoop.getnameinfo)Ússlr=r?rBr%Ú local_addrr–c#s| dk r| rtdƒ‚| dkr2|r2|s.tdƒ‚|} |dk sD|dk �rž|dk rTtdƒ‚t||f|tj|||d�} | g} | dk ržt| |tj|||d�} | j| ƒnd} tj| |d�EdH| jƒ}|sÊtdƒ‚| dk ræ| jƒ}|sætdƒ‚g}�xÜ|D�]B\}}}}}yÒtj|||d�}|j dƒ| dk �rªx€|D]j\}}}}}y|j |ƒPWnHtk �r”}z*t|j d j ||j jƒƒƒ}|j|ƒWYdd}~XnX�q.W|jƒd}wò|j�rÀtjd ||ƒ|j||ƒEdHWn^tk �r}z"|dk �rú|jƒ|j|ƒWYdd}~Xqò|dk �r,|jƒ‚YqòXPqòWt|ƒd k�rR|d ‚nJt|d ƒ‰t‡fd d„|Dƒƒ�r~|d ‚tdj djdd„|Dƒƒƒƒ‚n,|dk�r°tdƒ‚t|jƒ�sÊtdj |ƒƒ‚|j|||| ƒEdH\}}|j�r |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 time)r=r>r?rBrH)rHz!getaddrinfo() returned empty list)r=r>r?Fz2error while attempting to bind on address {!r}: {}zconnect %r to %rrrc3s|]}t|ƒˆkVqdS)N)r)rµrR)Úmodelrrú "sz2BaseEventLoop.create_connection..zMultiple exceptions: {}z, css|]}t|ƒVqdS)N)r)rµrRrrrré'sz5host and port was not specified and no sock specifiedz&A Stream Socket was expected, got {!r}r z%r connected to %s:%r: (%r, %r))r!rKr r)r9rrÌrÀr$Ú setblockingÚbindÚerrnor±ÚstrerrorÚlowerr`rÅr rÍÚ sock_connectr¹rÚallràr+r>Ú_create_connection_transportÚget_extra_info)rXÚprotocol_factoryr;r<rær=r?rBr%rçr–Úf1ÚfsÚf2ÚinfosZ laddr_infosÚ exceptionsr>ZcnamerGÚ_ZladdrrRÚ transportr“r)rèrÚcreate_connection½sœ        "        zBaseEventLoop.create_connectionc cs‚|jdƒ|ƒ}|jƒ}|rFt|tƒr*dn|}|j||||||d�} n|j|||ƒ} y|EdHWn| jƒ‚YnX| |fS)NF)r•r–)rêrDrrxr˜r”r`) rXr%rórær–r•r“rcr—rúrrrrñAs  z*BaseEventLoop._create_connection_transport)r=r?rBÚ reuse_addressÚ reuse_portÚallow_broadcastr%c#s"| dk rŒt| jƒs tdj| ƒƒ‚ˆs<ˆs<|s<|s<|s<|s<| rztˆˆ|||||| d�} djdd„| jƒDƒƒ} tdj| ƒƒ‚| jdƒd} �nˆp’ˆs´|dkr¤td ƒ‚||fdff}nÂtj ƒ}x’dˆfd ˆffD]~\}}|dk rÎt ||t j |||d �EdH}|�st d ƒ‚xB|D]:\}}}}}||f}||k�r:ddg||<||||<�qWqÎW‡‡fd d„|jƒDƒ}|�svtdƒ‚g}|tk �r¤|�r”tdƒ‚ntjdtdd�xþ|D]î\\}}\}}d} d} yrt j |t j |d�} |�rät| ƒ| �rü| jt jt jd ƒ| jdƒˆ�r| j|ƒˆ�r2|j| |ƒEdH|} Wn^t k �rt}z"| dk �rZ| jƒ|j|ƒWYdd}~Xn"| dk �rŒ| jƒ‚YnXP�qªW|d‚|ƒ}|jƒ}|j| || |ƒ}|j�rôˆ�rätjdˆˆ||ƒntjdˆ||ƒy|EdHWn|jƒ‚YnX||fS)Nz#A UDP Socket was expected, got {!r})rçÚ remote_addrr=r?rBrürýrþz, css"|]\}}|rdj||ƒVqdS)z{}={}N)r±)rµÚkÚvrrrrémsz9BaseEventLoop.create_datagram_endpoint..zNsocket modifier keyword arguments can not be used when sock is specified. ({})Frzunexpected address familyr)r=r>r?rBrHz!getaddrinfo() returned empty listcs8g|]0\}}ˆr|ddkp*ˆo*|ddks||f‘qS)rNrr)rµÚkeyZ addr_pair)rçrÿrrr¶Žsz:BaseEventLoop.create_datagram_endpoint..zcan not get address informationz~Passing `reuse_address=True` is no longer supported, as the usage of SO_REUSEPORT in UDP poses a significant security concern.zdThe *reuse_address* parameter has been deprecated as of 3.6.10 and is scheduled for removal in 3.11.rC)Ú stacklevel)r=r>r?z@Datagram endpoint local_addr=%r remote_addr=%r created: (%r, %r)z2Datagram endpoint remote_addr=%r created: (%r, %r))NN) r-r>r!r±ÚdictràÚitemsrêrlÚ OrderedDictrKr r,r$Ú_unsetr¯r°ÚDeprecationWarningr&r"r#Z SO_BROADCASTrërïr`r9rDr™rÅr rIrÍ)rXrórçrÿr=r?rBrürýrþr%ZoptsZproblemsZr_addrZaddr_pairs_infoZ addr_infosÚidxZaddrr÷ZfamrùZprorGrrøZ local_addressZremote_addressrRr“rcrúr)rçrÿrÚcreate_datagram_endpointYs²              z&BaseEventLoop.create_datagram_endpointccs4t||f|tj||d�EdH}|s0tdj|ƒƒ‚|S)N)r=r>rBrHz%getaddrinfo({!r}) returned empty list)rKr r)r$r±)rXr;r<r=rBr÷rrrÚ_create_server_getaddrinfoÚs  z(BaseEventLoop._create_server_getaddrinfor )r=rBr%Úbacklogrærürýc #sšt|tƒrtdƒ‚|dk s$ˆdk �r|dk r4tdƒ‚| dkrPtjdkoNtjdk} g} |dkrddg} n$t|tƒs|t|t j ƒ r„|g} n|} ‡‡‡‡fdd„| Dƒ} t j | dˆiŽEdH}t tjj|ƒƒ}d }�z �x|D�] }|\}}}}}ytj|||ƒ}Wn6tjk �r2ˆj�r,tjd |||d d �wÖYnX| j|ƒ| �rV|jtjtjd ƒ| �rdt|ƒt�r”|tjk�r”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úWXn2|dk�r"tdƒ‚t&|j'ƒ�s.rHFz:create_server() failed to create socket.socket(%r, %r, %r)T)Úexc_infoÚ 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).rrxr5r!ryÚnamervÚplatformrrlÚIterablerr¼ÚsetÚ itertoolsÚchainÚ from_iterabler ÚerrorrÅr Úwarningr9r"r#Z SO_REUSEADDRr&r8r rrZ IPV6_V6ONLYrër$rìrírîr`r+r>r±rTZlistenrêZ_start_servingrI)rXrór;r<r=rBr%r rærürýrUZhostsrõr÷Z completedÚresr@Zsocktyper?Z canonnameZsaÚerrr‘r)r=rBr<rXrÚ create_serverãs‚     (         zBaseEventLoop.create_server)ræccs^t|jƒstdj|ƒƒ‚|j|||ddd�EdH\}}|jrV|jdƒ}tjd|||ƒ||fS)Nz&A Stream Socket was expected, got {!r}r0T)r•r z%r handled: (%r, %r)) r+r>r!r±rñrÅròr rÍ)rXrór%rærúr“rrrÚconnect_accepted_socketLs   z%BaseEventLoop.connect_accepted_socketc csd|ƒ}|jƒ}|j|||ƒ}y|EdHWn|jƒ‚YnX|jr\tjd|jƒ||ƒ||fS)Nz Read pipe %r connected: (%r, %r))rDr›r`rÅr rÍÚfileno)rXróršr“rcrúrrrÚconnect_read_pipecszBaseEventLoop.connect_read_pipec csd|ƒ}|jƒ}|j|||ƒ}y|EdHWn|jƒ‚YnX|jr\tjd|jƒ||ƒ||fS)Nz!Write pipe %r connected: (%r, %r))rDrœr`rÅr rÍr)rXróršr“rcrúrrrÚconnect_write_pipetsz BaseEventLoop.connect_write_pipecCsŽ|g}|dk r |jdt|ƒƒ|dk rF|tjkrF|jdt|ƒƒn4|dk r`|jdt|ƒƒ|dk rz|jdt|ƒƒtjdj|ƒƒdS)Nzstdin=%szstdout=stderr=%sz stdout=%sz stderr=%sú )r9rrrr rÍrà)rXrárŸr r¡rIrrrÚ_log_subprocess…szBaseEventLoop._log_subprocessT)rŸr r¡Úuniversal_newlinesržr¢c ksªt|ttfƒstdƒ‚|r"tdƒ‚|s.tdƒ‚|dkr>tdƒ‚|ƒ} d} |jrfd|} |j| |||ƒ|j| |d||||f| ŽEdH} |jr¢| dk r¢tjd| | ƒ| | fS) Nzcmd must be a stringz universal_newlines must be Falsezshell must be Truerzbufsize must be 0zrun shell command %rTz%s: %r) rr3rr!rÅr"r¤r rI) rXróÚcmdrŸr r¡r#ržr¢r£r“Ú debug_logrúrrrÚsubprocess_shell’s$zBaseEventLoop.subprocess_shellcosÌ|r tdƒ‚|rtdƒ‚|dkr(tdƒ‚|f| } x,| D]$} t| ttfƒs8tdt| ƒjƒ‚q8W|ƒ} d}|jrˆd|}|j||||ƒ|j | | d||||f| ŽEdH}|jrÄ|dk rÄ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!rrr3r5r>r[rÅr"r¤r rI)rXróZprogramrŸr r¡r#ržr¢r�r£Z popen_argsÚargr“r%rúrrrÚsubprocess_exec¬s,   zBaseEventLoop.subprocess_execcCs|jS)N)rt)rXrrrÚ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Œr5r±rt)rXZhandlerrrrÚset_exception_handlerÐs z#BaseEventLoop.set_exception_handlerc Cs|jdƒ}|sd}|jdƒ}|dk r6t|ƒ||jf}nd}d|kr`|jdk r`|jjr`|jj|d<|g}x�t|ƒD]„}|d kr~qp||}|dkr°djtj|ƒƒ}d}||j ƒ7}n2|dkrÚdjtj|ƒƒ}d }||j ƒ7}nt |ƒ}|j d j ||ƒƒqpWt jd j|ƒ|d �dS)Nr·z!Unhandled exception in event loopr¸FZsource_tracebackZhandle_tracebackr0z+Object created at (most recent call last): z+Handle created at (most recent call last): z{}: {}Ú )r>r·r¸)r{r>Ú __traceback__r}r‰ÚsortedràÚ tracebackÚ format_listÚrstriprr9r±r r) rXÚcontextr·r¸rZ log_linesrÚvalueÚtbrrrÚdefault_exception_handlerás6    z'BaseEventLoop.default_exception_handlercCs°|jdkr>y|j|ƒWq¬tk r:tjddd�Yq¬Xnny|j||ƒWn\tk rª}z@y|jd||dœƒWn"tk r˜tjddd�YnXWYdd}~XnXdS)Nz&Exception in default exception handlerT)rz$Unhandled error in exception handler)r·r¸r1zeException in default exception handler while handling an unexpected error in custom exception handler)rtr4rOr r)rXr1rRrrrr¾s" z$BaseEventLoop.call_exception_handlercCs|jr dS|jj|ƒdS)N)Ú _cancelledrnr9)rXrrrrÚ _add_callbackDszBaseEventLoop._add_callbackcCs|j|ƒ|jƒdS)N)r6r¥)rXrrrrÚ_add_callback_signalsafeLs z&BaseEventLoop._add_callback_signalsafecCs|jr|jd7_dS)Nr)rori)rXrrrrÚ_timer_handle_cancelledQsz%BaseEventLoop._timer_handle_cancelledc Cs˜t|jƒ}|tkrd|j|tkrdg}x&|jD]}|jr>d|_q,|j|ƒq,Wtj|ƒ||_d|_n8x6|jrš|jdjrš|jd8_tj |jƒ}d|_qfWd}|j s¬|j r²d}n*|jrÜ|jdj }t td||jƒƒtƒ}|joè|dk�r’|jƒ}|jj|ƒ}|jƒ|}|dk�rtj} ntj} t|ƒ} |dk�rLtj| d|d| ƒnD| �rntj| d|d|d| ƒn"|dk�ržtj| d|d|dƒn |jj|ƒ}|j|ƒ|jƒ|j} xD|j�rú|jd}|j | k�rØPtj |jƒ}d|_|j j|ƒ�q¸Wt|j ƒ} xˆt| ƒD]|} |j jƒ}|j�r*�q|j�r‚zD||_|jƒ}|jƒ|jƒ|}||jk�rttj d t!|ƒ|ƒWdd|_Xn|jƒ�qWd}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¹roÚ_MIN_SCHEDULED_TIMER_HANDLESriÚ%_MIN_CANCELLED_TIMER_HANDLES_FRACTIONr5r9rÖÚheapifyÚheappoprnrkZ_whenÚminÚmaxrrÚMAXIMUM_SELECT_TIMEOUTrÅZ _selectorZselectÚloggingÚINFOÚDEBUGr Úlogr§rsÚrangeÚpopleftr}Z_runr|rr)rXZ sched_countZ new_scheduledrZtimeoutrØrâr¦rãÚlevelZneventZend_timeZntodoÚirrrrÉVsˆ                       zBaseEventLoop._run_oncec Csªytj}tj}Wntk r$dSXt|ƒ}|j|krsV            ;   /