o
     JAf                     @   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yR   dZY nw 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 rd!d" Z/nd#d" Z/d$d% Z0G d&d' d'ej1Z2G d(d) d)ej3Z4G d*d+ d+ej5Z6dS ).    N   )	constants)
coroutines)events)
exceptions)futures)	protocols)sslproto)	staggered)tasks)
transports)trsock)logger)BaseEventLoopServerd   g      ?AF_INET6iQ c                 C   s,   | j }tt|dd tjrt|jS t| S )N__self__)	_callback
isinstancegetattrr   Taskreprr   str)handlecb r   */usr/lib/python3.10/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 )Nz<pipe>z<stdout>)
subprocessPIPESTDOUTr   )fdr   r   r   _format_pipeS   s
   

r#   c                 C   sB   t tds	tdz| tjtjd W d S  ty    tdw )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   sp  t tdsd S |dtjtjhvs| d u rd S |tjkrtj}n|tjkr(tj}nd S |d u r1d}n+t|tr=|dkr=d}nt|trI|dkrId}nzt	|}W n t
tfy[   Y d S w |tjkrntjg}trm|tj n|g}t| tr{| d} d| v rd S |D ]2}z't||  tr|tjkr|||d| |||ffW   S |||d| |ffW   S  ty   Y qw d S )N	inet_ptonr        Zidna%)r%   r&   IPPROTO_TCP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   sR   





rD   c                 C   s   	 t  }| D ]}|d }||v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 ur|V  qd S Nr   ).0ar   r   r   	<genexpr>   s    z(_interleave_addrinfos.<locals>.<genexpr>)
collectionsOrderedDictr<   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$   
rS   c                 C   s4   |   s|  }t|ttfrd S t|   d S rE   )	cancelled	exceptionr   
SystemExitKeyboardInterruptr   Z	_get_loopstop)futexcr   r   r   _run_until_complete_cb   s
   r[   TCP_NODELAYc                 C   sL   | j tjtjhv r | jtjkr"| jtjkr$| tjtj	d d S d S d S d S Nr   )
r@   r&   r:   r   rA   r4   rB   r2   r(   r\   r+   r   r   r   _set_nodelay   s   r^   c                 C   s   d S rE   r   r+   r   r   r   r^      s   c                 C   s$   t d urt| t jrtdd S d S )Nz"Socket cannot be of type SSLSocket)sslr   Z	SSLSocketr8   r+   r   r   r   _check_ssl_socket   s   r`   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   sj   t |tjs
td|| _| | _| | _|j	| _
|  ||  | j
r0| jj | _d S d | _d S )Nz.transport should be _FlowControlMixin instance)r   r   Z_FlowControlMixinr8   
_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                    s4   | j  r
td| j}|d u rd S |I d H  d S )NzConnection closed by peer)rb   
is_closingConnectionErrorrj   )rk   rY   r   r   r   drain   s   
z_SendfileFallbackProtocol.drainc                 C      t d)Nz?Invalid state: connection should have been established already.RuntimeError)rk   	transportr   r   r   connection_made      z)_SendfileFallbackProtocol.connection_madec                 C   s@   | j d ur|d u r| j td n| j | | j| d S )NzConnection is closed by peer)rj   set_exceptionro   rc   connection_lost)rk   rZ   r   r   r   rx      s   
z)_SendfileFallbackProtocol.connection_lostc                 C   s    | j d urd S | jj | _ d S rE   )rj   rb   rh   ri   rk   r   r   r   pause_writing   s   
z'_SendfileFallbackProtocol.pause_writingc                 C   s$   | j d u rd S | j d d | _ d S )NF)rj   
set_resultry   r   r   r   resume_writing   s   

z(_SendfileFallbackProtocol.resume_writingc                 C   rq   Nz'Invalid state: reading should be pausedrr   )rk   datar   r   r   data_received  rv   z'_SendfileFallbackProtocol.data_receivedc                 C   rq   r}   rr   ry   r   r   r   eof_received  rv   z&_SendfileFallbackProtocol.eof_receivedc                    sL   | j | j | jr| j   | jd ur| j  | jr$| j  d S d S rE   )	rb   rg   rc   rd   resume_readingrj   cancelre   r|   ry   r   r   r   restore	  s   


