
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a­ ã                   @   sâ  d dl Z d dlZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZzd dlZW n ek
r¤   dZY nX ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlm Z  dZ!dZ"dZ#e$edƒZ%dZ&e'ƒ Z(dd„ Z)dd„ Z*dd„ Z+d*dd„Z,d+dd„Z-dd„ Z.e$ed ƒ�r d!d"„ Z/nd#d"„ Z/G d$d%„ d%ej0ƒZ1G d&d'„ d'ej2ƒZ3G d(d)„ d)ej4ƒZ5dS ),é    Né   )Ú	constants)Ú
coroutines)Úevents)Ú
exceptions)Úfutures)Ú	protocols)Ússlproto)Ú	staggered)Útasks)Ú
transports)Útrsock)Úlogger)ÚBaseEventLoopéd   g      à?ÚAF_INET6i€Q c                 C   s0   | j }tt|dd ƒtjƒr$t|jƒS t| ƒS d S )NÚ__self__)Z	_callbackÚ
isinstanceÚgetattrr   ÚTaskÚreprr   Ústr)ÚhandleÚcb© r   ú8/opt/alt/python38/lib64/python3.8/asyncio/base_events.pyÚ_format_handleJ   s    
r   c                 C   s(   | t jkrdS | t jkrdS t| ƒS d S )Nz<pipe>z<stdout>)Ú
subprocessÚPIPEÚSTDOUTr   )Úfdr   r   r   Ú_format_pipeS   s
    

r!   c                 C   sL   t tdƒstdƒ‚n4z|  tjtjd¡ W n tk
rF   tdƒ‚Y nX d S )NÚSO_REUSEPORTz)reuse_port not supported by socket moduler   zTreuse_port not supported by socket module, SO_REUSEPORT defined but not implemented.)ÚhasattrÚsocketÚ
ValueErrorÚ
setsockoptÚ
SOL_SOCKETr"   ÚOSError©Úsockr   r   r   Ú_set_reuseport\   s    

r+   c           	   	   C   s„  t tdƒsd S |dtjtjhks(| d kr,d S |tjkr>tj}n|tjkrPtj}nd S |d krbd}nXt|tƒrz|dkrzd}n@t|tƒr’|dkr’d}n(zt	|ƒ}W n t
tfk
r¸   Y d S X |tjkrÞtjg}trä| tj¡ n|g}t| tƒrø|  d¡} d| k�rd S |D ]t}zVt || ¡ t�rJ|tjk�rJ|||d| |||ffW   S |||d| |ffW   S W n tk
�rz   Y nX �q
d S )NÚ	inet_ptonr   ó    Ú Zidnaú%)r#   r$   ÚIPPROTO_TCPZIPPROTO_UDPÚSOCK_STREAMÚ
SOCK_DGRAMr   Úbytesr   ÚintÚ	TypeErrorr%   Ú	AF_UNSPECÚAF_INETÚ	_HAS_IPv6Úappendr   Údecoder,   r(   )	ÚhostÚportÚfamilyÚtypeÚprotoZflowinfoZscopeidZafsÚafr   r   r   Ú_ipaddr_infog   sN    
ÿ






rA   c                 C   s¢   t  ¡ }| D ]*}|d }||kr(g ||< ||  |¡ qt| ¡ ƒ}g }|dkr|| |d d |d … ¡ |d d |d …= | dd„ tj tj	|Ž ¡D ƒ¡ |S )Nr   r   c                 s   s   | ]}|d k	r|V  qd S ©Nr   )Ú.0Úar   r   r   Ú	<genexpr>±   s   þz(_interleave_addrinfos.<locals>.<genexpr>)
ÚcollectionsÚOrderedDictr9   ÚlistÚvaluesÚextendÚ	itertoolsÚchainÚfrom_iterableÚzip_longest)Z	addrinfosZfirst_address_family_countZaddrinfos_by_familyÚaddrr=   Zaddrinfos_listsZ	reorderedr   r   r   Ú_interleave_addrinfos¢   s"    
ÿÿrP   c                 C   s4   |   ¡ s"|  ¡ }t|ttfƒr"d S t | ¡ ¡  d S rB   )Ú	cancelledÚ	exceptionr   Ú
SystemExitÚKeyboardInterruptr   Z	_get_loopÚstop)ÚfutÚexcr   r   r   Ú_run_until_complete_cb¸   s
    rX   ÚTCP_NODELAYc                 C   s@   | j tjtjhkr<| jtjkr<| jtjkr<|  tjtj	d¡ d S ©Nr   )
r=   r$   r7   r   r>   r1   r?   r0   r&   rY   r)   r   r   r   Ú_set_nodelayÃ   s    
ÿ
þr[   c                 C   s   d S rB   r   r)   r   r   r   r[   É   s    c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )Ú_SendfileFallbackProtocolc                 C   sh   t |tjƒstdƒ‚|| _| ¡ | _| ¡ | _|j	| _
| ¡  | | ¡ | j
r^| jj ¡ | _nd | _d S )Nz.transport should be _FlowControlMixin instance)r   r   Z_FlowControlMixinr5   Ú
_transportZget_protocolÚ_protoZ
is_readingÚ_should_resume_readingZ_protocol_pausedÚ_should_resume_writingÚpause_readingÚset_protocolÚ_loopÚcreate_futureÚ_write_ready_fut)ÚselfÚtranspr   r   r   Ú__init__Î   s    


