Your IP : 18.225.156.91


Current Path : /opt/alt/python39/lib64/python3.9/asyncio/__pycache__/
Upload File :
Current File : //opt/alt/python39/lib64/python3.9/asyncio/__pycache__/base_events.cpython-39.pyc

a

R�f�!�@s�dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZzddlZWney�dZYn0ddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddl m!Z!dZ"dZ#dZ$e%e	d�Z&dZ'e(�Z)dd�Z*dd�Z+dd�Z,d-dd�Z-d.dd�Z.dd �Z/e%e	d!��r�d"d#�Z0nd$d#�Z0d%d&�Z1Gd'd(�d(ej2�Z3Gd)d*�d*ej4�Z5Gd+d,�d,ej6�Z7dS)/a�Base implementation of event loop.

The event loop can be broken up into a multiplexer (the part
responsible for notifying us of I/O events) and the event loop proper,
which wraps a multiplexer with functionality for scheduling callbacks,
immediately or at a given time in the future.

Whenever a public API takes a callback, subsequent positional
arguments will be passed to the callback if/when it is called.  This
avoids the proliferation of trivial lambdas implementing closures.
Keyword arguments for the callback are not supported; this is a
conscious design decision, leaving the door open for keyword arguments
to modify the meaning of the API call itself.
�N�)�	constants)�
coroutines)�events)�
exceptions)�futures)�	protocols)�sslproto)�	staggered)�tasks)�
transports)�trsock)�logger)�
BaseEventLoop�Server�dg�?�AF_INET6i�QcCs0|j}tt|dd�tj�r$t|j�St|�SdS)N�__self__)Z	_callback�
isinstance�getattrr�Task�reprr�str)�handle�cb�r�8/opt/alt/python39/lib64/python3.9/asyncio/base_events.py�_format_handleJs
rcCs(|tjkrdS|tjkrdSt|�SdS)Nz<pipe>z<stdout>)�
subprocess�PIPE�STDOUTr)�fdrrr�_format_pipeSs


r"cCsJttd�std��n2z|�tjtjd�WntyDtd��Yn0dS)N�SO_REUSEPORTz)reuse_port not supported by socket modulerzTreuse_port not supported by socket module, SO_REUSEPORT defined but not implemented.)�hasattr�socket�
ValueError�
setsockopt�
SOL_SOCKETr#�OSError��sockrrr�_set_reuseport\s

r,c		Cs�ttd�sdS|dtjtjhvs(|dur,dS|tjkr>tj}n|tjkrPtj}ndS|durbd}nVt|t�rz|dkrzd}n>t|t�r�|dkr�d}n&zt	|�}Wnt
tfy�YdS0|tjkr�tj
g}tr�|�tj�n|g}t|t�r�|�d�}d|v�rdS|D]r}zVt�||�t�rH|tjk�rH|||d||||ffWS|||d||ffWSWnt�yvYn0�qdS)N�	inet_ptonr��Zidna�%)r$r%�IPPROTO_TCPZIPPROTO_UDP�SOCK_STREAM�
SOCK_DGRAMr�bytesr�int�	TypeErrorr&�	AF_UNSPEC�AF_INET�	_HAS_IPv6�appendr�decoder-r))	�host�port�family�type�protoZflowinfoZscopeidZafs�afrrr�_ipaddr_infogsN
�






rBcCs�t��}|D]*}|d}||vr(g||<||�|�qt|���}g}|dkr||�|dd|d��|dd|d�=|�dd�tj�tj	|��D��|S)z-Interleave list of addrinfo tuples by family.rrNcss|]}|dur|VqdS�Nr)�.0�arrr�	<genexpr>�s�z(_interleave_addrinfos.<locals>.<genexpr>)
�collections�OrderedDictr:�list�values�extend�	itertools�chain�
from_iterable�zip_longest)Z	addrinfosZfirst_address_family_countZaddrinfos_by_family�addrr>Zaddrinfos_listsZ	reorderedrrr�_interleave_addrinfos�s"
��rQcCs4|��s"|��}t|ttf�r"dSt�|���dSrC)�	cancelled�	exceptionr�
SystemExit�KeyboardInterruptrZ	_get_loop�stop)�fut�excrrr�_run_until_complete_cb�s
rY�TCP_NODELAYcCs@|jtjtjhvr<|jtjkr<|jtjkr<|�tjtj	d�dS�Nr)
r>r%r8rr?r2r@r1r'rZr*rrr�_set_nodelay�s
�
�r\cCsdSrCrr*rrrr\�scCs tdurt|tj�rtd��dS)Nz"Socket cannot be of type SSLSocket)�sslrZ	SSLSocketr6r*rrr�_check_ssl_socket�sr^c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�_SendfileFallbackProtocolcCsht|tj�std��||_|��|_|��|_|j	|_
|��|�|�|j
r^|jj
��|_nd|_dS)Nz.transport should be _FlowControlMixin instance)rrZ_FlowControlMixinr6�
_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�transprrr�__init__�s


z"_SendfileFallbackProtocol.__init__c�s2|j��rtd��|j}|dur$dS|IdHdS)NzConnection closed by peer)r`�
is_closing�ConnectionErrorrh)rirWrrr�drain�s
z_SendfileFallbackProtocol.draincCstd��dS)Nz?Invalid state: connection should have been established already.��RuntimeError)ri�	transportrrr�connection_made�sz)_SendfileFallbackProtocol.connection_madecCs@|jdur0|dur$|j�td��n|j�|�|j�|�dS)NzConnection is closed by peer)rh�
set_exceptionrmra�connection_lost)rirXrrrrt�s
�z)_SendfileFallbackProtocol.connection_lostcCs |jdurdS|jj��|_dSrC)rhr`rfrg�rirrr�
pause_writing�s
z'_SendfileFallbackProtocol.pause_writingcCs$|jdurdS|j�d�d|_dS)NF)rh�
set_resultrurrr�resume_writing�s
z(_SendfileFallbackProtocol.resume_writingcCstd��dS�Nz'Invalid state: reading should be pausedro)ri�datarrr�
data_receivedsz'_SendfileFallbackProtocol.data_receivedcCstd��dSryrorurrr�eof_receivedsz&_SendfileFallbackProtocol.eof_receivedc�sF|j�|j�|jr|j��|jdur2|j��|jrB|j��dSrC)	r`rerarb�resume_readingrh�cancelrcrxrurrr�restore	s