z!_SendfileFallbackProtocol.restoreN)__name__
__module____qualname__rm   rp   ru   rx   rz   r|   r   r   r   r   r   r   r   ra      s    ra   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 )r   c                 C   s@   || _ || _d| _g | _|| _|| _|| _|| _d| _d | _	d S )Nr   F)
rh   _sockets_active_count_waiters_protocol_factory_backlog_ssl_context_ssl_handshake_timeout_serving_serving_forever_fut)rk   loopsocketsprotocol_factoryZssl_contextbacklogssl_handshake_timeoutr   r   r   rm     s   
zServer.__init__c                 C   s   d| j j d| jdS )N<z	 sockets=>)	__class__r   r   ry   r   r   r   __repr__%  s   zServer.__repr__c                 C   s   |  j d7  _ d S r]   )r   ry   r   r   r   _attach(  s   zServer._attachc                 C   s6   |  j d8  _ | j dkr| jd u r|   d S d S d S )Nr   r   )r   r   _wakeupry   r   r   r   _detach,  s   zServer._detachc                 C   s,   | j }d | _ |D ]}| s|| qd S rE   )r   doner{   )rk   waiterswaiterr   r   r   r   2  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   listenr   rh   _start_servingr   r   r   )rk   r,   r   r   r   r   9  s   


zServer._start_servingc                 C      | j S rE   )rh   ry   r   r   r   get_loopC     zServer.get_loopc                 C   r   rE   )r   ry   r   r   r   
is_servingF  r   zServer.is_servingc                 C   s"   | j d u rdS tdd | j D S )Nr   c                 s   s    | ]}t |V  qd S rE   )r   ZTransportSocket)rF   sr   r   r   rH   M  s    z!Server.sockets.<locals>.<genexpr>)r   tuplery   r   r   r   r   I  s   
zServer.socketsc                 C   sr   | j }|d u r	d S d | _ |D ]}| j| qd| _| jd ur,| j s,| j  d | _| jdkr7|   d S d S )NFr   )	r   rh   Z_stop_servingr   r   r   r   r   r   )rk   r   r,   r   r   r   closeO  s   


zServer.closec                    s   |    tdI d H  d S )Nr   )r   r   sleepry   r   r   r   start_servingb  s   zServer.start_servingc              	      s   | j d urtd| d| jd u rtd| d|   | j | _ z&z| j I d H  W n tjyE   z|   | 	 I d H  W   w W d | _ d S d | _ w )Nzserver z, is already being awaited on serve_forever()z
 is closed)
r   rs   r   r   rh   ri   r   CancelledErrorr   wait_closedry   r   r   r   serve_foreverh  s&   


zServer.serve_foreverc                    s>   | j d u s| jd u rd S | j }| j| |I d H  d S rE   )r   r   rh   ri   r<   )rk   r   r   r   r   r   }  s   
zServer.wait_closedN)r   r   r   rm   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r     s    

r   c                   @   s  e Zd Zdd Zdd Zdd Zddd	d
Zdd Zdd ZddddddZ		ddddddddddZ
	dddZ		dddZ		dddZ	dd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d7d8 Zd9d: Zd;d< Zejfd=d>Z d?d@ Z!dAdB Z"ddCdDdEZ#ddCdFdGZ$ddCdHdIZ%dJdK Z&dLdM Z'dNdO Z(ddCdPdQZ)dRdS Z*dTdU Z+dVdW Z,dXdXdXdXdYdZd[Z-dd\d]Z.ddd^d_d`Z/dadb Z0dcdd Z1dedf Z2ddgdhZ3	dddXdXdXdddddddi