z"_SendfileFallbackProtocol.__init__c                 Ã   s2   | j  ¡ rtdƒ‚| j}|d kr$d S |I d H  d S )NzConnection closed by peer)r]   Ú
is_closingÚConnectionErrorre   )rf   rV   r   r   r   ÚdrainÜ   s    
z_SendfileFallbackProtocol.drainc                 C   s   t dƒ‚d S )Nz?Invalid state: connection should have been established already.©ÚRuntimeError)rf   Ú	transportr   r   r   Úconnection_madeä   s    z)_SendfileFallbackProtocol.connection_madec                 C   s@   | j d k	r0|d kr$| j  tdƒ¡ n| j  |¡ | j |¡ d S )NzConnection is closed by peer)re   Zset_exceptionrj   r^   Úconnection_lost)rf   rW   r   r   r   rp   è   s    
ÿz)_SendfileFallbackProtocol.connection_lostc                 C   s    | j d k	rd S | jj ¡ | _ d S rB   )re   r]   rc   rd   ©rf   r   r   r   Úpause_writingó   s    
z'_SendfileFallbackProtocol.pause_writingc                 C   s$   | j d krd S | j  d¡ d | _ d S )NF)re   Ú
set_resultrq   r   r   r   Úresume_writingø   s    
z(_SendfileFallbackProtocol.resume_writingc                 C   s   t dƒ‚d S ©Nz'Invalid state: reading should be pausedrl   )rf   Údatar   r   r   Údata_receivedþ   s    z'_SendfileFallbackProtocol.data_receivedc                 C   s   t dƒ‚d S ru   rl   rq   r   r   r   Úeof_received  s    z&_SendfileFallbackProtocol.eof_receivedc                 Ã   sF   | j  | j¡ | jr| j  ¡  | jd k	r2| j ¡  | jrB| j ¡  d S rB   )	r]   rb   r^   r_   Úresume_readingre   Úcancelr`   rt   rq   r   r   r   Úrestore  s    


z!_SendfileFallbackProtocol.restoreN)Ú__name__Ú
__module__Ú__qualname__rh   rk   ro   rp   rr   rt   rw   rx   r{   r   r   r   r   r\   Í   s   r\   c                   @   sx   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
edd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚServerc                 C   s@   || _ || _d| _g | _|| _|| _|| _|| _d| _d | _	d S )Nr   F)
rc   Ú_socketsÚ_active_countÚ_waitersÚ_protocol_factoryÚ_backlogÚ_ssl_contextÚ_ssl_handshake_timeoutÚ_servingÚ_serving_forever_fut)rf   ÚloopÚsocketsÚprotocol_factoryZssl_contextÚbacklogÚssl_handshake_timeoutr   r   r   rh     s    zServer.__init__c                 C   s   d| j j› d| j›d�S )Nú<z	 sockets=ú>)Ú	__class__r|   rŠ   rq   r   r   r   Ú__repr__   s    zServer.__repr__c                 C   s   |  j d7  _ d S rZ   )r�   rq   r   r   r   Ú_attach#  s    zServer._attachc                 C   s.   |  j d8  _ | j dkr*| jd kr*|  ¡  d S )Nr   r   )r�   r€   Ú_wakeuprq   r   r   r   Ú_detach'  s    zServer._detachc                 C   s,   | j }d | _ |D ]}| ¡ s| |¡ qd S rB   )r‚   Údoners   )rf   ÚwaitersÚwaiterr   r   r   r“   -  s
    zServer._wakeupc              	   C   sJ   | j r
d S d| _ | jD ].}| | j¡ | j | j|| j| | j| j¡ qd S ©NT)	r‡   r€   Zlistenr„   rc   Ú_start_servingrƒ   r…   r†   )rf   r*   r   r   r   r™   4  s    
    þzServer._start_servingc                 C   s   | j S rB   )rc   rq   r   r   r   Úget_loop>  s    zServer.get_loopc                 C   s   | j S rB   )r‡   rq   r   r   r   Ú
is_servingA  s    zServer.is_servingc                 C   s"   | j d krdS tdd„ | j D ƒƒS )Nr   c                 s   s   | ]}t  |¡V  qd S rB   )r   ZTransportSocket)rC   Úsr   r   r   rE   H  s     z!Server.sockets.<locals>.<genexpr>)r€   Útuplerq   r   r   r   rŠ   D  s    
zServer.socketsc                 C   sn   | j }|d krd S d | _ |D ]}| j |¡ qd| _| jd k	rX| j ¡ sX| j ¡  d | _| jdkrj|  ¡  d S )NFr   )	r€   rc   Z_stop_servingr‡   rˆ   r•   rz   r�   r“   )rf   rŠ   r*   r   r   r   ÚcloseJ  s    
ÿ

zServer.closec                 Ã   s"   |   ¡  tjd| jd�I d H  d S )Nr   ©r‰   )r™   r   Úsleeprc   rq   r   r   r   Ústart_serving]  s    zServer.start_servingc              	   Ã   s¢   | j d k	rtd| ›d�ƒ‚| jd kr4td| ›d�ƒ‚|  ¡  | j ¡ | _ zLz| j I d H  W n6 tjk
r�   z|  ¡  |  	¡ I d H  W 5 ‚ X Y nX W 5 d | _ X d S )Nzserver z, is already being awaited on serve_forever()z
 is closed)
rˆ   rm   r€   r™   rc   rd   r   ZCancelledErrorrž   Úwait_closedrq   r   r   r   Úserve_foreverc  s     

ÿ
zServer.serve_foreverc                 Ã   s<   | j d ks| jd krd S | j ¡ }| j |¡ |I d H  d S rB   )r€   r‚   rc   rd   r9   )rf   r—   r   r   r   r¢   x  s
    
zServer.wait_closedN)r|   r}   r~   rh   r‘   r’   r”   r“   r™   rš   r›   ÚpropertyrŠ   rž   r¡   r£   r¢   r   r   r   r   r     s   

r   c                   @   sP  e Zd Zdd„ Zdd„ Zdd„ Zddœd	d
„Zdd„ Zdd„ Zd dddœdd„Z	d¡dddddddœdd„Z
d¢dd„Zd£dd„Zd¤dd„Zd¥dd„Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zejfd7d8„Zd9d:„ Zd;d<„ Zdd=œd>d?„Z dd=œd@dA„Z!dd=œdBdC„Z"dDdE„ Z#dFdG„ Z$dHdI„ Z%dd=œdJdK„Z&dLdM„ Z'dNdO„ Z(dPdQ„ Z)dRdRdRdRdSœdTdU„Z*d¦dVdW„Z+d§ddXœdYdZ„Z,d[d\„ Z-d]d^„ Z.d_d`„ Z/d¨dadb„Z0d©ddRdRdRdddddddcœ
ddde„Z1dªdfdg„Z2d«ddXœdhdi„Z3djdk„ Z4dldm„ Z5ddddnœdodp„Z6d¬dRdRdRe7ddddqœdrds„Z8dRe9j:dRdRdSœdtdu„Z;dvdw„ Z<d­e9j=e9j>ddxddddddyœ	dzd{„Z?ddd|œd}d~„Z@dd€„ ZAd�d‚„ ZBdƒd„„ ZCeDjEeDjEeDjEdddRdddd…œ	d†d‡„ZFeDjEeDjEeDjEdddRdddd…œ	dˆd‰„ZGdŠd‹„ ZHdŒd�„ ZIdŽd�„ ZJd�d‘„ ZKd’d“„ ZLd”d•„ ZMd–d—„ ZNd˜d™„ ZOdšd›„ ZPdœd�„ ZQdždŸ„ ZRdS )®r   c                 C   sˆ   d| _ d| _d| _t ¡ | _g | _d | _d| _d | _	t
 d¡j| _d | _|  t ¡ ¡ d| _d | _d | _d| _d | _t ¡ | _d| _d S )Nr   FÚ	monotonicgš™™™™™¹?)Ú_timer_cancelled_countÚ_closedÚ	_stoppingrF   ÚdequeÚ_readyÚ
