o
    g                    @   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/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)BaseEventLoopd   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   I/Users/admin/.pyenv/versions/3.10.0/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   sT   





rC   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$   
rR   c                 C   s4   |   s|  }t|ttfrd S t|   d S rD   )	cancelled	exceptionr   
SystemExitKeyboardInterruptr   Z	_get_loopstop)futexcr   r   r   _run_until_complete_cb   s
   rZ   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%   r9   r   r@   r3   rA   r1   r'   r[   r*   r   r   r   _set_nodelay   s   

r]   c                 C   s   d S rD   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   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_FlowControlMixinr7   
_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)r_   
is_closingConnectionErrorrg   )rh   rX   r   r   r   drain   s   
z_SendfileFallbackProtocol.drainc                 C      t d)Nz?Invalid state: connection should have been established already.RuntimeError)rh   	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)rg   set_exceptionrl   r`   connection_lost)rh   rY   r   r   r   ru      s   
z)_SendfileFallbackProtocol.connection_lostc                 C   s    | j d urd S | jj | _ d S rD   )rg   r_   re   rf   rh   r   r   r   pause_writing   s   
z'_SendfileFallbackProtocol.pause_writingc                 C   s$   | j d u rd S | j d d | _ d S )NF)rg   
set_resultrv   r   r   r   resume_writing   s   

z(_SendfileFallbackProtocol.resume_writingc                 C   rn   Nz'Invalid state: reading should be pausedro   )rh   datar   r   r   data_received   rs   z'_SendfileFallbackProtocol.data_receivedc                 C   rn   rz   ro   rv   r   r   r   eof_received  rs   z&_SendfileFallbackProtocol.eof_receivedc                    sL   | j | j | jr| j   | jd ur| j  | jr$| j  d S d S rD   )	r_   rd   r`   ra   resume_readingrg   cancelrb   ry   rv   r   r   r   restore  s   


z!_SendfileFallbackProtocol.restoreN)__name__
__module____qualname__rj   rm   rr   ru   rw   ry   r|   r}   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)
re   _sockets_active_count_waiters_protocol_factory_backlog_ssl_context_ssl_handshake_timeout_serving_serving_forever_fut)rh   loopsocketsprotocol_factoryZssl_contextbacklogssl_handshake_timeoutr   r   r   rj     s   
zServer.__init__c                 C   s   d| j j d| jdS )N<z	 sockets=>)	__class__r   r   rv   r   r   r   __repr__   s   zServer.__repr__c                 C   s   |  j d7  _ d S r\   )r   rv   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   _wakeuprv   r   r   r   _detach'  s   zServer._detachc                 C   s,   | j }d | _ |D ]}| s|| qd S rD   )r   donerx   )rh   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   listenr   re   _start_servingr   r   r   )rh   r+   r   r   r   r   4  s   


zServer._start_servingc                 C      | j S rD   )re   rv   r   r   r   get_loop>     zServer.get_loopc                 C   r   rD   )r   rv   r   r   r   
is_servingA  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 rD   )r   ZTransportSocket)rE   sr   r   r   rG   H  s    z!Server.sockets.<locals>.<genexpr>)r   tuplerv   r   r   r   r   D  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   re   Z_stop_servingr   r   r   r   r   r   )rh   r   r+   r   r   r   closeJ  s   


zServer.closec                    s   |    tdI d H  d S )Nr   )r   r   sleeprv   r   r   r   start_serving]  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   rp   r   r   re   rf   r   CancelledErrorr   wait_closedrv   r   r   r   serve_foreverc  s&   