djdkZ4		ddldmZ5ddd^dndoZ6dpdq Z7drds Z8ddddtdudvZ9	ddXdXdXe:ddddwdxdyZ;dXe<j=dXdXdYdzd{Z>d|d} Z?	de<j@e<jAdd~dddddd	ddZBdddddZCdd ZDdd ZEdd ZFeGjHeGjHeGjHdddXdddd	ddZIeGjHeGjHeGjHdddXdddd	ddZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUd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| _d S )Nr   F	monotonicg?)_timer_cancelled_count_closed	_stoppingrI   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weakrefWeakSet
_asyncgens_asyncgens_shutdown_called_executor_shutdown_calledry   r   r   r   rm     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_debugry   r   r   r   r     s   zBaseEventLoop.__repr__c                 C   s   	 t j| dS )Nr   )r   Futurery   r   r   r   ri     s   zBaseEventLoop.create_futureN)namec                C   sR   	 |    | jd u rtj|| |d}|jr|jd= |S | | |}t|| |S )N)r   r   )_check_closedr   r   r   _source_tracebackZ_set_task_name)rk   coror   Ztaskr   r   r   create_task  s   
zBaseEventLoop.create_taskc                 C   s$   	 |d urt |std|| _d S )Nz'task factory must be a callable or None)callabler8   r   )rk   factoryr   r   r   set_task_factory  s   	
zBaseEventLoop.set_task_factoryc                 C      	 | j S rE   )r   ry   r   r   r   get_task_factory     zBaseEventLoop.get_task_factory)extraserverc                C      	 t rE   NotImplementedError)rk   r,   protocolr   r   r   r   r   r   _make_socket_transport     z$BaseEventLoop._make_socket_transportFT)server_sideserver_hostnamer   r   r   call_connection_madec                C   r   rE   r   )rk   Zrawsockr   
sslcontextr   r   r   r   r   r   r   r   r   r   _make_ssl_transport  s   z!BaseEventLoop._make_ssl_transportc                 C   r   rE   r   )rk   r,   r   addressr   r   r   r   r   _make_datagram_transport  r   z&BaseEventLoop._make_datagram_transportc                 C   r   rE   r   rk   piper   r   r   r   r   r   _make_read_pipe_transport  r   z'BaseEventLoop._make_read_pipe_transportc                 C   r   rE   r   r   r   r   r   _make_write_pipe_transport  r   z(BaseEventLoop._make_write_pipe_transportc	           
         s   	 t rE   r   )
rk   r   argsshellstdinstdoutstderrbufsizer   kwargsr   r   r   _make_subprocess_transport  s   z(BaseEventLoop._make_subprocess_transportc                 C   r   rE   r   ry   r   r   r   _write_to_self  s   zBaseEventLoop._write_to_selfc                 C   r   rE   r   )rk   
event_listr   r   r   _process_events  s   zBaseEventLoop._process_eventsc                 C      | j rtdd S )NzEvent loop is closed)r   rs   ry   r   r   r   r        zBaseEventLoop._check_closedc                 C   r   )Nz!Executor shutdown has been called)r   rs   ry   r   r   r   _check_default_executor  r   z%BaseEventLoop._check_default_executorc                 C   s.   | j | |  s| | j|  d S d S rE   )r   discardr   call_soon_threadsafer   acloserk   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I d H }t||D ]\}}t|t	r@| 
d|||d q+d S )NTc                 S   s   g | ]}|  qS r   )r   )rF   Zagr   r   r   
<listcomp>$  s    z4BaseEventLoop.shutdown_asyncgens.<locals>.<listcomp>Zreturn_exceptionsz;an error occurred during closing of asynchronous generator )messagerU   Zasyncgen)r   lenr   rK   clearr   gatherzipr   	Exceptioncall_exception_handler)rk   Zclosing_agensresultsresultr   r   r   r   shutdown_asyncgens  s.   



z BaseEventLoop.shutdown_asyncgensc                    s^   	 d| _ | jd u rd S |  }tj| j|fd}|  z|I d H  W |  d S |  w )NT)targetr   )r   r   ri   	threadingThread_do_shutdownstartjoin)rk   futurethreadr   r   r   shutdown_default_executor0  s   
z'BaseEventLoop.shutdown_default_executorc              
   C   s|   z| j jdd |  s| |jd  W d S W d S  ty= } z|  s2| |j| W Y d }~d S W Y d }~d S d }~ww )NTwait)r   shutdownr   r   r{   r  rw   )rk   r  exr   r   r   r  =  s   zBaseEventLoop._do_shutdownc                 C   s(   |   rtdt d urtdd S )Nz"This event loop is already runningz7Cannot run the event loop while another loop is running)r   rs   r   Z_get_running_loopry   r   r   r   _check_runningF  s   zBaseEventLoop._check_runningc              	   C   s   	 |    |   | | j t }z5t | _tj	| j
| jd t|  	 |   | jr0nq(W d| _d | _td  | d tj	|  d S d| _d | _td  | d tj	|  w )N)	firstiter	finalizerTF)r   r  _set_coroutine_origin_tracking_debugsysget_asyncgen_hooksr  	get_identr   set_asyncgen_hooksr  r   r   Z_set_running_loop	_run_oncer   )rk   Zold_agen_hooksr   r   r   run_foreverM  s6   





zBaseEventLoop.run_foreverc              	   C   s   	 |    |   t| }tj|| d}|rd|_|t z z| 	  W n   |r9|
 r9| s9|   W |t n|t w |
 sOtd| S )Nr   Fz+Event loop stopped before Future completed.)r   r  r   Zisfuturer   Zensure_futureZ_log_destroy_pendingadd_done_callbackr[   r(  r   rT   rU   Zremove_done_callbackrs   r  )rk   r  Znew_taskr   r   r   run_until_completee  s&   

	z BaseEventLoop.run_until_completec                 C   s   	 d| _ d S r   )r   ry   r   r   r   rX     s   