_scheduledÚ_default_executorZ_internal_fdsÚ
_thread_idÚtimeÚget_clock_infoZ
resolutionÚ_clock_resolutionÚ_exception_handlerÚ	set_debugr   Z_is_debug_modeÚslow_callback_durationÚ_current_handleÚ_task_factoryÚ"_coroutine_origin_tracking_enabledÚ&_coroutine_origin_tracking_saved_depthÚweakrefZWeakSetÚ
_asyncgensÚ_asyncgens_shutdown_calledrq   r   r   r   rh   ‚  s$    

zBaseEventLoop.__init__c              	   C   s.   d| j j› d|  ¡ › d|  ¡ › d|  ¡ › d�	S )NrŽ   z	 running=z closed=z debug=r�   )r�   r|   Ú
is_runningÚ	is_closedÚ	get_debugrq   r   r   r   r‘   ž  s    ,ÿzBaseEventLoop.__repr__c                 C   s   t j| d�S )NrŸ   )r   ZFuturerq   r   r   r   rd   ¤  s    zBaseEventLoop.create_futureN)Únamec                C   sN   |   ¡  | jd kr2tj|| |d�}|jrJ|jd= n|  | |¡}t ||¡ |S )N)r‰   r¾   éÿÿÿÿ)Ú_check_closedrµ   r   r   Ú_source_tracebackZ_set_task_name)rf   Úcoror¾   Ztaskr   r   r   Úcreate_task¨  s    

zBaseEventLoop.create_taskc                 C   s"   |d k	rt |ƒstdƒ‚|| _d S )Nz'task factory must be a callable or None)Úcallabler5   rµ   )rf   Úfactoryr   r   r   Úset_task_factory¸  s    
zBaseEventLoop.set_task_factoryc                 C   s   | j S rB   )rµ   rq   r   r   r   Úget_task_factoryÆ  s    zBaseEventLoop.get_task_factory)ÚextraÚserverc                C   s   t ‚d S rB   ©ÚNotImplementedError)rf   r*   Úprotocolr—   rÈ   rÉ   r   r   r   Ú_make_socket_transportÊ  s    z$BaseEventLoop._make_socket_transportFT)Úserver_sideÚserver_hostnamerÈ   rÉ   r�   Úcall_connection_madec                C   s   t ‚d S rB   rÊ   )rf   ZrawsockrÌ   Ú
sslcontextr—   rÎ   rÏ   rÈ   rÉ   r�   rÐ   r   r   r   Ú_make_ssl_transportÏ  s    z!BaseEventLoop._make_ssl_transportc                 C   s   t ‚d S rB   rÊ   )rf   r*   rÌ   Úaddressr—   rÈ   r   r   r   Ú_make_datagram_transportØ  s    z&BaseEventLoop._make_datagram_transportc                 C   s   t ‚d S rB   rÊ   ©rf   ÚpiperÌ   r—   rÈ   r   r   r   Ú_make_read_pipe_transportÝ  s    z'BaseEventLoop._make_read_pipe_transportc                 C   s   t ‚d S rB   rÊ   rÕ   r   r   r   Ú_make_write_pipe_transportâ  s    z(BaseEventLoop._make_write_pipe_transportc	           
      Ë   s   t ‚d S rB   rÊ   )
rf   rÌ   ÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizerÈ   Úkwargsr   r   r   Ú_make_subprocess_transportç  s    z(BaseEventLoop._make_subprocess_transportc                 C   s   t ‚d S rB   rÊ   rq   r   r   r   Ú_write_to_selfí  s    zBaseEventLoop._write_to_selfc                 C   s   t ‚d S rB   rÊ   )rf   Ú
event_listr   r   r   Ú_process_eventsö  s    zBaseEventLoop._process_eventsc                 C   s   | j rtdƒ‚d S )NzEvent loop is closed)r§   rm   rq   r   r   r   rÀ   ú  s    zBaseEventLoop._check_closedc                 C   s*   | j  |¡ |  ¡ s&|  | j| ¡ ¡ d S rB   )r¹   Údiscardr¼   Úcall_soon_threadsaferÃ   Úaclose©rf   Úagenr   r   r   Ú_asyncgen_finalizer_hookþ  s    z&BaseEventLoop._asyncgen_finalizer_hookc                 C   s.   | j rtjd|›d�t| d� | j |¡ d S )Nzasynchronous generator z3 was scheduled after loop.shutdown_asyncgens() call©Úsource)rº   ÚwarningsÚwarnÚResourceWarningr¹   Úaddrç   r   r   r   Ú_asyncgen_firstiter_hook  s    
 ýz&BaseEventLoop._asyncgen_firstiter_hookc                 Ã   s„   d| _ t| jƒsd S t| jƒ}| j ¡  tjdd„ |D ƒd| dœŽI d H }t||ƒD ]*\}}t|t	ƒrT|  
d|›�||dœ¡ qTd S )NTc                 S   s   g | ]}|  ¡ ‘qS r   )ræ   )rC   Zagr   r   r   Ú
<listcomp>  s     z4BaseEventLoop.shutdown_asyncgens.<locals>.<listcomp>)Zreturn_exceptionsr‰   z;an error occurred during closing of asynchronous generator )ÚmessagerR   Zasyncgen)rº   Úlenr¹   rH   Úclearr   ÚgatherÚzipr   Ú	ExceptionÚcall_exception_handler)rf   Zclosing_agensZresultsÚresultrè   r   r   r   Úshutdown_asyncgens  s"    


ý
üz BaseEventLoop.shutdown_asyncgensc                 C   s(   |   ¡ rtdƒ‚t ¡ d k	r$tdƒ‚d S )Nz"This event loop is already runningz7Cannot run the event loop while another loop is running)r»   rm   r   Z_get_running_looprq   r   r   r   Ú_check_running&  s    ÿzBaseEventLoop._check_runningc              	   C   s’   |   ¡  |  ¡  |  | j¡ t ¡ | _t ¡ }tj	| j
| jd� z t | ¡ |  ¡  | jrLq^qLW 5 d| _d | _t d ¡ |  d¡ tj	|Ž  X d S )N)Ú	firstiterÚ	finalizerF)rÀ   rû   Ú_set_coroutine_origin_trackingÚ_debugÚ	threadingÚ	get_identr­   ÚsysÚget_asyncgen_hooksÚset_asyncgen_hooksrð   ré   r¨   r   Z_set_running_loopÚ	_run_once)rf   Zold_agen_hooksr   r   r   Úrun_forever-  s$    
ÿ