z!_SendfileFallbackProtocol.restoreN)�__name__�
__module__�__qualname__rkrnrrrtrvrxr{r|rrrrrr_�sr_c@sxeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
edd��Zdd�Z
dd�Zdd�Zdd�ZdS)rcCs@||_||_d|_g|_||_||_||_||_d|_d|_	dS)NrF)
rf�_sockets�
_active_count�_waiters�_protocol_factory�_backlog�_ssl_context�_ssl_handshake_timeout�_serving�_serving_forever_fut)ri�loop�sockets�protocol_factoryZssl_context�backlog�ssl_handshake_timeoutrrrrkszServer.__init__cCsd|jj�d|j�d�S)N�<z	 sockets=�>)�	__class__r�r�rurrr�__repr__%szServer.__repr__cCs |jdusJ�|jd7_dSr[)r�r�rurrr�_attach(szServer._attachcCs<|jdksJ�|jd8_|jdkr8|jdur8|��dS)Nrr)r�r��_wakeuprurrr�_detach,szServer._detachcCs,|j}d|_|D]}|��s|�|�qdSrC)r��donerw)ri�waiters�waiterrrrr�2s
zServer._wakeupc	CsJ|jr
dSd|_|jD].}|�|j�|j�|j||j||j|j�qdS)NT)	r�r�Zlistenr�rf�_start_servingr�r�r�)rir+rrrr�9s


�zServer._start_servingcCs|jSrC)rfrurrr�get_loopCszServer.get_loopcCs|jSrC)r�rurrr�
is_servingFszServer.is_servingcCs"|jdurdStdd�|jD��S)Nrcss|]}t�|�VqdSrC)r
ZTransportSocket)rD�srrrrFMr.z!Server.sockets.<locals>.<genexpr>)r��tuplerurrrr�Is
zServer.socketscCsn|j}|durdSd|_|D]}|j�|�qd|_|jdurX|j��sX|j��d|_|jdkrj|��dS)NFr)	r�rfZ
_stop_servingr�r�r�r~r�r�)rir�r+rrr�closeOs
�

zServer.closec�s|��t�d�IdHdS)Nr)r�r�sleeprurrr�
start_servingbszServer.start_servingc	�s�|jdurtd|�d���|jdur4td|�d���|��|j��|_zRz|jIdHWn6tjy�z|��|�	�IdHW�n�0Yn0Wd|_nd|_0dS)Nzserver z, is already being awaited on serve_forever()z
 is closed)
r�rpr�r�rfrgrZCancelledErrorr��wait_closedrurrr�
serve_foreverhs 

�
zServer.serve_foreverc�s<|jdus|jdurdS|j��}|j�|�|IdHdSrC)r�r�rfrgr:)rir�rrrr�}s

zServer.wait_closedN)r�r�r�rkr�r�r�r�r�r�r��propertyr�r�r�r�r�rrrrrs


rc@sheZdZdd�Zdd�Zdd�Zdd�d	d
�Zdd�Zd
d�Zd�ddd�dd�Z	d�ddddddd�dd�Z
d�dd�Zd�dd�Zd�dd�Z
d�dd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Zejfd=d>�Z d?d@�Z!dAdB�Z"ddC�dDdE�Z#ddC�dFdG�Z$ddC�dHdI�Z%dJdK�Z&dLdM�Z'dNdO�Z(ddC�dPdQ�Z)dRdS�Z*dTdU�Z+dVdW�Z,dXdXdXdXdY�dZd[�Z-d�d\d]�Z.d�dd^�d_d`�Z/dadb�Z0dcdd�Z1dedf�Z2d�dgdh�Z3d�ddXdXdXdddddddi�
djdk�Z4d�dldm�Z5d�dd^�dndo�Z6dpdq�Z7drds�Z8ddddt�dudv�Z9d�dXdXdXe:ddddw�dxdy�Z;dXe<j=dXdXdY�dzd{�Z>d|d}�Z?d�e<j@e<jAdd~dddddd�	d�d��ZBddd��d�d��ZCd�d��ZDd�d��ZEd�d��ZFeGjHeGjHeGjHdddXdddd��	d�d��ZIeGjHeGjHeGjHdddXdddd��	d�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUdS)�rcCs�d|_d|_d|_t��|_g|_d|_d|_d|_	t
�d�j|_
d|_|�t���d|_d|_d|_d|_d|_t��|_d|_d|_dS)NrF�	monotonicg�������?)�_timer_cancelled_count�_closed�	_stoppingrG�deque�_ready�
_scheduled�_default_executorZ
_internal_fds�
_thread_id�time�get_clock_infoZ
resolution�_clock_resolution�_exception_handler�	set_debugrZ_is_debug_mode�slow_callback_duration�_current_handle�
_task_factory�"_coroutine_origin_tracking_enabled�&_coroutine_origin_tracking_saved_depth�weakrefZWeakSet�
_asyncgens�_asyncgens_shutdown_called�_executor_shutdown_calledrurrrrk�s&

zBaseEventLoop.__init__c	Cs.d|jj�d|���d|���d|���d�	S)Nr�z	 running=z closed=z debug=r�)r�r��
is_running�	is_closed�	get_debugrurrrr��s���zBaseEventLoop.__repr__cCstj|d�S)z,Create a Future object attached to the loop.�r�)rZFuturerurrrrg�szBaseEventLoop.create_futureN)�namecCsN|��|jdur2tj|||d�}|jrJ|jd=n|�||�}t�||�|S)zDSchedule a coroutine object.

        Return a task object.
        N)r�r����)�
_check_closedr�rr�_source_tracebackZ_set_task_name)ri�coror�Ztaskrrr�create_task�s

zBaseEventLoop.create_taskcCs"|durt|�std��||_dS)awSet a task factory that will be used by loop.create_task().

        If factory is None the default task factory will be set.

        If factory is a callable, it should have a signature matching
        '(loop, coro)', where 'loop' will be a reference to the active
        event loop, 'coro' will be a coroutine object.  The callable
        must return a Future.
        Nz'task factory must be a callable or None)�callabler6r�)ri�factoryrrr�set_task_factory�s
zBaseEventLoop.set_task_factorycCs|jS)z<Return a task factory, or None if the default one is in use.)r�rurrr�get_task_factory�szBaseEventLoop.get_task_factory)�extra�servercCst�dS)zCreate socket transport.N��NotImplementedError)rir+�protocolr�r�r�rrr�_make_socket_transport�sz$BaseEventLoop._make_socket_transportFT)�server_side�server_hostnamer�r�r��call_connection_madecCst�dS)zCreate SSL transport.Nr�)riZrawsockr��
sslcontextr�r�r�r�r�r�r�rrr�_make_ssl_transport�sz!BaseEventLoop._make_ssl_transportcCst�dS)zCreate datagram transport.Nr�)rir+r��addressr�r�rrr�_make_datagram_transport�sz&BaseEventLoop._make_datagram_transportcCst�dS)zCreate read pipe transport.Nr��ri�piper�r�r�rrr�_make_read_pipe_transport�sz'BaseEventLoop._make_read_pipe_transportcCst�dS)zCreate write pipe transport.Nr�r�rrr�_make_write_pipe_transport�sz(BaseEventLoop._make_write_pipe_transportc	
�st�dS)zCreate subprocess transport.Nr�)
rir��args�shell�stdin�stdout�stderr�bufsizer��kwargsrrr�_make_subprocess_transport�sz(BaseEventLoop._make_subprocess_transportcCst�dS)z�Write a byte to self-pipe, to wake up the event loop.

        This may be called from a different thread.

        The subclass is responsible for implementing the self-pipe.
        Nr�rurrr�_write_to_self�szBaseEventLoop._write_to_selfcCst�dS)zProcess selector events.Nr�)ri�
event_listrrr�_process_events�szBaseEventLoop._process_eventscCs|jrtd��dS)NzEvent loop is closed)r�rprurrrr�szBaseEventLoop._check_closedcCs|jrtd��dS)Nz!Executor shutdown has been called)r�rprurrr�_check_default_executorsz%BaseEventLoop._check_default_executorcCs*|j�|�|��s&|�|j|���dSrC)r��discardr��call_soon_threadsafer��aclose�ri�agenrrr�_asyncgen_finalizer_hook	sz&BaseEventLoop._asyncgen_finalizer_hookcCs.|jrtjd|�d�t|d�|j�|�dS)Nzasynchronous generator z3 was scheduled after loop.shutdown_asyncgens() call��source)r��warnings�warn�ResourceWarningr��addr�rrr�_asyncgen_firstiter_hooks
�z&BaseEventLoop._asyncgen_firstiter_hookc�s�d|_t|j�sdSt|j�}|j��tjdd�|D�d|d��IdH}t||�D]*\}}t|t	�rT|�
d|��||d��qTdS)z,Shutdown all active asynchronous generators.TNcSsg|]}|���qSr)r�)rDZagrrr�
<listcomp>$r.z4BaseEventLoop.shutdown_asyncgens.<locals>.<listcomp>)Zreturn_exceptionsr�z;an error occurred during closing of asynchronous generator )�messagerSZasyncgen)r��lenr�rI�clearr�_gather�zipr�	Exception�call_exception_handler)riZ
closing_agensZresults�resultr�rrr�shutdown_asyncgenss&


�
��z BaseEventLoop.shutdown_asyncgensc�s\d|_|jdurdS|��}tj|j|fd�}|��z|IdHW|��n
|��0dS)z.Schedule the shutdown of the default executor.TN)�targetr�)r�r�rg�	threadingZThread�_do_shutdown�start�join)ri�future�threadrrr�shutdown_default_executor1s
z'BaseEventLoop.shutdown_default_executorc
CsXz |jjdd�|�|jd�Wn2tyR}z|�|j|�WYd}~n
d}~00dS)NT��wait)r��shutdownr�rwr�rs)rirZexrrrr>s
zBaseEventLoop._do_shutdowncCs(|��rtd��t��dur$td��dS)Nz"This event loop is already runningz7Cannot run the event loop while another loop is running)r�rprZ_get_running_looprurrr�_check_runningEs�zBaseEventLoop._check_runningc	Cs�|��|��|�|j�t��|_t��}tj	|j
|jd�zJt�
|�|��|jrLq^qLWd|_d|_t�
d�|�d�tj	|�n,d|_d|_t�
d�|�d�tj	|�0dS)zRun until stop() is called.)�	firstiter�	finalizerFN)r�r
�_set_coroutine_origin_tracking�_debugr�	get_identr��sys�get_asyncgen_hooks�set_asyncgen_hooksr�r�rZ_set_running_loop�	_run_oncer�)riZold_agen_hooksrrr�run_foreverLs.
�


�

zBaseEventLoop.run_foreverc	Cs�|��|��t�|�}tj||d�}|r4d|_|�t�zFz|�	�Wn*|rp|�
�rp|��sp|���Yn0W|�
t�n|�
t�0|�
�s�td��|��S)a\Run until the Future is done.

        If the argument is a coroutine, it is wrapped in a Task.

        WARNING: It would be disastrous to call run_until_complete()
        with the same coroutine twice -- it would wrap it in two
        different Tasks and that can't be good.

        Return the Future's result, or raise its exception.
        r�Fz+Event loop stopped before Future completed.)r�r