zBaseEventLoop.stopc                 C   sv   	 |   r	td| jrd S | jrtd|  d| _| j  | j  d| _	| j
}|d ur9d | _
|jdd d S d S )Nz!Cannot close a running event loopzClose %rTFr  )r   rs   r   r"  r   debugr   r	  r   r   r   r  rk   executorr   r   r   r     s    

zBaseEventLoop.closec                 C   r   rE   )r   ry   r   r   r   r     r   zBaseEventLoop.is_closedc                 C   s8   |   s|d| t| d |  s|   d S d S d S )Nzunclosed event loop r   )r   r  r   r   )rk   _warnr   r   r   __del__  s   zBaseEventLoop.__del__c                 C   s   	 | j d uS rE   )r   ry   r   r   r   r     s   
zBaseEventLoop.is_runningc                 C   s
   	 t  S rE   )r   r   ry   r   r   r   r     s   zBaseEventLoop.time)contextc                G   s6   	 | j |  | |g|R d|i}|jr|jd= |S )Nr0  r   )call_atr   r   )rk   delaycallbackr0  r   timerr   r   r   
call_later  s   zBaseEventLoop.call_laterc                G   s\   	 |    | jr|   | |d t|||| |}|jr"|jd= t| j	| d|_	|S )Nr1  r   T)
r   r"  _check_thread_check_callbackr   ZTimerHandler   heapqheappushr   )rk   whenr3  r0  r   r4  r   r   r   r1    s   zBaseEventLoop.call_atc                G   sD   	 |    | jr|   | |d | |||}|jr |jd= |S )N	call_soonr   )r   r"  r6  r7  
_call_soonr   rk   r3  r0  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iscoroutinefunctionr8   r   )rk   r3  methodr   r   r   r7    s   

zBaseEventLoop._check_callbackc                 C   s.   t ||| |}|jr|jd= | j| |S )Nr   )r   Handler   r   r<   )rk   r3  r   r0  r   r   r   r   r<    s
   zBaseEventLoop._call_soonc                 C   s.   	 | j d u 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%  rs   )rk   Z	thread_idr   r   r   r6    s   

zBaseEventLoop._check_threadc                G   sD   	 |    | jr| |d | |||}|jr|jd= |   |S )Nr   r   )r   r"  r7  r<  r   r   r=  r   r   r   r     s   z"BaseEventLoop.call_soon_threadsafec                 G   sh   |    | jr| |d |d u r&| j}|   |d u r&tjjdd}|| _tj|j	|g|R  | dS )Nrun_in_executorZasyncio)Zthread_name_prefixr   )
r   r"  r7  r   r   
concurrentr   ThreadPoolExecutorZwrap_futuresubmit)rk   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   rA  r   rB  r  r  DeprecationWarningr   r,  r   r   r   set_default_executor7  s   
z"BaseEventLoop.set_default_executorc                 C   s   | d|g}|r| d| |r| d| |r&| d| |r0| d| d|}td| |  }t||||||}	|  | }
d| d	|
d
 dd|	}|
| jkrit| |	S 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: )	r<   r  r   r+  r   r&   getaddrinfor   info)rk   r>   r?   r@   rA   rB   flagsmsgt0addrinfodtr   r   r   _getaddrinfo_debug@  s(   



z BaseEventLoop._getaddrinfo_debugr   r@   rA   rB   rL  c             
      s4   | j r| j}ntj}| d |||||||I d H S rE   )r"  rQ  r&   rJ  r@  )rk   r>   r?   r@   rA   rB   rL  Zgetaddr_funcr   r   r   rJ  X  s   
zBaseEventLoop.getaddrinfoc                    s   |  d tj||I d H S rE   )r@  r&   getnameinfo)rk   ZsockaddrrL  r   r   r   rS  b  s   

zBaseEventLoop.getnameinfo)fallbackc             
      s   | j r| dkrtdt| | |||| z| ||||I d H W S  tjy< } z	|s2 W Y d }~nd }~ww | ||||I d H S )Nr   zthe socket must be non-blocking)	r"  