zBaseEventLoop.run_foreverc              	   C   s    |   ¡  |  ¡  t |¡ }tj|| d�}|r4d|_| t¡ z<z|  
¡  W n*   |rp| ¡ rp| ¡ sp| ¡  ‚ Y nX W 5 | 	t¡ X | ¡ s˜tdƒ‚| ¡ S )NrŸ   Fz+Event loop stopped before Future completed.)rÀ   rû   r   Zisfuturer   Zensure_futureZ_log_destroy_pendingZadd_done_callbackrX   Zremove_done_callbackr  r•   rQ   rR   rm   rù   )rf   ZfutureZnew_taskr   r   r   Úrun_until_completeD  s"    
z BaseEventLoop.run_until_completec                 C   s
   d| _ d S r˜   )r¨   rq   r   r   r   rU   j  s    zBaseEventLoop.stopc                 C   sj   |   ¡ rtdƒ‚| jrd S | jr,t d| ¡ d| _| j ¡  | j ¡  | j	}|d k	rfd | _	|j
dd� d S )Nz!Cannot close a running event loopzClose %rTF)Úwait)r»   rm   r§   rÿ   r   Údebugrª   rô   r«   r¬   Zshutdown©rf   Úexecutorr   r   r   rž   r  s    

zBaseEventLoop.closec                 C   s   | j S rB   )r§   rq   r   r   r   r¼   ˆ  s    zBaseEventLoop.is_closedc                 C   s0   |   ¡ s,|d| ›�t| d� |  ¡ s,|  ¡  d S )Nzunclosed event loop rê   )r¼   rî   r»   rž   )rf   Z_warnr   r   r   Ú__del__Œ  s    zBaseEventLoop.__del__c                 C   s
   | j d k	S rB   )r­   rq   r   r   r   r»   ’  s    zBaseEventLoop.is_runningc                 C   s   t  ¡ S rB   )r®   r¥   rq   r   r   r   r®   –  s    zBaseEventLoop.time)Úcontextc                G   s2   | j |  ¡ | |f|žd|iŽ}|jr.|jd= |S )Nr  r¿   )Úcall_atr®   rÁ   )rf   ZdelayÚcallbackr  rÙ   Útimerr   r   r   Ú
call_laterŸ  s    ÿzBaseEventLoop.call_laterc                G   sZ   |   ¡  | jr"|  ¡  |  |d¡ t |||| |¡}|jrB|jd= t | j	|¡ d|_	|S )Nr  r¿   T)
rÀ   rÿ   Ú_check_threadÚ_check_callbackr   ZTimerHandlerÁ   ÚheapqÚheappushr«   )rf   Úwhenr  r  rÙ   r  r   r   r   r  µ  s    zBaseEventLoop.call_atc                G   sB   |   ¡  | jr"|  ¡  |  |d¡ |  |||¡}|jr>|jd= |S )NÚ	call_soonr¿   )rÀ   rÿ   r  r  Ú
_call_soonrÁ   ©rf   r  r  rÙ   r   r   r   r   r  Å  s    
zBaseEventLoop.call_soonc                 C   sD   t  |¡st  |¡r$td|› d�ƒ‚t|ƒs@td|› d|›�ƒ‚d S )Nzcoroutines cannot be used with z()z"a callable object was expected by z(), got )r   ZiscoroutineZiscoroutinefunctionr5   rÄ   )rf   r  Úmethodr   r   r   r  Ø  s    
ÿ
ÿÿzBaseEventLoop._check_callbackc                 C   s.   t  ||| |¡}|jr|jd= | j |¡ |S )Nr¿   )r   ZHandlerÁ   rª   r9   )rf   r  rÙ   r  r   r   r   r   r  â  s
    zBaseEventLoop._call_soonc                 C   s,   | j d krd S t ¡ }|| j kr(tdƒ‚d S )NzMNon-thread-safe operation invoked on an event loop other than the current one)r­   r   r  rm   )rf   Z	thread_idr   r   r   r  é  s    	

ÿzBaseEventLoop._check_threadc                G   sB   |   ¡  | jr|  |d¡ |  |||¡}|jr6|jd= |  ¡  |S )Nrå   r¿   )rÀ   rÿ   r  r  rÁ   rá   r  r   r   r   rå   ú  s    z"BaseEventLoop.call_soon_threadsafec                 G   sZ   |   ¡  | jr|  |d¡ |d kr@| j}|d kr@tj ¡ }|| _tj|j|f|žŽ | d�S )NÚrun_in_executorrŸ   )	rÀ   rÿ   r  r¬   Ú
concurrentr   ÚThreadPoolExecutorZwrap_futureZsubmit)rf   r  ÚfuncrÙ   r   r   r   r    s    
 ÿzBaseEventLoop.run_in_executorc                 C   s&   t |tjjƒst dtd¡ || _d S )Nz{Using the default executor that is not an instance of ThreadPoolExecutor is deprecated and will be prohibited in Python 3.9é   )r   r  r   r  rì   rí   ÚDeprecationWarningr¬   r
  r   r   r   Úset_default_executor  s     üz"BaseEventLoop.set_default_executorc                 C   sÞ   |› d|›�g}|r$|  d|›�¡ |r8|  d|›�¡ |rL|  d|›�¡ |r`|  d|›�¡ d |¡}t d|¡ |  ¡ }t ||||||¡}	|  ¡ | }
d|› d	|
d
 d›d|	›�}|
| jkrÐt |¡ n
t |¡ |	S )Nú:zfamily=ztype=zproto=zflags=ú, zGet address info %szGetting address info z took g     @�@z.3fzms: )	r9   Újoinr   r	  r®   r$   Úgetaddrinfor³   Úinfo)rf   r;   r<   r=   r>   r?   ÚflagsÚmsgÚt0ÚaddrinfoÚdtr   r   r   Ú_getaddrinfo_debug  s&    


z BaseEventLoop._getaddrinfo_debugr   ©r=   r>   r?   r'  c             
   Ã   s2   | j r| j}ntj}|  d |||||||¡I d H S rB   )rÿ   r,  r$   r%  r  )rf   r;   r<   r=   r>   r?   r'  Zgetaddr_funcr   r   r   r%  2  s           ÿzBaseEventLoop.getaddrinfoc                 Ã   s   |   d tj||¡I d H S rB   )r  r$   Úgetnameinfo)rf   Zsockaddrr'  r   r   r   r.  <  s       ÿzBaseEventLoop.getnameinfo)Úfallbackc             
   Ã   s„   | j r| ¡ dkrtdƒ‚|  ||||¡ z|  ||||¡I d H W S  tjk