zServer.serve_foreverc                    s>   | j d u s| jd u rd S | j }| j| |I d H  d S rD   )r   r   re   rf   r;   )rh   r   r   r   r   r   x  s   
zServer.wait_closedN)r   r   r   rj   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	_stoppingrH   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_calledrv   r   r   r   rj     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_debugrv   r   r   r   r     s   zBaseEventLoop.__repr__c                 C   s   	 t j| dS )Nr   )r   Futurerv   r   r   r   rf     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)rh   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)callabler7   r   )rh   factoryr   r   r   set_task_factory  s   	
zBaseEventLoop.set_task_factoryc                 C      	 | j S rD   )r   rv   r   r   r   get_task_factory     zBaseEventLoop.get_task_factory)extraserverc                C      	 t rD   NotImplementedError)rh   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   rD   r   )rh   Zrawsockr   
sslcontextr   r   r   r   r   r   r   r   r   r   _make_ssl_transport  s   z!BaseEventLoop._make_ssl_transportc                 C   r   rD   r   )rh   r+   r   addressr   r   r   r   r   _make_datagram_transport  r   z&BaseEventLoop._make_datagram_transportc                 C   r   rD   r   rh   piper   r   r   r   r   r   _make_read_pipe_transport  r   z'BaseEventLoop._make_read_pipe_transportc                 C   r   rD   r   r   r   r   r   _make_write_pipe_transport  r   z(BaseEventLoop._make_write_pipe_transportc	           
         s   	 t rD   r   )
rh   r   argsshellstdinstdoutstderrbufsizer   kwargsr   r   r   _make_subprocess_transport  s   z(BaseEventLoop._make_subprocess_transportc                 C   r   rD   r   rv   r   r   r   _write_to_self  s   zBaseEventLoop._write_to_selfc                 C   r   rD   r   )rh   
event_listr   r   r   _process_events  s   zBaseEventLoop._process_eventsc                 C      | j rtdd S )NzEvent loop is closed)r   rp   rv   r   r   r   r        zBaseEventLoop._check_closedc                 C   r   )Nz!Executor shutdown has been called)r   rp   rv   r   r   r   _check_default_executor   r   z%BaseEventLoop._check_default_executorc                 C   s.   | j | |  s| | j|  d S d S rD   )r   discardr   call_soon_threadsafer   acloserh   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   )rE   Zagr   r   r   
<listcomp>  s    z4BaseEventLoop.shutdown_asyncgens.<locals>.<listcomp>Zreturn_exceptionsz;an error occurred during closing of asynchronous generator )messagerT   Zasyncgen)r   lenr   rJ   clearr   gatherzipr   	Exceptioncall_exception_handler)rh   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   rf   	threadingThread_do_shutdownstartjoin)rh   futurethreadr   r   r   shutdown_default_executor+  s   
z'BaseEventLoop.shutdown_default_executorc              
   C   sX   z| j jdd | |jd  W d S  ty+ } z| |j| W Y d }~d S d }~ww )NTwait)r   shutdownr   rx   r
  rt   )rh   r  exr   r   r   r  8  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   rp   r   Z_get_running_looprv   r   r   r   _check_running?  s   zBaseEventLoop._check_runningc              	   C   s   	 |    |   | | j t | _t }tj	| j
| jd z't|  	 |   | jr0q1q(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_debugr  	get_identr   sysget_asyncgen_hooksset_asyncgen_hooksr  r   r   Z_set_running_loop	_run_oncer   )rh   Zold_agen_hooksr   r   r   run_foreverF  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_callbackrZ   r&  r   rS   rT   Zremove_done_callbackrp   r  )rh   r  Znew_taskr   r   r   run_until_complete]  s&   

	z BaseEventLoop.run_until_completec                 C   s   	 d| _ d S r   )r   rv   r   r   r   rW     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   rp   r   r   r   debugr   r  r   r   r   r  rh   executorr   r   r   r     s    

zBaseEventLoop.closec                 C   r   rD   )r   rv   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   )rh   _warnr   r   r   __del__  s   zBaseEventLoop.__del__c                 C   s   	 | j d uS rD   )r   rv   r   r   r   r     s   
zBaseEventLoop.is_runningc                 C   s
   	 t  S rD   )r   r   rv   r   r   r   r     s   zBaseEventLoop.time)contextc                G   s6   	 | j |  | |g|R d|i}|jr|jd= |S )Nr.  r   )call_atr   r   )rh   delaycallbackr.  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 )Nr/  r   T)
r   r   _check_thread_check_callbackr   ZTimerHandler   heapqheappushr   )rh   whenr1  r.  r   r2  r   r   r   r/    s   zBaseEventLoop.call_atc                G   sD   	 |    | jr|   | |d | |||}|jr |jd= |S )N	call_soonr   )r   r   r4  r5  
_call_soonr   rh   r1  r.  r   r   r   r   r   r9    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iscoroutinefunctionr7   r   )rh   r1  methodr   r   r   r5    s   