gettimeoutr'   r`   _check_sendfile_params_sock_sendfile_nativer   SendfileNotAvailableError_sock_sendfile_fallback)rk   r,   fileoffsetcountrT  rZ   r   r   r   sock_sendfilef  s$   
zBaseEventLoop.sock_sendfilec                    s   t d|d|d)Nz-syscall sendfile is not available for socket z
 and file z combinationr   rX  rk   r,   rZ  r[  r\  r   r   r   rW  u  s   z#BaseEventLoop._sock_sendfile_nativec           
   
      s   |r| | |rt|tjntj}t|}d}zL	 |r)t|| |}|dkr)n(t|d | }| d |j|I d H }	|	s?n| ||d |	 I d H  ||	7 }q|W |dkrdt	|dre| ||  S S S |dkrwt	|drx| ||  w w w )Nr   Tseek)
r`  minr   Z!SENDFILE_FALLBACK_READBUFFER_SIZE	bytearray
memoryviewr@  readintoZsock_sendallr%   )
rk   r,   rZ  r[  r\  	blocksizebuf
total_sentviewreadr   r   r   rY  |  s8   
z%BaseEventLoop._sock_sendfile_fallbackc                 C   s   dt |ddvrtd|jtjkstd|d ur1t|ts&td||dkr1td|t|ts=td||dk rHt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'   rA   r&   r4   r   r7   r8   formatr_  r   r   r   rV    s4   

z$BaseEventLoop._check_sendfile_paramsc                    s&  	 g }| | |\}}}}}	d }
z[tj|||d}
|
d |d urb|D ]7\}}}}}z|
| W  n, ty] } zd|d|j  }t|j|}| | W Y d }~q&d }~ww | | 	|
|	I d H  |
W S  ty } z| | |
d ur|

   d }~w   |
d ur|

   )Nr@   rA   rB   Fz*error while attempting to bind on address : )r<   r&   setblockingbindr*   strerrorlowererrnopopsock_connectr   )rk   r   Z	addr_infoZlocal_addr_infosZmy_exceptionsr@   Ztype_rB   _r   r,   laddrrZ   rM  r   r   r   _connect_sock  sL   


	
zBaseEventLoop._connect_sock)
r_   r@   rB   rL  r,   
local_addrr   r   happy_eyeballs_delay
interleavec       
      	      s^  	 |
d ur|st d|
d u r|r|st d|}
|d ur$|s$t d|d ur,t| |d ur6|d u r6d}|d us>|d ur|d urFt dj||f|tj||dI d H }|s]td|	d urwj|	|tj||dI d H svtdnd |rt||}g  |d u r|D ]}z |I d H }W  n	 ty   Y qw ntj	 fdd	|D |d
I d H \}}}|d u rdd  D  t
 dkrΈ d t d tfdd	 D r d tdddd	  D n|d u rt d|jtjkr	t d|j||||
|dI d H \}}jr+|d}td||||| ||fS )Nz+server_hostname is only meaningful with sslz:You must set server_hostname when using ssl without a host1ssl_handshake_timeout is only meaningful with sslr   8host/port and sock can not be specified at the same timer@   rA   rB   rL  r   !getaddrinfo() returned empty listc                 3   s"    | ]}t j |V  qd S rE   )	functoolspartialrx  )rF   rO  )r   laddr_infosrk   r   r   rH   #  s    z2BaseEventLoop.create_connection.<locals>.<genexpr>r   c                 S   s   g | ]	}|D ]}|qqS r   r   )rF   subrZ   r   r   r   r  )  s    z3BaseEventLoop.create_connection.<locals>.<listcomp>r   c                 3   s    | ]	}t | kV  qd S rE   r   rF   rZ   )modelr   r   rH   /  s    zMultiple exceptions: {}rI  c                 s   s    | ]}t |V  qd S rE   r  r  r   r   r   rH   4  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'   r`   _ensure_resolvedr&   r4   r*   rS   rx  r
   Zstaggered_racer  r   allrl  r  rA   _create_connection_transportr"  get_extra_infor   r+  )rk   r   r>   r?   r_   r@   rB   rL  r,   ry  r   r   rz  r{  infosrO  rv  rt   r   r   )r   r  r  rk   r   create_connection  s   




zBaseEventLoop.create_connectionc              	      s~   | d | }|  }|r%t|trd n|}	| j|||	||||d}
n| |||}
z
|I d H  W |
|fS    |
   )NFr   r   r   )ro  ri   r   boolr   r   r   )rk   r,   r   r_   r   r   r   r   r   r   rt   r   r   r   r  O  s$   
z*BaseEventLoop._create_connection_transportc             
      s   	 |  r