rl } z
|s\‚ W 5 d }~X Y nX |  ||||¡I d H S )Nr   zthe socket must be non-blocking)rÿ   Z
gettimeoutr%   Ú_check_sendfile_paramsÚ_sock_sendfile_nativer   ÚSendfileNotAvailableErrorÚ_sock_sendfile_fallback)rf   r*   ÚfileÚoffsetÚcountr/  rW   r   r   r   Úsock_sendfile@  s     ÿ ÿzBaseEventLoop.sock_sendfilec                 Ã   s   t  d|›d�¡‚d S )Nz-syscall sendfile is not available for socket z and file {file!r} combination©r   r2  ©rf   r*   r4  r5  r6  r   r   r   r1  N  s    
ÿz#BaseEventLoop._sock_sendfile_nativec           
   
   Ã   sÌ   |r|  |¡ |rt|tjƒntj}t|ƒ}d}zt|rNt|| |ƒ}|dkrNqžt|ƒd |… }|  d |j|¡I d H }	|	szqž|  	||d |	… ¡I d H  ||	7 }q2|W ¢S |dkrÆt|dƒrÆ|  || ¡ X d S )Nr   Úseek)
r:  Úminr   Z!SENDFILE_FALLBACK_READBUFFER_SIZEÚ	bytearrayr#   Ú
memoryviewr  ÚreadintoZsock_sendall)
rf   r*   r4  r5  r6  Ú	blocksizeÚbufÚ
total_sentÚviewÚreadr   r   r   r3  U  s,    
ÿþ
z%BaseEventLoop._sock_sendfile_fallbackc                 C   s”   dt |ddƒkrtdƒ‚|jtjks,tdƒ‚|d k	rbt|tƒsLtd |¡ƒ‚|dkrbtd |¡ƒ‚t|tƒsztd |¡ƒ‚|dk r�td |¡ƒ‚d S )NÚbÚmodez$file should be opened in binary modez+only SOCK_STREAM type sockets are supportedz+count must be a positive integer (got {!r})r   z0offset must be a non-negative integer (got {!r}))	r   r%   r>   r$   r1   r   r4   r5   Úformatr9  r   r   r   r0  o  s2    
ÿÿ
ÿÿÿÿz$BaseEventLoop._check_sendfile_paramsc                 Ã   s@  g }|  |¡ |\}}}}}	d }
zºtj|||d�}
|
 d¡ |d k	rÄ|D ]r\}}}}}z|
 |¡ W  qÄW qH tk
r¸ } z0d|›d|j ¡ › �}t|j|ƒ}|  |¡ W 5 d }~X Y qHX qH| ¡ ‚|  	|
|	¡I d H  |
W S  tk
�r } z"|  |¡ |
d k	�r
|
 
¡  ‚ W 5 d }~X Y n    |
d k	�r4|
 
¡  ‚ Y nX d S )N©r=   r>   r?   Fz*error while attempting to bind on address ú: )r9   r$   ÚsetblockingÚbindr(   ÚstrerrorÚlowerÚerrnoÚpopÚsock_connectrž   )rf   r   Z	addr_infoZlocal_addr_infosZmy_exceptionsr=   Ztype_r?   Ú_rÓ   r*   ZladdrrW   r(  r   r   r   Ú_connect_sock„  s:    



ÿ


zBaseEventLoop._connect_sock)
Ússlr=   r?   r'  r*   Ú
local_addrrÏ   r�   Úhappy_eyeballs_delayÚ
interleavec       
      	   ƒ   sl  |
d k	r|st dƒ‚|
d kr0|r0|s,t dƒ‚|}
|d k	rD|sDt dƒ‚|d k	rX|d krXd}|d k	sj|d k	�rò|d k	rzt dƒ‚ˆj||f|tj||ˆd�I d H }|s¨tdƒ‚|	d k	rÜˆj|	|tj||ˆd�I d H ‰ˆsàtdƒ‚nd ‰|rît||ƒ}g ‰ |d k�rH|D ]D}z ˆ ˆ |ˆ¡I d H }W  �qvW n tk
�r@   Y �q Y nX �q n.tj‡ ‡‡fdd	„|D ƒ|ˆd
�I d H \}}}|d k�r dd„ ˆ D ƒ‰ t	ˆ ƒdk�r¦ˆ d ‚nJt
ˆ d ƒ‰t‡fdd	„ˆ D ƒƒ�rÒˆ d ‚td d dd	„ ˆ D ƒ¡¡ƒ‚n.|d k�rt dƒ‚|jtjk�r t d|›�ƒ‚ˆj||||
|d�I d H \}}ˆj�rd| d¡}t d|||||¡ ||fS )Nz+server_hostname is only meaningful with sslz:You must set server_hostname when using ssl without a hostú1ssl_handshake_timeout is only meaningful with sslr   ú8host/port and sock can not be specified at the same time©r=   r>   r?   r'  r‰   ú!getaddrinfo() returned empty listc                 3   s    | ]}t  ˆjˆ |ˆ¡V  qd S rB   )Ú	functoolsÚpartialrQ  )rC   r*  )r   Úladdr_infosrf   r   r   rE   ù  s   þ  ÿz2BaseEventLoop.create_connection.<locals>.<genexpr>rŸ   c                 S   s   g | ]}|D ]}|‘qqS r   r   )rC   ÚsubrW   r   r   r   rñ   ÿ  s       z3BaseEventLoop.create_connection.<locals>.<listcomp>r   c                 3   s   | ]}t |ƒˆ kV  qd S rB   ©r   ©rC   rW   )Úmodelr   r   rE     s     zMultiple exceptions: {}r#  c                 s   s   | ]}t |ƒV  qd S rB   r^  r_  r   r   r   rE   
  s     z5host and port was not specified and no sock specifiedú"A Stream Socket was expected, got )r�   r$   z%r connected to %s:%r: (%r, %r))r%   Ú_ensure_resolvedr$   r1   r(   rP   rQ  r
   Zstaggered_raceró   r   ÚallrF  r$  r>   Ú_create_connection_transportrÿ   Úget_extra_infor   r	  )rf   r‹   r;   r<   rR  r=   r?   r'  r*   rS  rÏ   r�   rT  rU  Úinfosr*  rP  rn   rÌ   r   )r   r\  r`  rf   r   Úcreate_connection¨  s¾    ÿÿ    þ   ý


  ÿ
þ ü

ÿ
ÿÿ   þ
    ÿzBaseEventLoop.create_connectionc              	   Ã   s„   |  d¡ |ƒ }|  ¡ }|rHt|tƒr*d n|}	| j|||	||||d�}
n|  |||¡}
z|I d H  W n   |
 ¡  ‚ Y nX |
|fS )NF©rÎ   rÏ   r�   )rI  rd   r   ÚboolrÒ   rÍ   rž   )rf   r*   r‹   rR  rÏ   rÎ   r�   rÌ   r—   rÑ   rn   r   r   r   rd  %  s*    
    ýz*BaseEventLoop._create_connection_transportc             
   Ã   s²   |  ¡ rtdƒ‚t|dtjjƒ}|tjjkr:td|›�ƒ‚|tjjkrŠz|  ||||¡I d H W S  tj	k