zBaseEventLoop._check_callbackc                 C   s.   t ||| |}|jr|jd= | j| |S )Nr   )r   Handler   r   r;   )rh   r1  r   r.  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!  rp   )rh   Z	thread_idr   r   r   r4    s   

zBaseEventLoop._check_threadc                G   sD   	 |    | jr| |d | |||}|jr|jd= |   |S )Nr   r   )r   r   r5  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   r5  r   r   
concurrentr   ThreadPoolExecutorZwrap_futuresubmit)rh   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| |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)rh   r=   r>   r?   r@   rA   flagsmsgt0addrinfodtr   r   r   _getaddrinfo_debug8  s(   



z BaseEventLoop._getaddrinfo_debugr   r?   r@   rA   rJ  c             
      s4   | j r| j}ntj}| d |||||||I d H S rD   )r   rO  r%   rH  r>  )rh   r=   r>   r?   r@   rA   rJ  Zgetaddr_funcr   r   r   rH  P  s   
zBaseEventLoop.getaddrinfoc                    s   |  d tj||I d H S rD   )r>  r%   getnameinfo)rh   ZsockaddrrJ  r   r   r   rQ  Z  s   

zBaseEventLoop.getnameinfo)fallbackc             
      s   | j r| dkrtd| |||| z| ||||I d H W S  tjy8 } z	|s. W Y d }~nd }~ww | ||||I d H S )Nr   zthe socket must be non-blocking)r   
gettimeoutr&   _check_sendfile_params_sock_sendfile_nativer   SendfileNotAvailableError_sock_sendfile_fallback)rh   r+   fileoffsetcountrR  rY   r   r   r   sock_sendfile^  s"   
zBaseEventLoop.sock_sendfilec                    s   t d|d)Nz-syscall sendfile is not available for socket z and file {file!r} combinationr   rV  rh   r+   rX  rY  rZ  r   r   r   rU  l  s   
z#BaseEventLoop._sock_sendfile_nativec           
   
      s   |r| | |rt|tjntj}t|}d}zL	 |r)t|| |}|dkr)qQt|d | }| d |j|I d H }	|	s?qQ| ||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$   )
rh   r+   rX  rY  rZ  	blocksizebuf
total_sentviewreadr   r   r   rW  s  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&   r@   r%   r3   r   r6   r7   formatr]  r   r   r   rT    s4   

z$BaseEventLoop._check_sendfile_paramsc                    s&  	 g }| | |\}}}}}	d }
z[tj|||d}
|
d |d urb|D ]7\}}}}}z|
| W  qb 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?   r@   rA   Fz*error while attempting to bind on address : )r;   r%   setblockingbindr)   strerrorlowererrnopopsock_connectr   )rh   r   Z	addr_infoZlocal_addr_infosZmy_exceptionsr?   Ztype_rA   _r   r+   laddrrY   rK  r   r   r   _connect_sock  sL   


	
zBaseEventLoop._connect_sock)
sslr?   rA   rJ  r+   
local_addrr   r   happy_eyeballs_delay
interleavec       
      	      sJ  	 |
d ur|st d|
d u r|r|st d|}
|d ur$|s$t d|d ur.|d u r.d}|d us6|d ur|d ur>t dj||f|tj||dI d H }|sUtd|	d uroj|	|tj||dI d H sntdnd |rxt||}g  |d u r|D ]/}z |I d H }W  q ty   Y qw 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rt 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?   r@   rA   rJ  r   !getaddrinfo() returned empty listc                 3   s"    | ]}t j |V  qd S rD   )	functoolspartialrv  )rE   rM  )r   laddr_infosrh   r   r   rG     s    z2BaseEventLoop.create_connection.<locals>.<genexpr>r   c                 S   s   g | ]	}|D ]}|qqS r   r   )rE   subrY   r   r   r   r    s    z3BaseEventLoop.create_connection.<locals>.<listcomp>r   c                 3   s    | ]	}t | kV  qd S rD   r   rE   rY   )modelr   r   rG   #  s    zMultiple exceptions: {}rG  c                 s   s    | ]}t |V  qd S rD   r  r  r   r   r   rG   (  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%   r3   r)   rR   rv  r
   Zstaggered_racer  r   allrj  r  r@   _create_connection_transportr   get_extra_infor   r)  )rh   r   r=   r>   rw  r?   rA   rJ  r+   rx  r   r   ry  rz  infosrM  rt  rq   r   r   )r   r  r  rh   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   )rm  rf   r   boolr   r   r   )rh   r+   r   rw  r   r   r   r   r   r   rq   r   r   r   r  C  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 )rk   rp   r   r   Z_SendfileModeZUNSUPPORTEDZ