tdt|dtjj}|tjju rtd||tjju rHz| ||||I d H W S  tj	yG } z	|s= W Y d }~nd }~ww |sQt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 )rn   rs   r   r   Z_SendfileModeZUNSUPPORTEDZ
TRY_NATIVE_sendfile_nativer   rX  _sendfile_fallback)rk   rt   rZ  r[  r\  rT  rk  rZ   r   r   r   sendfilei  s>   
zBaseEventLoop.sendfilec                    s   t d)Nz!sendfile syscall is not supportedr^  )rk   rl   rZ  r[  r\  r   r   r   r    s   zBaseEventLoop._sendfile_nativec              
      s@  |r| | |rt|dnd}t|}d}t|}zl	 |rDt|| |}|dkrD|W |dkr<t|dr<| ||  | I d H  S t|d | }	| d |j|	I d H }
|
ss|W |dkrkt|drk| ||  | I d H  S |	 I d H  |
|	d |
  ||
7 }q|dkrt|dr| ||  | I d H  w )Ni @  r   Tr`  )r`  ra  rb  ra   r%   r   rc  r@  rd  rp   write)rk   rl   rZ  r[  r\  re  rf  rg  rB   rh  ri  r   r   r   r    s<   
	z BaseEventLoop._sendfile_fallbackr  c             
      s   	 t d u r
tdt|t jstd|t|dds%td|d|  }tj| ||||||dd}|	  |
| | |j|}	| |j}
z	|I d H  W |jS  tyi   |  |	  |
   w )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   )r_   rs   r   Z
SSLContextr8   r   ri   r	   ZSSLProtocolrf   rg   r;  ru   r   BaseExceptionr   r   Z_app_transport)rk   rt   r   r   r   r   r   r   Zssl_protocolZ
conmade_cbZ	resume_cbr   r   r   	start_tls  sD   

zBaseEventLoop.start_tls)r@   rB   rL  reuse_address
reuse_portallow_broadcastr,   c                    s  	 |
d urJ|
j tjkrtd|
 s!s!|s!|s!|s!|s!|	rAt ||||||	d}ddd | D }td| d|
d d }ne s^s^|d	krVtd
||fdff}nttdr|tj	kr fD ]}|d ur{t
|ts{tdql r d	 dvrztt jrt  W n! ty   Y n ty } ztd | W Y d }~nd }~ww ||f fff}nZi }d	 fdffD ]<\}}|d ur| j||tj||| dI d H }|std|D ]\}}}}}||f}||vrd d g||< ||| |< qqʇ fdd| D }|stdg }|tur0|r(tdtjdtdd |D ]x\\}}\}}d }
d }z<tj|tj|d}
|rOt|
 |	r[|
tjtjd |
d  rh|
| ry|	sw|  |
|I d H  |}W n. ty } z|
d ur|
!  |"| W Y d }~q2d }~w   |
d ur|
!    n|d	 | }| # }| $|
|||}| j%r׈ rt&d || nt'd|| z
|I d H  W ||fS    |!   )NzA UDP Socket was expected, got )ry  remote_addrr@   rB   rL  r  r  r  rI  c                 s   s&    | ]\}}|r| d | V  qdS )=Nr   )rF   kvr   r   r   rH     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   r~  r  c                    s8   g | ]\}} r|d  du sr|d du s||fqS )r   Nr   r   )rF   keyZ	addr_pairry  r  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.rE  )
stacklevelrm  z@Datagram endpoint local_addr=%r remote_addr=%r created: (%r, %r)z2Datagram endpoint remote_addr=%r created: (%r, %r))(rA   r&   r5   r'   dictr  itemsro  r%   r  r   r   r8   statS_ISSOCKosst_moderemoveFileNotFoundErrorr*   r   errorr  _unsetr  r  rF  r-   r(   r)   SO_BROADCASTrp  ru  r   r<   ri   r   r"  rK  r+  ) rk   r   ry  r  r@   rB   rL  r  r  r  r,   ZoptsZproblemsZr_addrZaddr_pairs_inforR   errZ
addr_infosidxr  Zfamrv  Zpror   r  r   Zlocal_addressZremote_addressrZ   r   r   rt   r   r  r   create_datagram_endpoint  s  








z&BaseEventLoop.create_datagram_endpointc          
         s\   |d d \}}t |||||g|dd  R  }	|	d ur |	gS |j||||||dI d H S )NrE  rR  )rD   rJ  )