rˆ } z
|sx‚ W 5 d }~X Y nX |sœtd|›�ƒ‚|  
||||¡I d H S )NzTransport is closingZ_sendfile_compatiblez(sendfile is not supported for transport zHfallback is disabled and native sendfile is not supported for transport )ri   rm   r   r   Z_SendfileModeZUNSUPPORTEDZ
TRY_NATIVEÚ_sendfile_nativer   r2  Ú_sendfile_fallback)rf   rn   r4  r5  r6  r/  rE  rW   r   r   r   Úsendfile?  s4    ÿÿ ÿÿ ÿzBaseEventLoop.sendfilec                 Ã   s   t  d¡‚d S )Nz!sendfile syscall is not supportedr8  )rf   rg   r4  r5  r6  r   r   r   rj  n  s    ÿzBaseEventLoop._sendfile_nativec              
   Ã   sì   |r|  |¡ |rt|dƒnd}t|ƒ}d}t|ƒ}z‚|rXt|| |ƒ}|dkrX|W ¢bS t|ƒd |… }	|  d |j|	¡I d H }
|
sŠ|W ¢0S | 	¡ I d H  | 
|	d |
… ¡ ||
7 }q6W 5 |dkrØt|dƒrØ|  || ¡ | ¡ I d H  X d S )Ni @  r   r:  )r:  r;  r<  r\   r#   r{   r=  r  r>  rk   Úwrite)rf   rg   r4  r5  r6  r?  r@  rA  r?   rB  rC  r   r   r   rk  r  s*    
z BaseEventLoop._sendfile_fallbackrh  c             
   Ã   sØ   t d krtdƒ‚t|t jƒs*td|›�ƒ‚t|ddƒsFtd|›d�ƒ‚|  ¡ }tj| ||||||dd�}| 	¡  | 
|¡ |  |j|¡}	|  |j¡}
z|I d H  W n. tk
rÐ   | ¡  |	 ¡  |
 ¡  ‚ Y nX |jS )Nz"Python ssl module is not availablez@sslcontext is expected to be an instance of ssl.SSLContext, got Z_start_tls_compatibleFz
transport z  is not supported by start_tls())r�   rÐ   )rR  rm   r   Z
SSLContextr5   r   rd   r	   ZSSLProtocolra   rb   r  ro   ry   ÚBaseExceptionrž   rz   Z_app_transport)rf   rn   rÌ   rÑ   rÎ   rÏ   r�   r—   Zssl_protocolZ
conmade_cbZ	resume_cbr   r   r   Ú	start_tls‹  sB    	ÿ
ÿ    ü
zBaseEventLoop.start_tls)r=   r?   r'  Úreuse_addressÚ
reuse_portÚallow_broadcastr*   c                 ƒ   sú  |
d k	r�|
j tjkr"td|
›�ƒ‚ˆ s>ˆs>|s>|s>|s>|s>|	r~tˆ ˆ||||||	d�}d dd„ | ¡ D ƒ¡}td|› d�ƒ‚|
 d¡ d }�nìˆ sºˆsº|d	kr¨td
ƒ‚||fdff}�nŽttdƒ�rŒ|tj	k�rŒˆ ˆfD ]}|d k	rÚt
|tƒsÚtdƒ‚qÚˆ �rxˆ d	 dk�rxz"t t ˆ ¡j¡�r.t ˆ ¡ W nF tk
�rF   Y n2 tk
�rv } zt dˆ |¡ W 5 d }~X Y nX ||fˆ ˆfff}n¼i }d	ˆ fdˆffD ]€\}}|d k	�r | j||tj||| d�I d H }|�sÞtdƒ‚|D ]:\}}}}}||f}||k�rd d g||< ||| |< �qâ�q ‡ ‡fdd„| ¡ D ƒ}|�sHtdƒ‚g }|tk	�rv|�rftdƒ‚ntjdtdd� |D ]ø\\}}\}}d }
d }zxtj|tj|d�}
|�r´t|
ƒ |	�rÌ|
 tjtjd¡ |
 d¡ ˆ �ræ|
 |¡ ˆ�r|	�s|   |
|¡I d H  |}W n^ tk
�rJ } z |
d k	�r0|
 !¡  | "|¡ W 5 d }~X Y n&   |
d k	�rb|
 !¡  ‚ Y nX  �q|�qz|d	 ‚|ƒ }|  #¡ }|  $|
|||¡}| j%�rÌˆ �r¼t &dˆ ˆ||¡ nt 'dˆ||¡ z|I d H  W n   | !¡  ‚ Y nX ||fS )NzA UDP Socket was expected, got )rS  Úremote_addrr=   r?   r'  rp  rq  rr  r#  c                 s   s$   | ]\}}|r|› d |› �V  qdS )ú=Nr   )rC   ÚkÚvr   r   r   rE   Ë  s      z9BaseEventLoop.create_datagram_endpoint.<locals>.<genexpr>zKsocket modifier keyword arguments can not be used when sock is specified. (ú)Fr   zunexpected address family)NNÚAF_UNIXzstring is expected)r   ú z2Unable to check or remove stale UNIX socket %r: %rr   rX  rY  c                    s8   g | ]0\}}ˆ r|d  dksˆr,|d dks||f‘qS )r   Nr   r   )rC   ÚkeyZ	addr_pair©rS  rs  r   r   rñ   þ  s     þz:BaseEventLoop.create_datagram_endpoint.<locals>.<listcomp>zcan 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.5.10 and is scheduled for removal in 3.11.r  )Ú
stacklevelrG  z@Datagram endpoint local_addr=%r remote_addr=%r created: (%r, %r)z2Datagram endpoint remote_addr=%r created: (%r, %r))(r>   r$   r2   r%   Údictr$  ÚitemsrI  r#   rx  r   r   r5   ÚstatÚS_ISSOCKÚosÚst_modeÚremoveÚFileNotFoundErrorr(   r   Úerrorrb  Ú_unsetrì   rí   r   r+   r&   r'   ZSO_BROADCASTrJ  rO  rž   r9   rd   rÔ   rÿ   r&  r	  ) rf   r‹   rS  rs  r=   r?   r'  rp  rq  rr  r*   ZoptsZproblemsZr_addrZaddr_pairs_inforO   ÚerrZ
addr_infosÚidxrf  ZfamrP  ZprorÓ   rz  r   Zlocal_addressZremote_addressrW   rÌ   r—   rn   r   r{  r   Úcreate_datagram_endpoint¹  s$   ÿÿÿÿþþ   ý
ÿ

 þÿ
    þ
ÿ

ýÿ  ÿ  ÿ




   ÿ   þ  þz&BaseEventLoop.create_datagram_endpointc          
      Ã   s\   |d d… \}}t |||||f|dd … žŽ }	|	d k	r<|	gS |j||||||d�I d H S d S )Nr  r-  )rA   r%  )