rZisfuturerZ
ensure_futureZ_log_destroy_pendingZadd_done_callbackrYrr�rRrSZremove_done_callbackrpr�)rirZnew_taskrrr�run_until_completecs"

z BaseEventLoop.run_until_completecCs
d|_dS)z�Stop running the event loop.

        Every callback already scheduled will still run.  This simply informs
        run_forever to stop looping after a complete iteration.
        TN)r�rurrrrV�szBaseEventLoop.stopcCsp|��rtd��|jrdS|jr,t�d|�d|_|j��|j��d|_	|j
}|durld|_
|jdd�dS)z�Close the event loop.

        This clears the queues and shuts down the executor,
        but does not wait for the executor to finish.

        The event loop must not be running.
        z!Cannot close a running event loopNzClose %rTFr)r�rpr�rr�debugr�r�r�r�r�r	�ri�executorrrrr��s

zBaseEventLoop.closecCs|jS)z*Returns True if the event loop was closed.)r�rurrrr��szBaseEventLoop.is_closedcCs0|��s,|d|��t|d�|��s,|��dS)Nzunclosed event loop r�)r�r�r�r�)riZ_warnrrr�__del__�szBaseEventLoop.__del__cCs
|jduS)z*Returns True if the event loop is running.N)r�rurrrr��szBaseEventLoop.is_runningcCst��S)z�Return the time according to the event loop's clock.

        This is a float expressed in seconds since an epoch, but the
        epoch, precision, accuracy and drift are unspecified and may
        differ per event loop.
        )r�r�rurrrr��szBaseEventLoop.time)�contextcGs4|j|��||g|�Rd|i�}|jr0|jd=|S)a8Arrange for a callback to be called at a given time.

        Return a Handle: an opaque object with a cancel() method that
        can be used to cancel the call.

        The delay can be an int or float, expressed in seconds.  It is
        always relative to the current time.

        Each callback will be called exactly once.  If two callbacks
        are scheduled for exactly the same time, it undefined which
        will be called first.

        Any positional arguments after the callback will be passed to
        the callback when it is called.
        rr�)�call_atr�r�)riZdelay�callbackrr��timerrrr�
call_later�s�zBaseEventLoop.call_latercGsZ|��|jr"|��|�|d�t�|||||�}|jrB|jd=t�|j	|�d|_	|S)z|Like call_later(), but uses an absolute time.

        Absolute time corresponds to the event loop's time() method.
        rr�T)
r�r�
_check_thread�_check_callbackr�TimerHandler��heapq�heappushr�)ri�whenrrr�rrrrr�szBaseEventLoop.call_atcGsB|��|jr"|��|�|d�|�|||�}|jr>|jd=|S)aTArrange for a callback to be called as soon as possible.

        This operates as a FIFO queue: callbacks are called in the
        order in which they are registered.  Each callback will be
        called exactly once.

        Any positional arguments after the callback will be passed to
        the callback when it is called.
        �	call_soonr�)r�rrr �
_call_soonr��rirrr�rrrrr%�s
zBaseEventLoop.call_sooncCsDt�|�st�|�r$td|�d���t|�s@td|�d|����dS)Nzcoroutines cannot be used with z()z"a callable object was expected by z(), got )rZiscoroutineZiscoroutinefunctionr6r�)rir�methodrrrr �s
�
���zBaseEventLoop._check_callbackcCs.t�||||�}|jr|jd=|j�|�|S)Nr�)r�Handler�r�r:)rirr�rrrrrr&s
zBaseEventLoop._call_sooncCs,|jdurdSt��}||jkr(td��dS)aoCheck that the current thread is the thread running the event loop.

        Non-thread-safe methods of this class make this assumption and will
        likely behave incorrectly when the assumption is violated.

        Should only be called when (self._debug == True).  The caller is
        responsible for checking this condition for performance reasons.
        NzMNon-thread-safe operation invoked on an event loop other than the current one)r�rrrp)riZ	thread_idrrrr	s	

�zBaseEventLoop._check_threadcGsB|��|jr|�|d�|�|||�}|jr6|jd=|��|S)z"Like call_soon(), but thread-safe.r�r�)r�rr r&r�r�r'rrrr�sz"BaseEventLoop.call_soon_threadsafecGsh|��|jr|�|d�|durL|j}|��|durLtjjdd�}||_tj|j	|g|�R�|d�S)N�run_in_executorZasyncio)Zthread_name_prefixr�)
r�rr r�r��
concurrentr�ThreadPoolExecutorZwrap_futureZsubmit)rir�funcr�rrrr*%s��zBaseEventLoop.run_in_executorcCs&t|tjj�st�dtd�||_dS)Nz{Using the default executor that is not an instance of ThreadPoolExecutor is deprecated and will be prohibited in Python 3.9�)rr+rr,r�r��DeprecationWarningr�rrrr�set_default_executor5s�z"BaseEventLoop.set_default_executorcCs�|�d|��g}|r$|�d|���|r8|�d|���|rL|�d|���|r`|�d|���d�|�}t�d|�|��}t�||||||�}	|��|}
d|�d	|
d
d�d|	��}|
|jkr�t�|�n
t�|�|	S)
N�:zfamily=ztype=zproto=zflags=�, zGet address info %szGetting address info z took g@�@z.3fzms: )	r:rrrr�r%�getaddrinfor��info)rir<r=r>r?r@�flags�msg�t0�addrinfo�dtrrr�_getaddrinfo_debug>s&