rk   r   r@   rA   rB   rL  r   r>   r?   rK  r   r   r   r  v  s    zBaseEventLoop._ensure_resolvedc                    s:   | j ||f|tj|| dI d H }|std|d|S )N)r@   rA   rL  r   zgetaddrinfo(z) returned empty list)r  r&   r4   r*   )rk   r>   r?   r@   rL  r  r   r   r   _create_server_getaddrinfo  s   z(BaseEventLoop._create_server_getaddrinfor   )	r@   rL  r,   r   r_   r  r  r   r   c       	            s  	 t |trtd|d ur|d u rtd|d urt| |d us(d ur|d ur0td|	d u r>tjdko=tjdk}	g }|dkrHd g}nt |t	sTt |t
jjsX|g}n|} fdd|D }tj| I d H }ttj|}d	}z|D ]v}|\}}}}}z	t|||}W n tjy   jrtjd
|||dd Y q{w || |	r|tjtjd |
rt| tr|tjkrttdr|tj tj!d z|"| W q{ t#y } zt#|j$d||j%& f d d }~ww d}W |s|D ]}|'  qn)|s|D ]}|'  qw w |d u rtd|j(tj)kr(td||g}|D ]}|*d	 q-t+|||||}|rN|,  t-dI d H  jrXt.d| |S )Nz*ssl argument must be an SSLContext or Noner|  r}  posixcygwinr0   c                    s   g | ]}j | d qS ))r@   rL  )r  )rF   r>   r@   rL  r?   rk   r   r   r    s
    

z/BaseEventLoop.create_server.<locals>.<listcomp>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 specifiedr  r   z%r is serving)/r   r  r8   r'   r`   r  r   r#  platformr   rI   abcIterabler   r
  setrN   rO   rP   r&   r  r"  r   warningr<   r(   r)   SO_REUSEADDRr-   r;   r   r%   r  IPV6_V6ONLYrp  r*   rs  rq  rr  r   rA   r4   ro  r   r   r   rK  )rk   r   r>   r?   r@   rL  r,   r   r_   r  r  r   r   r   Zhostsfsr  Z	completedresrC   socktyperB   	canonnamesar  r   r   r  r   create_server  s   






zBaseEventLoop.create_server)r_   r   c                   s   |j tjkrtd||d ur|std|d ur t| | j|||dd|dI d H \}}| jr@|d}t	d||| ||fS )Nr  r|  r0   T)r   r   r&   z%r handled: (%r, %r))
rA   r&   r4   r'   r`   r  r"  r  r   r+  )rk   r   r,   r_   r   rt   r   r   r   r   connect_accepted_socket  s"   