rf   rÓ   r=   r>   r?   r'  r‰   r;   r<   r&  r   r   r   rb  L  s     ÿzBaseEventLoop._ensure_resolvedc                 Ã   s8   | j ||f|tj|| d�I d H }|s4td|›d�ƒ‚|S )N)r=   r>   r'  r‰   zgetaddrinfo(z) returned empty list)rb  r$   r1   r(   )rf   r;   r<   r=   r'  rf  r   r   r   Ú_create_server_getaddrinfoX  s     þz(BaseEventLoop._create_server_getaddrinfor   )	r=   r'  r*   rŒ   rR  rp  rq  r�   r¡   c       	         ƒ   s¸  t |tƒrtdƒ‚|d k	r*|d kr*tdƒ‚|d k	s<ˆd k	�r"|d k	rLtdƒ‚|	d krhtjdkoftjdk}	g }|dkr|d g}n$t |tƒs”t |t	j
jƒsœ|g}n|}‡ ‡‡‡fdd„|D ƒ}tj|d	ˆiŽI d H }ttj |¡ƒ}d
}�z|D �]}|\}}}}}zt |||¡}W n8 tjk
�rH   ˆj�r@tjd|||dd� Y qêY nX | |¡ |	�rl| tjtjd¡ |
�rzt|ƒ t�rª|tjk�rªttdƒ�rª| tj tj!d¡ z| "|¡ W qê t#k
�rø } z t#|j$d||j% &¡ f ƒd ‚W 5 d }~X Y qêX qêd}W 5 |�s|D ]}| ¡  �qX n4|d k�r4tdƒ‚|j'tj(k�rPtd|›�ƒ‚|g}|D ]}| )d
¡ �qZt*ˆ|||||ƒ}|�r | +¡  tj,dˆd�I d H  ˆj�r´t -d|¡ |S )Nz*ssl argument must be an SSLContext or NonerV  rW  ÚposixÚcygwinr.   c                    s   g | ]}ˆj |ˆˆ ˆd �‘qS ))r=   r'  )rŠ  )rC   r;   ©r=   r'  r<   rf   r   r   rñ   ’  s   þ
ÿz/BaseEventLoop.create_server.<locals>.<listcomp>r‰   Fz: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 specifiedra  r   rŸ   z%r is serving).r   ri  r5   r%   r�  r¾   r  Úplatformr   rF   ÚabcÚIterabler   rõ   ÚsetrK   rL   rM   rž   r$   r…  rÿ   r   Úwarningr9   r&   r'   ZSO_REUSEADDRr+   r8   r   r#   r�  ZIPV6_V6ONLYrJ  r(   rM  rK  rL  r>   r1   rI  r   r™   r    r&  )rf   r‹   r;   r<   r=   r'  r*   rŒ   rR  rp  rq  r�   r¡   rŠ   ZhostsZfsrf  Z	completedÚresr@   Zsocktyper?   Z	canonnameZsar‡  rÉ   r   r�  r   Úcreate_server`  s²    
ÿÿ
ÿþ
   þ

  ÿÿþþþþ
  ÿzBaseEventLoop.create_server)rR  r�   c                Ã   sv   |j tjkrtd|›�ƒ‚|d k	r.|s.tdƒ‚| j|||dd|d�I d H \}}| jrn| d¡}t d|||¡ ||fS )Nra  rV  r.   T)rÎ   r�   r$   z%r handled: (%r, %r))	r>   r$   r1   r%   rd  rÿ   re  r   r	  )rf   r‹   r*   rR  r�   rn   rÌ   r   r   r   Úconnect_accepted_socketÕ  s$    ÿ    þ
z%BaseEventLoop.connect_accepted_socketc                 Ã   sd   |ƒ }|   ¡ }|  |||¡}z|I d H  W n   | ¡  ‚ Y nX | jr\t d| ¡ ||¡ ||fS )Nz Read pipe %r connected: (%r, %r))rd   r×   rž   rÿ   r   r	  Úfileno©rf   r‹   rÖ   rÌ   r—   rn   r   r   r   Úconnect_read_pipeò  s      ÿzBaseEventLoop.connect_read_pipec                 Ã   sd   |ƒ }|   ¡ }|  |||¡}z|I d H  W n   | ¡  ‚ Y nX | jr\t d| ¡ ||¡ ||fS )Nz!Write pipe %r connected: (%r, %r))rd   rØ   rž   rÿ   r   r	  r™  rš  r   r   r   Úconnect_write_pipe  s      ÿz BaseEventLoop.connect_write_pipec                 C   s–   |g}|d k	r"|  dt|ƒ› �¡ |d k	rJ|tjkrJ|  dt|ƒ› �¡ n8|d k	rf|  dt|ƒ› �¡ |d k	r‚|  dt|ƒ› �¡ t d |¡¡ d S )Nzstdin=zstdout=stderr=zstdout=zstderr=ú )r9   r!   r   r   r   r	  r$  )rf   r(  rÛ   rÜ   rÝ   r&  r   r   r   Ú_log_subprocess  s    zBaseEventLoop._log_subprocess)	rÛ   rÜ   rÝ   Úuniversal_newlinesrÚ   rÞ   ÚencodingÚerrorsÚtextc       	         Ë   sÖ   t |ttfƒstdƒ‚|r"tdƒ‚|s.tdƒ‚|dkr>tdƒ‚|rJtdƒ‚|	d k	rZtdƒ‚|
d k	rjtdƒ‚|ƒ }d }| jr’d	| }|  ||||¡ | j||d
||||f|ŽI d H }| jrÎ|d k	rÎt d||¡ ||fS )Nzcmd must be a stringú universal_newlines must be Falsezshell must be Truer   úbufsize must be 0útext must be Falseúencoding must be Noneúerrors must be Nonezrun shell command %rTú%s: %r)	r   r3   r   r%   rÿ   rž  rà   r   r&  )rf   r‹   ÚcmdrÛ   rÜ   rÝ   rŸ  rÚ   rÞ   r   r¡  r¢  rß   rÌ   Ú	debug_logrn   r   r   r   Úsubprocess_shell  sB          ÿÿ
zBaseEventLoop.subprocess_shellc       	         Ï   sÌ   |rt dƒ‚|rt dƒ‚|dkr(t dƒ‚|r4t dƒ‚|	d k	rDt dƒ‚|
d k	rTt dƒ‚|f| }|ƒ }d }| jrˆd|›�}|  ||||¡ | j||d	||||f|ŽI d H }| jrÄ|d k	rÄt d
||¡ ||fS )Nr£  zshell must be Falser   r¤  r¥  r¦  r§  zexecute program Fr¨  )r%   rÿ   rž  rà   r   r&  )rf   r‹   ZprogramrÛ   rÜ   rÝ   rŸ  rÚ   rÞ   r   r¡  r¢  rÙ   rß   Z
popen_argsrÌ   rª  rn   r   r   r   Úsubprocess_execC  s@    

     þþ
zBaseEventLoop.subprocess_execc                 C   s   | j S rB   )r±   rq   r   r   r   Úget_exception_handlere  s    z#BaseEventLoop.get_exception_handlerc                 C   s(   |d k	rt |ƒstd|›�ƒ‚|| _d S )Nz+A callable object or None is expected, got )rÄ   r5   r±   )rf   Zhandlerr   r   r   Úset_exception_handlerj  s    z#BaseEventLoop.set_exception_handlerc           	      C   s  |  d¡}|sd}|  d¡}|d k	r6t|ƒ||jf}nd}d|kr`| jd k	r`| jjr`| jj|d< |g}t|ƒD ]†}|dkr|qn|| }|dkr®d t |¡¡}d	}|| 	¡ 7 }n2|dkrØd t |¡¡}d
}|| 	¡ 7 }nt
|ƒ}| |› d|› �¡ qntjd |¡|d� d S )Nrò   z!Unhandled exception in event looprR   FZsource_tracebackZhandle_traceback>   rR   rò   r.   z+Object created at (most recent call last):
z+Handle created at (most recent call last):
rH  Ú
rŽ  )Úgetr>   Ú__traceback__r´   rÁ   Úsortedr$  Ú	tracebackÚformat_listÚrstripr   r9   r   r…  )	rf   r  rò   rR   r�  Z	log_linesrz  ÚvalueÚtbr   r   r   Údefault_exception_handler{  s<    

ÿþÿz'BaseEventLoop.default_exception_handlerc                 C   sø   | j d krVz|  |¡ W qô ttfk
r2   ‚ Y qô tk
rR   tjddd� Y qôX nžz|   | |¡ W nŒ ttfk
r€   ‚ Y nt tk
rò } zVz|  d||dœ¡ W n: ttfk
rÀ   ‚ Y n" tk
rà   tjddd� Y nX W 5 d }~X Y nX d S )Nz&Exception in default exception handlerTrŽ  z$Unhandled error in exception handler)rò   rR   r  zeException in default exception handler while handling an unexpected error in custom exception handler)r±   r¸  rS   rT   rn  r   r…  )rf   r  rW   r   r   r   rø   ­  s4    
ÿýýz$BaseEventLoop.call_exception_handlerc                 C   s   |j r
d S | j |¡ d S rB   )Ú
_cancelledrª   r9   ©rf   r   r   r   r   Ú_add_callbackæ  s    zBaseEventLoop._add_callbackc                 C   s   |   |¡ |  ¡  d S rB   )r»  rá   rº  r   r   r   Ú_add_callback_signalsafeî  s    
z&BaseEventLoop._add_callback_signalsafec                 C   s   |j r|  jd7  _d S rZ   )r«   r¦   rº  r   r   r   Ú_timer_handle_cancelledó  s    z%BaseEventLoop._timer_handle_cancelledc              	   C   sÒ  t | jƒ}|tkr`| j| tkr`g }| jD ]}|jr<d|_q*| |¡ q*t |¡ || _d| _n4| jr”| jd jr”|  jd8  _t 	| j¡}d|_q`d }| j
s¤| jrªd}n*| jrÔ| jd j}ttd||  ¡  ƒtƒ}| j |¡}|  |¡ |  ¡ | j }| j�r:| jd }|j|k�r�q:t 	| j¡}d|_| j
 |¡ qøt | j
ƒ}t|ƒD ]|}	| j
 ¡ }|j�rf�qL| j�r¾zD|| _|  ¡ }
| ¡  |  ¡ |
 }|| jk�r°t dt|ƒ|¡ W 5 d | _X n| ¡  �qLd }d S )NFr   r   zExecuting %s took %.3f seconds)ró   r«   Ú_MIN_SCHEDULED_TIMER_HANDLESr¦   Ú%_MIN_CANCELLED_TIMER_HANDLES_FRACTIONr¹  r9   r  ÚheapifyÚheappoprª   r¨   Z_whenr;  Úmaxr®   ÚMAXIMUM_SELECT_TIMEOUTZ	_selectorZselectrã   r°   ÚrangeÚpopleftrÿ   r´   Z_runr³   r   r•  r   )rf   Zsched_countZnew_scheduledr   Ztimeoutr  râ   Zend_timeZntodoÚir)  r+  r   r   r   r  ø  sj    
ÿÿ





 ÿ
zBaseEventLoop._run_oncec                 C   sH   t |ƒt | jƒkrd S |r2t ¡ | _t tj¡ nt | j¡ || _d S rB   )ri  r¶   r  Ú#get_coroutine_origin_tracking_depthr·   Ú#set_coroutine_origin_tracking_depthr   ZDEBUG_STACK_DEPTH©rf   Zenabledr   r   r   rþ   F  s    ÿÿÿz,BaseEventLoop._set_coroutine_origin_trackingc                 C   s   | j S rB   )rÿ   rq   r   r   r   r½   U  s    zBaseEventLoop.get_debugc                 C   s    || _ |  ¡ r|  | j|¡ d S rB   )rÿ   r»   rå   rþ   rÉ  r   r   r   r²   X  s    zBaseEventLoop.set_debug)N)N)NNN)NN)NN)N)r   )r   N)N)NN)FN)r   N)NN)NN)Sr|   r}   r~   rh   r‘   rd   rÃ   rÆ   rÇ   rÍ   rÒ   rÔ   r×   rØ   rà   rá   rã   rÀ   ré   rð   rú   rû   r  r  rU   rž   r¼   rì   rí   r  r»   r®   r  r  r  r  r  r  rå   r  r!  r,  r%  r.  r7  r1  r3  r0  rQ  rg  rd  rl  rj  rk  ro  r†  r‰  r$   r1   rb  rŠ  r6   Z
AI_PASSIVEr—  r˜  r›  rœ  rž  r   r   r«  r¬  r­  r®  r¸  rø   r»  r¼  r½  r  rþ   r½   r²   r   r   r   r   r   €  sF   ÿ ÿ  û
     ÿ
  ÿ
  ÿ
 þ
		&	
	   ÿ

ÿ
%   ÿ     ú  ý
ÿ/ý/   ÿ    ü   þ	   ÿõwý   ú%     ü"29Nr   )r   r   )r   )6rF   Zcollections.abcZconcurrent.futuresr  rZ  r  rK   r�  r$   r  r   r   r®   r³  r  rì   r¸   rR  ÚImportErrorr.   r   r   r   r   r   r   r	   r
   r   r   r   Úlogr   Ú__all__r¾  r¿  r#   r8   rÃ  Úobjectr†  r   r!   r+   rA   rP   rX   r[   ZProtocolr\   ZAbstractServerr   ZAbstractEventLoopr   r   r   r   r   Ú<module>   sb   

		
;


Do