z BaseEventLoop._getaddrinfo_debugr�r>r?r@r5c
�s2|jr|j}ntj}|�d|||||||�IdHSrC)rr:r%r3r*)rir<r=r>r?r@r5Zgetaddr_funcrrrr3Vs�zBaseEventLoop.getaddrinfoc�s|�dtj||�IdHSrC)r*r%�getnameinfo)riZsockaddrr5rrrr<`s
�zBaseEventLoop.getnameinfo)�fallbackc
�s�|jr|��dkrtd��t|�|�||||�z|�||||�IdHWStjyv}z|sb�WYd}~n
d}~00|�||||�IdHS)Nrzthe socket must be non-blocking)	rZ
gettimeoutr&r^�_check_sendfile_params�_sock_sendfile_nativer�SendfileNotAvailableError�_sock_sendfile_fallback)rir+�file�offset�countr=rXrrr�
sock_sendfileds��zBaseEventLoop.sock_sendfilec�st�d|�d|�d���dS)Nz-syscall sendfile is not available for socket z
 and file z combination�rr@�rir+rBrCrDrrrr?ss
��z#BaseEventLoop._sock_sendfile_nativec

�s�|r|�|�|rt|tj�ntj}t|�}d}z�|rNt|||�}|dkrNq�t|�d|�}|�d|j|�IdH}	|	szq�|�||d|	��IdH||	7}q2|W|dkr�t	|d�r�|�||�Sn&|dk�r�t	|d��r�|�||�0dS)Nr�seek)
rH�minrZ!SENDFILE_FALLBACK_READBUFFER_SIZE�	bytearray�
memoryviewr*�readintoZsock_sendallr$)
rir+rBrCrD�	blocksize�buf�
total_sent�view�readrrrrAzs6
��
��z%BaseEventLoop._sock_sendfile_fallbackcCs�dt|dd�vrtd��|jtjks,td��|durbt|t�sLtd�|���|dkrbtd�|���t|t�sztd�|���|dkr�td�|���dS)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})rz0offset must be a non-negative integer (got {!r}))	rr&r?r%r2rr5r6�formatrGrrrr>�s2
��
����z$BaseEventLoop._check_sendfile_paramsc�sDg}|�|�|\}}}}}	d}
z�tj|||d�}
|
�d�|dur�|D]t\}}}}}z|
�|�Wq�WqHty�}z8d|�d|j����}
t|j|
�}|�|�WYd}~qHd}~00qH|���|�	|
|	�IdH|
WSt�y }z*|�|�|
du�r
|
�
��WYd}~n(d}~0|
du�r8|
�
��Yn0dS)z$Create, bind and connect one socket.N�r>r?r@Fz*error while attempting to bind on address �: )r:r%�setblocking�bindr)�strerror�lower�errno�pop�sock_connectr�)rirZ	addr_infoZlocal_addr_infosZ
my_exceptionsr>�type_r@�_r�r+ZladdrrXr6rrr�
_connect_sock�sB



���"


zBaseEventLoop._connect_sock)
r]r>r@r5r+�
local_addrr�r��happy_eyeballs_delay�
interleavec
	�sz|
dur|std��|
dur0|r0|s,td��|}
|durD|sDtd��|durTt|�|durh|
durhd}
|dusz|du�r|dur�td���j||f|tj||�d�IdH}|s�td��|	dur�j|	|tj||�d�IdH��s�td��nd�|
r�t||
�}g�|du�rV|D]B}z ���|��IdH}W�q�Wnt�yNY�qYn0�qn.tj	���fd	d
�|D�|�d�IdH\}}}|du�r.dd
��D��t
��dk�r��d�nJt�d��t�fdd
��D���r�d�td�
d�dd
��D�����n.|du�rtd��|jtjk�r.td|�����j||||
|d�IdH\}}�j�rr|�d�}t�d|||||�||fS)a�Connect to a TCP server.

        Create a streaming transport connection to a given Internet host and
        port: socket family AF_INET or socket.AF_INET6 depending on host (or
        family if specified), socket type SOCK_STREAM. protocol_factory must be
        a callable returning a protocol instance.

        This method is a coroutine which will try to establish the connection
        in the background.  When successful, the coroutine returns a
        (transport, protocol) pair.
        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@r5r��!getaddrinfo() returned empty listc3s |]}t��j�|��VqdSrC)�	functools�partialr`)rDr8)r�laddr_infosrirrrF!s��z2BaseEventLoop.create_connection.<locals>.<genexpr>r�cSsg|]}|D]}|�qqSrr)rD�subrXrrrr�'r.z3BaseEventLoop.create_connection.<locals>.<listcomp>rc3s|]}t|��kVqdSrC�r�rDrX)�modelrrrF-r.zMultiple exceptions: {}r2css|]}t|�VqdSrCrlrmrrrrF2r.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%r2r)rQr`r
Zstaggered_racer�r�allrTrr?�_create_connection_transportr�get_extra_inforr)rir�r<r=r]r>r@r5r+rar�r�rbrc�infosr8r_rqr�r)rrjrnrir�create_connection�s���
��


�
��

�
���

�zBaseEventLoop.create_connectionc	�s�|�d�|�}|��}|rHt|t�r*dn|}	|j|||	||||d�}
n|�|||�}
z|IdHWn|
���Yn0|
|fS)NF�r�r�r�)rWrgr�boolr�r�r�)rir+r�r]r�r�r�r�r�r�rqrrrrrMs"
�z*BaseEventLoop._create_connection_transportc
�s�|��rtd��t|dtjj�}|tjjur:td|����|tjjur�z|�||||�IdHWStj	y�}z|sv�WYd}~n
d}~00|s�td|����|�
||||�IdHS)a�Send a file to transport.

        Return the total number of bytes which were sent.

        The method uses high-performance os.sendfile if available.

        file must be a regular file object opened in binary mode.

        offset tells from where to start reading the file. If specified,
        count is the total number of bytes to transmit as opposed to
        sending the file until EOF is reached. File position is updated on
        return or also in case of error in which case file.tell()
        can be used to figure out the number of bytes
        which were sent.

        fallback set to True makes asyncio to manually read and send
        the file when the platform does not support the sendfile syscall
        (e.g. Windows or SSL socket on Unix).

        Raise SendfileNotAvailableError if the system does not support
        sendfile syscall and fallback is False.
        zTransport is closingZ_sendfile_compatiblez(sendfile is not supported for transport NzHfallback is disabled and native sendfile is not supported for transport )rlrprrZ