z%BaseEventLoop.connect_accepted_socketc                    `   | }|   }| |||}z|I d H  W n   |   | jr,td| || ||fS )Nz Read pipe %r connected: (%r, %r))ri   r   r   r"  r   r+  filenork   r   r   r   r   rt   r   r   r   connect_read_pipe     
zBaseEventLoop.connect_read_pipec                    r  )Nz!Write pipe %r connected: (%r, %r))ri   r   r   r"  r   r+  r  r  r   r   r   connect_write_pipe*  r  z BaseEventLoop.connect_write_pipec                 C   s   |g}|d ur| dt|  |d ur%|tjkr%| dt|  n|d ur3| dt|  |d urA| dt|  td| d S )Nzstdin=zstdout=stderr=zstdout=zstderr= )r<   r#   r   r!   r   r+  r  )rk   rM  r   r   r   rK  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|r&td|	d ur.td|
d ur6td| }d }| jrJd	| }| |||| | j||d
||||fi |I d H }| jrj|d urjt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   r6   r   r'   r"  r  r   r   rK  )rk   r   cmdr   r   r   r  r   r   r  r  r  r   r   	debug_logrt   r   r   r   subprocess_shellG  s8   zBaseEventLoop.subprocess_shellc       	            s   |rt d|rt d|dkrt d|rt d|	d ur#t d|
d ur+t d|f| }| }d }| jrEd|}| |||| | j||d	||||fi |I d H }| jre|d uretd
|| ||fS )Nr  zshell must be Falser   r  r  r  r  zexecute program Fr  )r'   r"  r  r   r   rK  )rk   r   Zprogramr   r   r   r  r   r   r  r  r  r   r   Z
popen_argsr   r  rt   r   r   r   subprocess_execk  s8   

zBaseEventLoop.subprocess_execc                 C   r   rE   )r   ry   r   r   r   get_exception_handler  s   z#BaseEventLoop.get_exception_handlerc                 C   s*   	 |d urt |std||| _d S )Nz+A callable object or None is expected, got )r   r8   r   )rk   handlerr   r   r   set_exception_handler  s   
z#BaseEventLoop.set_exception_handlerc           	      C   s  	 | d}|s
d}| d}|d urt|||jf}nd}d|vr1| jd ur1| jjr1| jj|d< |g}t|D ]C}|dv r?q8|| }|dkrXdt|}d	}||	 7 }n|dkrmdt|}d
}||	 7 }nt
|}|| d|  q8tjd||d d S )Nr  z!Unhandled exception in event looprU   FZsource_tracebackZhandle_traceback>   rU   r  r0   z+Object created at (most recent call last):
z+Handle created at (most recent call last):
rn  
r  )getrA   __traceback__r   r   sortedr  	tracebackformat_listrstripr   r<   r   r  )	rk   r0  r  rU   r  Z	log_linesr  valuetbr   r   r   default_exception_handler  s<   


z'BaseEventLoop.default_exception_handlerc                 C   s   	 | j d u r)z| | W d S  ttfy     ty(   tjddd Y d S w z	|  | | W d S  ttfy<     tyz } z3z| d||d W n ttfyX     tyg   tjddd Y nw W Y d }~d S W Y d }~d S d }~ww )Nz&Exception in default exception handlerTr  z$Unhandled error in exception handler)r  rU   r0  zeException in default exception handler while handling an unexpected error in custom exception handler)r   r  rV   rW   r  r   r  )rk   r0  rZ   r   r   r   r    sB   


z$BaseEventLoop.call_exception_handlerc                 C   s   	 |j rd S | j| d S rE   )
_cancelledr   r<   rk   r   r   r   r   _add_callback  s   zBaseEventLoop._add_callbackc                 C   s   	 |  | |   d S rE   )r  r   r  r   r   r   _add_callback_signalsafe  s   
z&BaseEventLoop._add_callback_signalsafec                 C   s   	 |j r|  jd7  _d S d S r]   )r   r   r  r   r   r   _timer_handle_cancelled  s   z%BaseEventLoop._timer_handle_cancelledc              	   C   s  	 t | j}|tkr1| j| tkr1g }| jD ]}|jrd|_q|| qt| || _d| _n"| jrS| jd jrS|  jd8  _t	| j}d|_| jrS| jd js:d }| j
s[| jr^d}n| jrs| jd j}ttd||   t}| j|}| | |  | j }| jr| jd }|j|krnt	| j}d|_| j
| | jst | j
}t|D ];}	| j
 }|jrq| jrz$|| _|  }
|  |  |
 }|| jkrtdt|| W d | _qd | _w |  qd }d S )NFr   r   zExecuting %s took %.3f seconds)r  r   _MIN_SCHEDULED_TIMER_HANDLESr   %_MIN_CANCELLED_TIMER_HANDLES_FRACTIONr  r<   r8  heapifyheappopr   r   Z_whenra  maxr   MAXIMUM_SELECT_TIMEOUT	_selectorselectr   r   rangepopleftr"  r   Z_runr   r   r  r   )rk   Zsched_countZnew_scheduledr   timeoutr:  r   end_timeZntodoirN  rP  r   r   r   r'     sn   









zBaseEventLoop._run_oncec                 C   sH   t |t | jkrd S |rt | _ttj nt| j || _d S rE   )r  r   r#  #get_coroutine_origin_tracking_depthr   #set_coroutine_origin_tracking_depthr   ZDEBUG_STACK_DEPTHrk   Zenabledr   r   r   r!  n  s   
z,BaseEventLoop._set_coroutine_origin_trackingc                 C   r   rE   )r"  ry   r   r   r   r   }  r   zBaseEventLoop.get_debugc                 C   s$   || _ |  r| | j| d S d S rE   )r"  r   r   r!  r  r   r   r   r     s   zBaseEventLoop.set_debugrE   )NNNr  )r   )r   N)FN)Vr   r   r   rm   r   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r(  r*  rX   r   r   r  r  r/  r   r   r5  r1  r;  r7  r<  r6  r   r@  rG  rQ  rJ  rS  r]  rW  rY  rV  rx  r  r  r  r  r  r  r  r  r&   r4   r  r  r9   
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     s   




			&	
	


% 
// 	z%"29Nr   )r   r   )r   )7rI   collections.abcconcurrent.futuresrA  r  r8  rN   r  r&   r  r   r  r   r  r#  r  r   r_   ImportErrorr0   r   r   r   r   r   r   r	   r
   r   r   r   logr   __all__r  r  r%   r;   r  objectr  r   r#   r-   rD   rS   r[   r^   r`   ZProtocolra   ZAbstractServerr   ZAbstractEventLoopr   r   r   r   r   <module>   sj    
		

;


Do