TRY_NATIVE_sendfile_nativer   rV  _sendfile_fallback)rh   rq   rX  rY  rZ  rR  ri  rY   r   r   r   sendfile]  s>   
zBaseEventLoop.sendfilec                    s   t d)Nz!sendfile syscall is not supportedr\  )rh   ri   rX  rY  rZ  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^  r_  r`  r^   r$   r   ra  r>  rb  rm   write)rh   ri   rX  rY  rZ  rc  rd  re  rA   rf  rg  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   )rw  rp   r   Z
SSLContextr7   r   rf   r	   ZSSLProtocolrc   rd   r9  rr   r~   BaseExceptionr   r   Z_app_transport)rh   rq   r   r   r   r   r   r   Zssl_protocolZ
conmade_cbZ	resume_cbr   r   r   	start_tls  sD   

zBaseEventLoop.start_tls)r?   rA   rJ  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 }nf 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 ]y\\}}\}}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|
!    q|d	 | }| # }| $|
|||}| j%r؈ rt&d || nt'd|| z
|I d H  W ||fS    |!   )NzA UDP Socket was expected, got )rx  remote_addrr?   rA   rJ  r  r  r  rG  c                 s   s&    | ]\}}|r| d | V  qdS )=Nr   )rE   kvr   r   r   rG     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   )rE   keyZ	addr_pairrx  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.rC  )
stacklevelrk  z@Datagram endpoint local_addr=%r remote_addr=%r created: (%r, %r)z2Datagram endpoint remote_addr=%r created: (%r, %r))(r@   r%   r4   r&   dictr  itemsrm  r$   r  r   r   r7   statS_ISSOCKosst_moderemoveFileNotFoundErrorr)   r   errorr  _unsetr   r   rD  r,   r'   r(   SO_BROADCASTrn  rs  r   r;   rf   r   r   rI  r)  ) rh   r   rx  r  r?   rA   rJ  r  r  r  r+   optsZproblemsZr_addrZaddr_pairs_inforQ   errZ
addr_infosidxr  Zfamrt  Zpror   r  r   Zlocal_addressZremote_addressrY   r   r   rq   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 )NrC  rP  )rC   rH  )
rh   r   r?   r@   rA   rJ  r   r=   r>   rI  r   r   r   r  j  s    zBaseEventLoop._ensure_resolvedc                    s:   | j ||f|tj|| dI d H }|std|d|S )N)r?   r@   rJ  r   zgetaddrinfo(z) returned empty list)r  r%   r3   r)   )rh   r=   r>   r?   rJ  r  r   r   r   _create_server_getaddrinfov  s   z(BaseEventLoop._create_server_getaddrinfor   )	r?   rJ  r+   r   rw  r  r  r   r   c       	            s  	 t |trtd|d ur|d u rtd|d us d ur|d ur(td|	d u r6tjdko5tjdk}	g }|dkr@d g}nt |tsLt |t	j
jsP|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 qsw || |	r|tjtjd |
rt| tr|tjkrttdr|tjtj d z|!| W qs t"y } zt"|j#d||j$% f d d }~ww d}W |s|D ]/}|&  qn(|s|D ]}|&  qw w |d u rtd|j'tj(krtd||g}|D ]}|)d	 q#t*|||||}|rD|+  t,dI d H  jrNt-d| |S )Nz*ssl argument must be an SSLContext or Noner{  r|  posixcygwinr/   c                    s   g | ]}j | d qS ))r?   rJ  )r  )rE   r=   r?   rJ  r>   rh   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  r7   r&   r  r   r"  platformr   rH   abcIterabler   r  setrM   rN   rO   r%   r  r   r   warningr;   r'   r(   SO_REUSEADDRr,   r:   r   r$   r  IPV6_V6ONLYrn  r)   rq  ro  rp  r   r@   r3   rm  r   r   r   rI  )rh   r   r=   r>   r?   rJ  r+   r   rw  r  r  r   r   r   Zhostsfsr  Z	completedresrB   socktyperA   	canonnamesar  r   r   r  r   create_server~  s   






zBaseEventLoop.create_server)rw  r   c                   sx   |j tjkrtd||d ur|std| j|||dd|dI d H \}}| jr8|d}td||| ||fS )Nr  r{  r/   T)r   r   r%   z%r handled: (%r, %r))	r@   r%   r3   r&   r  r   r  r   r)  )rh   r   r+   rw  r   rq   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))rf   r   r   r   r   r)  filenorh   r   r   r   r   rq   r   r   r   connect_read_pipe     
zBaseEventLoop.connect_read_pipec                    r  )Nz!Write pipe %r connected: (%r, %r))rf   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  )rh   rK  r   r   r   rI  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   r5   r   r&   r   r  r   r   rI  )rh   r   cmdr   r   r   r  r   r   r  r  r  r   r   	debug_logrq   r   r   r   subprocess_shell5  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   rI  )rh   r   Zprogramr   r   r   r  r   r   r  r  r  r   r   Z
popen_argsr   r  rq   r   r   r   subprocess_execY  s8   

zBaseEventLoop.subprocess_execc                 C   r   rD   )r   rv   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   r7   r   )rh   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 looprT   FZsource_tracebackZhandle_traceback>   r  rT   r/   z+Object created at (most recent call last):
z+Handle created at (most recent call last):
rl  
r  )getr@   __traceback__r   r   sortedr  	tracebackformat_listrstripr   r;   r   r  )	rh   r.  r  rT   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  rT   r.  zeException in default exception handler while handling an unexpected error in custom exception handler)r   r  rU   rV   r  r   r  )rh   r.  rY   r   r   r   r    sB   


z$BaseEventLoop.call_exception_handlerc                 C   s   	 |j rd S | j| d S rD   )
_cancelledr   r;   rh   r   r   r   r   _add_callback  s   zBaseEventLoop._add_callbackc                 C   s   	 |  | |   d S rD   )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rqt	| 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;   r6  heapifyheappopr   r   Z_whenr_  maxr   MAXIMUM_SELECT_TIMEOUT	_selectorselectr   r   rangepopleftr   r   Z_runr   r   r  r   )rh   Zsched_countZnew_scheduledr   timeoutr8  r   end_timeZntodoirL  rN  r   r   r   r%    sp   









zBaseEventLoop._run_oncec                 C   sH   t |t | jkrd S |rt | _ttj nt| j || _d S rD   )r  r   r"  #get_coroutine_origin_tracking_depthr   #set_coroutine_origin_tracking_depthr   ZDEBUG_STACK_DEPTHrh   Zenabledr   r   r   r  \  s   
z,BaseEventLoop._set_coroutine_origin_trackingc                 C   r   rD   )r   rv   r   r   r   r   k  r   zBaseEventLoop.get_debugc                 C   s$   || _ |  r| | j| d S d S rD   )r   r   r   r  r  r   r   r   r   n  s   zBaseEventLoop.set_debugrD   )NNNr  )r   )r   N)FN)Vr   r   r   rj   r   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r&  r(  rW   r   r   r   r   r-  r   r   r3  r/  r9  r5  r:  r4  r   r>  rE  rO  rH  rQ  r[  rU  rW  rT  rv  r  r  r  r  r  r  r  r  r%   r3   r  r  r8   
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   

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


%
// 	w%"29Nr   )r   r   )r   )6rH   collections.abcconcurrent.futuresr?  r  r6  rM   r  r%   r  r   r  r   r  r"  r   r   rw  ImportErrorr/   r   r   r   r   r   r   r	   r
   r   r   r   logr   __all__r  r  r$   r:   r  objectr  r   r"   r,   rC   rR   rZ   r]   ZProtocolr^   ZAbstractServerr   ZAbstractEventLoopr   r   r   r   r   <module>   sh    
		

;


Do