_SendfileModeZUNSUPPORTEDZ
TRY_NATIVE�_sendfile_nativerr@�_sendfile_fallback)rirqrBrCrDr=rSrXrrr�sendfilegs4������zBaseEventLoop.sendfilec�st�d��dS)Nz!sendfile syscall is not supportedrF)rirjrBrCrDrrrrx�s�zBaseEventLoop._sendfile_nativec
�s||r|�|�|rt|d�nd}t|�}d}t|�}�z|r�t|||�}|dkr�|W|dkrvt|d�rv|�||�|��IdHSt|�d|�}	|�d|j|	�IdH}
|
s�|W|dkr�t|d�r�|�||�|��IdHS|�	�IdH|�
|	d|
��||
7}q8W|dk�r4t|d��r4|�||�|��IdHn4|dk�rht|d��rh|�||�|��IdH0dS)Ni@rrH)rHrIrJr_r$rrKr*rLrn�write)rirjrBrCrDrMrNrOr@rPrQrrrry�s@
	���z BaseEventLoop._sendfile_fallbackrvc
�s�tdurtd��t|tj�s*td|����t|dd�sFtd|�d���|��}tj|||||||dd�}|�	�|�
|�|�|j|�}	|�|j
�}
z|IdHWn,ty�|��|	��|
���Yn0|jS)	zzUpgrade transport to TLS.

        Return a new transport that *protocol* should start using
        immediately.
        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]rprZ
SSLContextr6rrgr	ZSSLProtocolrdrer%rrr}�
BaseExceptionr�r~Z_app_transport)rirqr�r�r�r�r�r�Zssl_protocolZ
conmade_cbZ	resume_cbrrr�	start_tls�s>	��
��
zBaseEventLoop.start_tls)r>r@r5�
reuse_address�
reuse_port�allow_broadcastr+c �s|
dur�|
jtjkr"td|
�����s>�s>|s>|s>|s>|s>|	r~t��||||||	d�}d�dd�|��D��}td|�d���|
�d	�d}
�n�s��s�|d
kr�td��||fdff}�n�ttd
��r�|tj	k�r���fD]}|dur�t
|t�s�td��qڈ�rx�d
dv�rxz"t
�t�
��j��r.t���WnFt�yDYn4t�yv}zt�d�|�WYd}~n
d}~00||f��fff}n�i}d
�fd�ffD]�\}}|du�r�t
|t��r�t|�dk�s�td��|j||tj|||d�IdH}|�std��|D]:\}}}}}||f}||v�r0ddg||<||||<�q�q���fdd�|��D�}|�sjtd��g}|tu�r�|�r�td��ntjdtdd�|D]�\\}}\}}d}
d}
zxtj|tj|d�}
|�r�t|
�|	�r�|
�tjtj d�|
�d	���r|
�!|���r*|	�s&|�"|
|�IdH|}
Wn`t�yn}z(|
du�rP|
�#�|�$|�WYd}~n.d}~0|
du�r�|
�#��Yn0�q��q�|d
�|�}|�%�}|�&|
||
|�}|j'�r��r�t�(d��||�nt�)d�||�z|IdHWn|�#��Yn0||fS)zCreate datagram connection.NzA UDP Socket was expected, got )ra�remote_addrr>r@r5r~rr�r2css$|]\}}|r|�d|��VqdS)�=Nr)rD�k�vrrrrF�r.z9BaseEventLoop.create_datagram_endpoint.<locals>.<genexpr>zKsocket modifier keyword arguments can not be used when sock is specified. (�)Frzunexpected address family)NN�AF_UNIXzstring is expected)r�z2Unable to check or remove stale UNIX socket %r: %rrr.z2-tuple is expectedrfrgcs8g|]0\}}�r|ddus�r,|ddus||f�qS)rNrr)rD�keyZ	addr_pair�rar�rrr�&s�z:BaseEventLoop.create_datagram_endpoint.<locals>.<listcomp>zcan not get address informationz~Passing `reuse_address=True` is no longer supported, as the usage of SO_REUSEPORT in UDP poses a significant security concern.zdThe *reuse_address* parameter has been deprecated as of 3.5.10 and is scheduled for removal in 3.11.)�
stacklevelrUz@Datagram endpoint local_addr=%r remote_addr=%r created: (%r, %r)z2Datagram endpoint remote_addr=%r created: (%r, %r))*r?r%r3r&�dictr�itemsrWr$r�rrr6�stat�S_ISSOCK�os�st_mode�remove�FileNotFoundErrorr)r�errorr�r�rp�_unsetr�r�r/r,r'r(ZSO_BROADCASTrXr]r�r:rgr�rr4r) rir�rar�r>r@r5r~rr�r+ZoptsZproblemsZr_addrZaddr_pairs_inforP�errZ
addr_infos�idxrtZfamr_Zpror�r�rZ
local_addressZremote_addressrXr�r�rqrr�r�create_datagram_endpoint�s���������

��
�
�

���
�




���z&BaseEventLoop.create_datagram_endpointc
�s^|dd�\}}t|||||g|dd��R�}	|	dur>|	gS|j||||||d�IdHSdS)Nr.r;)rBr3)
rir�r>r?r@r5r�r<r=r4rrrrpts �zBaseEventLoop._ensure_resolvedc�s8|j||f|tj||d�IdH}|s4td|�d���|S)N)r>r?r5r�zgetaddrinfo(z) returned empty list)rpr%r2r))rir<r=r>r5rtrrr�_create_server_getaddrinfo�s�z(BaseEventLoop._create_server_getaddrinfor)	r>r5r+r�r]r~rr�r�c	�s�t|t�rtd��|dur*|dur*td��|dur:t|�|dusL�du�rL|dur\td��|	durxtjdkovtjdk}	g}
|dkr�dg}n$t|t	�s�t|t
jj�s�|g}n|}����fdd	�|D�}t
j|d
�i�IdH}ttj�|��}d}�z8|D�]}|\}}}}}zt�|||�}Wn6tj�yV�j�rNtjd|||d
d�Yq�Yn0|
�|�|	�rz|�tjtjd
�|
�r�t|�t�r�|tjk�r�ttd��r�|�tj tj!d
�z|�"|�Wq�t#�y}z(t#|j$d||j%�&�f�d�WYd}~q�d}~00q�d
}W|�sJ|
D]}|�'��qn|�sH|
D]}|�'��q80n4|du�r^td��|j(tj)k�rztd|����|g}
|
D]}|�*d��q�t+�|
||||�}|�r�|�,�t
�-d�IdH�j�r�t�.d|�|S)a1Create a TCP server.

        The host parameter can be a string, in that case the TCP server is
        bound to host and port.

        The host parameter can also be a sequence of strings and in that case
        the TCP server is bound to all hosts of the sequence. If a host
        appears multiple times (possibly indirectly e.g. when hostnames
        resolve to the same IP address), the server is only bound once to that
        host.

        Return a Server object which can be used to stop the service.

        This method is a coroutine.
        z*ssl argument must be an SSLContext or NoneNrdre�posix�cygwinr/csg|]}�j|���d��qS))r>r5)r�)rDr<�r>r5r=rirrr��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 specifiedrorz
%r is serving)/rrwr6r&r^r�r�r�platformrrG�abc�Iterablerr��setrLrMrNr%r�rr�warningr:r'r(ZSO_REUSEADDRr,r9rr$r�ZIPV6_V6ONLYrXr)r[rYrZr�r?r2rWrr�r�r4)rir�r<r=r>r5r+r�r]r~rr�r�r�ZhostsZfsrtZ	completed�resrAZsocktyper@Z	canonnameZsar�r�rr�r�
create_server�s�
��
��
�


�������
�zBaseEventLoop.create_server)r]r�c�s�|jtjkrtd|����|dur.|s.td��|dur>t|�|j|||dd|d�IdH\}}|jr~|�d�}t�	d|||�||fS)	aHandle an accepted connection.

        This is used by servers that accept connections outside of
        asyncio but that use asyncio to handle connections.

        This method is a coroutine.  When completed, the coroutine
        returns a (transport, protocol) pair.
        roNrdr/T)r�r�r%z%r handled: (%r, %r))
r?r%r2r&r^rrrrsrr)rir�r+r]r�rqr�rrr�connect_accepted_sockets �
�
z%BaseEventLoop.connect_accepted_socketc�sd|�}|��}|�|||�}z|IdHWn|���Yn0|jr\t�d|��||�||fS)Nz Read pipe %r connected: (%r, %r))rgr�r�rrr�fileno�rir�r�r�r�rqrrr�connect_read_pipe s
�zBaseEventLoop.connect_read_pipec�sd|�}|��}|�|||�}z|IdHWn|���Yn0|jr\t�d|��||�||fS)Nz!Write pipe %r connected: (%r, %r))rgr�r�rrrr�r�rrr�connect_write_pipe0s
�z BaseEventLoop.connect_write_pipecCs�|g}|dur"|�dt|����|durJ|tjkrJ|�dt|����n8|durf|�dt|����|dur�|�dt|����t�d�|��dS)Nzstdin=zstdout=stderr=zstdout=zstderr=� )r:r"rr rrr)rir6r�r�r�r4rrr�_log_subprocess@szBaseEventLoop._log_subprocess)	r�r�r��universal_newlinesr�r��encoding�errors�textc	�s�t|ttf�std��|r"td��|s.td��|dkr>td��|rJtd��|	durZtd��|
durjtd��|�}
d}|jr�d	|}|�||||�|j|
|d
||||fi|��IdH}|jr�|dur�t�d||�||
fS)Nzcmd must be a string� universal_newlines must be Falsezshell must be Truer�bufsize must be 0�text must be False�encoding must be None�errors must be Nonezrun shell command %rT�%s: %r)	rr4rr&rr�r�rr4)rir��cmdr�r�r�r�r�r�r�r�r�r�r��	debug_logrqrrr�subprocess_shellMs6��zBaseEventLoop.subprocess_shellc	�s�|rtd��|rtd��|dkr(td��|r4td��|	durDtd��|
durTtd��|f|}|�}d}|jr�d|��}|�||||�|j||d	||||fi|
��IdH}|jr�|dur�t�d
||�||fS)Nr�zshell must be Falserr�r�r�r�zexecute program Fr�)r&rr�r�rr4)rir�Zprogramr�r�r�r�r�r�r�r�r�r�r�Z
popen_argsr�r�rqrrr�subprocess_execqs6

��zBaseEventLoop.subprocess_execcCs|jS)zKReturn an exception handler, or None if the default one is in use.
        )r�rurrr�get_exception_handler�sz#BaseEventLoop.get_exception_handlercCs(|durt|�std|����||_dS)a�Set handler as the new event loop exception handler.

        If handler is None, the default exception handler will
        be set.

        If handler is a callable object, it should have a
        signature matching '(loop, context)', where 'loop'
        will be a reference to the active event loop, 'context'
        will be a dict object (see `call_exception_handler()`
        documentation for details about context).
        Nz+A callable object or None is expected, got )r�r6r�)riZhandlerrrr�set_exception_handler�s
�z#BaseEventLoop.set_exception_handlerc	Cs|�d�}|sd}|�d�}|dur6t|�||jf}nd}d|vr`|jdur`|jjr`|jj|d<|g}t|�D]�}|dvr|qn||}|dkr�d	�t�|��}d
}||�	�7}n2|dkr�d	�t�|��}d}||�	�7}nt
|�}|�|�d|���qntj
d
�|�|d�dS)aEDefault exception handler.

        This is called when an exception occurs and no exception
        handler is set, and can be called by a custom exception
        handler that wants to defer to the default behavior.

        This default handler logs the error message and other
        context-dependent information.  In debug mode, a truncated
        stack trace is also appended showing where the given object
        (e.g. a handle or future or task) was created, if any.

        The context parameter has the same meaning as in
        `call_exception_handler()`.
        r�z!Unhandled exception in event looprSNFZsource_tracebackZhandle_traceback>r�rSr/z+Object created at (most recent call last):
z+Handle created at (most recent call last):
rV�
r�)�getr?�
__traceback__r�r��sortedr�	traceback�format_list�rstriprr:rr�)	rirr�rSr�Z	log_linesr��value�tbrrr�default_exception_handler�s<

���z'BaseEventLoop.default_exception_handlercCs�|jdurRz|�|�Wq�ttfy0�Yq�tyNtjddd�Yq�0n�z|�||�Wn�ttfyz�Ynrty�}zZz|�d||d��Wn6ttfy��Yn ty�tjddd�Yn0WYd}~n
d}~00dS)aDCall the current event loop's exception handler.

        The context argument is a dict containing the following keys:

        - 'message': Error message;
        - 'exception' (optional): Exception object;
        - 'future' (optional): Future instance;
        - 'task' (optional): Task instance;
        - 'handle' (optional): Handle instance;
        - 'protocol' (optional): Protocol instance;
        - 'transport' (optional): Transport instance;
        - 'socket' (optional): Socket instance;
        - 'asyncgen' (optional): Asynchronous generator that caused
                                 the exception.

        New keys maybe introduced in the future.

        Note: do not overload this method in an event loop subclass.
        For custom exception handling, use the
        `set_exception_handler()` method.
        Nz&Exception in default exception handlerTr�z$Unhandled error in exception handler)r�rSrzeException in default exception handler while handling an unexpected error in custom exception handler)r�r�rTrUr|rr�)rirrXrrrr��s4
���z$BaseEventLoop.call_exception_handlercCs>t|tj�sJd��|jrdSt|tj�r.J�|j�|�dS)z3Add a Handle to _scheduled (TimerHandle) or _ready.zA Handle is required hereN)rrr)�
_cancelledr!r�r:�rirrrr�
_add_callbacks
zBaseEventLoop._add_callbackcCs|�|�|��dS)z6Like _add_callback() but called from a signal handler.N)r�r�r�rrr�_add_callback_signalsafes
z&BaseEventLoop._add_callback_signalsafecCs|jr|jd7_dS)z3Notification that a TimerHandle has been cancelled.rN)r�r�r�rrr�_timer_handle_cancelled!sz%BaseEventLoop._timer_handle_cancelledc	Cs�t|j�}|tkr`|j|tkr`g}|jD]}|jr<d|_q*|�|�q*t�|�||_d|_n4|jr�|jdjr�|jd8_t�	|j�}d|_q`d}|j
s�|jr�d}n*|jr�|jdj}t
td||���t�}|j�|�}|�|�|��|j}|j�r:|jd}|j|k�r�q:t�	|j�}d|_|j
�|�q�t|j
�}t|�D]�}	|j
��}|j�rf�qL|j�r�zJ||_|��}
|��|��|
}||jk�r�t�dt|�|�Wd|_nd|_0n|���qLd}dS)z�Run one full iteration of the event loop.

        This calls all currently ready callbacks, polls for I/O,
        schedules the resulting callbacks, and finally schedules
        'call_later' callbacks.
        FrrNzExecuting %s took %.3f seconds)r�r��_MIN_SCHEDULED_TIMER_HANDLESr��%_MIN_CANCELLED_TIMER_HANDLES_FRACTIONr�r:r"�heapify�heappopr�r�Z_whenrI�maxr��MAXIMUM_SELECT_TIMEOUTZ	_selectorZselectr�r��range�popleftrr�Z_runr�rr�r)riZsched_countZ
new_scheduledrZtimeoutr$r�Zend_timeZntodo�ir7r9rrrr&sh
��





�zBaseEventLoop._run_oncecCsHt|�t|j�krdS|r2t��|_t�tj�nt�|j�||_dSrC)rwr�r�#get_coroutine_origin_tracking_depthr��#set_coroutine_origin_tracking_depthrZDEBUG_STACK_DEPTH�riZenabledrrrr
ts���z,BaseEventLoop._set_coroutine_origin_trackingcCs|jSrC)rrurrrr��szBaseEventLoop.get_debugcCs ||_|��r|�|j|�dSrC)rr�r�r
r�rrrr��szBaseEventLoop.set_debug)N)N)NNN)NN)NN)N)r)rN)N)NN)FN)rN)NN)NN)Vr�r�r�rkr�rgr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
rrrVr�r�r�r�rr�r�rrr%r r&rr�r*r0r:r3r<rEr?rAr>r`rurrrzrxryr}r�r�r%r2rpr�r7Z
AI_PASSIVEr�r�r�r�r�rrr�r�r�r�r�r�r�r�r�rr
r�r�rrrrr�s���
�
�
�
�
		
&	
	�

�
%���
�/�/���	��z� �%�"29Nr)rr)r)8�__doc__rG�collections.abcZconcurrent.futuresr+rhr"rLr�r%r�rrr�r�rr�r�r]�ImportErrorr/rrrrrrr	r
rrr
�logr�__all__r�r�r$r9r��objectr�rr"r,rBrQrYr\r^�Protocolr_ZAbstractServerrZAbstractEventLooprrrrr�<module>sf

		
;


Do

?>