U e5dۿ�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZdZe jdkr�ed��dd�ZGdd�dej�ZGdd�dej�Z Gdd�dej!ej"�Z#Gdd�dej$�Z%Gdd�d�Z&dd�Z'Gdd �d e&�Z(Gd!d"�d"e(�Z)Gd#d$�d$e(�Z*Gd%d&�d&e&�Z+Gd'd(�d(e&�Z,Gd)d*�d*ej-�Z.eZ/e.Z0dS)+�N�)� base_events)�base_subprocess)� constants)� coroutines)�events)� exceptions)�futures)�selector_events)�tasks)� transports)�logger)�SelectorEventLoop�AbstractChildWatcher�SafeChildWatcher�FastChildWatcher�MultiLoopChildWatcher�ThreadedChildWatcher�DefaultEventLoopPolicyZwin32z+Signals are not really supported on WindowscCsdS�N�)�signum�framerr�+/usr/lib64/python3.8/asyncio/unix_events.py�_sighandler_noop*srcs�eZdZd(�fdd� Z�fdd�Zdd�Zdd �Zd d �Zd d �Zdd�Z d)dd�Z d*dd�Z d+dd�Z dd�Z d,ddddd�dd�Zd-dddddd�dd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Z�ZS).�_UnixSelectorEventLoopNcst��|�i|_dSr)�super�__init__�_signal_handlers)�self�selector�� __class__rrr5s z_UnixSelectorEventLoop.__init__csZt���t��s.t|j�D]}|�|�qn(|jrVtjd|�d�t |d�|j� �dS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removal��source) r�close�sys� is_finalizing�listr�remove_signal_handler�warnings�warn�ResourceWarning�clear�r�sigr!rrr%9s �z_UnixSelectorEventLoop.closecCs|D]}|sq|�|�qdSr)�_handle_signal)r�datarrrr�_process_self_dataGsz)_UnixSelectorEventLoop._process_self_datac GsLt�|�st�|�rtd��|�|�|��zt�|j� ��Wn2t t fk rt}zt t |���W5d}~XYnXt�|||d�}||j|<zt�|t�t�|d�Wn�t k �rF}zz|j|=|j�szt�d�Wn4t t fk �r}zt�d|�W5d}~XYnX|jtjk�r4t d|�d���n�W5d}~XYnXdS)Nz3coroutines cannot be used with add_signal_handler()F������set_wakeup_fd(-1) failed: %s�sig � cannot be caught)rZ iscoroutineZiscoroutinefunction� TypeError� _check_signalZ _check_closed�signal� set_wakeup_fdZ_csock�fileno� ValueError�OSError� RuntimeError�strrZHandlerr� siginterruptr �info�errno�EINVAL)rr/�callback�args�exc�handleZnexcrrr�add_signal_handlerNs2 �   z)_UnixSelectorEventLoop.add_signal_handlercCs8|j�|�}|dkrdS|jr*|�|�n |�|�dSr)r�getZ _cancelledr)Z_add_callback_signalsafe)rr/rGrrrr0{s   z%_UnixSelectorEventLoop._handle_signalc Cs�|�|�z |j|=Wntk r,YdSX|tjkr@tj}ntj}zt�||�WnBtk r�}z$|jtj kr�t d|�d���n�W5d}~XYnX|js�zt� d�Wn2t tfk r�}zt �d|�W5d}~XYnXdS)NFr5r6r3r4T)r8r�KeyErrorr9�SIGINT�default_int_handler�SIG_DFLr=rBrCr>r:r<r rA)rr/�handlerrFrrrr)�s(    z,_UnixSelectorEventLoop.remove_signal_handlercCs6t|t�std|����|t��kr2td|����dS)Nzsig must be an int, not zinvalid signal number )� isinstance�intr7r9� valid_signalsr<r.rrrr8�s  z$_UnixSelectorEventLoop._check_signalcCst|||||�Sr)�_UnixReadPipeTransport�r�pipe�protocol�waiter�extrarrr�_make_read_pipe_transport�sz0_UnixSelectorEventLoop._make_read_pipe_transportcCst|||||�Sr)�_UnixWritePipeTransportrSrrr�_make_write_pipe_transport�sz1_UnixSelectorEventLoop._make_write_pipe_transportc �s�t����} | ��std��|��} t||||||||f| |d�| ��} | �| ��|j| �z| IdHWnDt t fk r��Yn,t k r�| � �| � �IdH�YnXW5QRX| S)NzRasyncio.get_child_watcher() is not activated, subprocess support is not installed.)rVrW)r�get_child_watcher� is_activer>� create_future�_UnixSubprocessTransport�add_child_handlerZget_pid�_child_watcher_callback� SystemExit�KeyboardInterrupt� BaseExceptionr%Z_wait) rrUrE�shell�stdin�stdout�stderr�bufsizerW�kwargs�watcherrV�transprrr�_make_subprocess_transport�s8  ��� �z1_UnixSelectorEventLoop._make_subprocess_transportcCs|�|j|�dSr)�call_soon_threadsafeZ_process_exited)r�pid� returncoderkrrrr`�sz._UnixSelectorEventLoop._child_watcher_callback)�ssl�sock�server_hostname�ssl_handshake_timeoutc �s |r|dkr6td��n |dk r&td��|dk r6td��|dk r�|dk rNtd��t�|�}t�tjtjd�}z |�d�|�||�IdHWq�|���Yq�Xn@|dkr�td��|j tjks�|j tjkr�td|����|�d�|j |||||d �IdH\}}||fS) Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with ssl�1ssl_handshake_timeout is only meaningful with ssl�3path and sock can not be specified at the same timerFzno path and sock were specified�.A UNIX Domain Stream Socket was expected, got )rs) r<�os�fspath�socket�AF_UNIX� SOCK_STREAM� setblockingZ sock_connectr%�family�typeZ_create_connection_transport) r�protocol_factory�pathrprqrrrs� transportrUrrr�create_unix_connection�sR���     �� �z-_UnixSelectorEventLoop.create_unix_connection�dT)rq�backlogrprs� start_servingc �s�t|t�rtd��|dk r&|s&td��|dk �rH|dk r@td��t�|�}t�tjtj�}|ddkr�z t � t� |�j �r�t� |�WnBt k r�Yn0tk r�}zt�d||�W5d}~XYnXz|�|�Wnltk �r0} z8|��| jtjk�rd|�d�} ttj| �d�n�W5d} ~ XYn|���YnXn<|dk�rZtd ��|jtjk�sv|jtjk�r�td |����|�d �t�||g||||�} |�r�| ��tjd|d �IdH| S) Nz*ssl argument must be an SSLContext or Nonertrur)r�z2Unable to check or remove stale UNIX socket %r: %rzAddress z is already in usez-path was not specified, and no sock specifiedrvF)�loop)rO�boolr7r<rwrxryrzr{�stat�S_ISSOCK�st_mode�remove�FileNotFoundErrorr=r �errorZbindr%rBZ EADDRINUSEr}r~r|rZServerZ_start_servingr �sleep) rrr�rqr�rprsr��errrF�msgZserverrrr�create_unix_serversn  � �  �   � ��  �z)_UnixSelectorEventLoop.create_unix_serverc �s�z tjWn,tk r6}zt�d��W5d}~XYnXz |��}Wn2ttjfk rv}zt�d��W5d}~XYnXzt�|�j }Wn,t k r�}zt�d��W5d}~XYnX|r�|n|} | s�dS|� �} |� | d||||| d�| IdHS)Nzos.sendfile() is not availableznot a regular filer) rw�sendfile�AttributeErrorr�SendfileNotAvailableErrorr;�io�UnsupportedOperation�fstat�st_sizer=r]�_sock_sendfile_native_impl) rrq�file�offset�countrFr;r�Zfsize� blocksize�futrrr�_sock_sendfile_nativeJs2 �   �z,_UnixSelectorEventLoop._sock_sendfile_nativec Cs,|��} |dk r|�|�|��r4|�|||�dS|rd||}|dkrd|�|||�|�|�dSzt�| |||�} W�nDttfk r�|dkr�|� ||�|� | |j || ||||||� Y�nbt k �rj} z�|dk �r| j t jk�rt| �tk �rtdt j�} | | _| } |dk�rBt�d�} |�|||�|�| �n|�|||�|�| �W5d} ~ XYn�ttfk �r��Yn�tk �r�} z|�|||�|�| �W5d} ~ XYnjX| dk�r�|�|||�|�|�nD|| 7}|| 7}|dk�r |� ||�|� | |j || ||||||� dS)Nrzsocket is not connectedzos.sendfile call failed)r;� remove_writer� cancelled�_sock_sendfile_update_fileposZ set_resultrwr��BlockingIOError�InterruptedError�_sock_add_cancellation_callbackZ add_writerr�r=rBZENOTCONNr~�ConnectionError� __cause__rr�Z set_exceptionrarbrc)rr�Z registered_fdrqr;r�r�r�� total_sent�fdZsentrF�new_excr�rrrr�as�    �   � �� �      �z1_UnixSelectorEventLoop._sock_sendfile_native_implcCs|dkrt�||tj�dS�Nr)rw�lseek�SEEK_SET)rr;r�r�rrrr��sz4_UnixSelectorEventLoop._sock_sendfile_update_fileposcs��fdd�}|�|�dS)Ncs&|��r"���}|dkr"��|�dS)Nr3)r�r;r�)r�r��rrqrr�cb�szB_UnixSelectorEventLoop._sock_add_cancellation_callback..cb)Zadd_done_callback)rr�rqr�rr�rr��sz6_UnixSelectorEventLoop._sock_add_cancellation_callback)N)NN)NN)N)N)N)�__name__� __module__� __qualname__rr%r2rHr0r)r8rXrZrlr`r�r�r�r�r�r�� __classcell__rrr!rr/sF -   � � � �� .�� CFrcs�eZdZdZd�fdd� Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z e jfdd�Zddd�Zdd�Zdd�Z�ZS) rRiNcs�t��|�||jd<||_||_|��|_||_d|_d|_ t � |j�j }t �|�s�t �|�s�t �|�s�d|_d|_d|_td��t �|jd�|j�|jj|�|j�|jj|j|j�|dk r�|j�tj|d�dS)NrTFz)Pipe transport is for pipes/sockets only.)rr�_extra�_loop�_piper;�_fileno� _protocol�_closing�_pausedrwr�r�r��S_ISFIFOr��S_ISCHRr<� set_blocking� call_soon�connection_made� _add_reader� _read_readyr �_set_result_unless_cancelled)rr�rTrUrVrW�moder!rrr�s:    �� � �z_UnixReadPipeTransport.__init__cCs�|jjg}|jdkr |�d�n|jr0|�d�|�d|j���t|jdd�}|jdk r�|dk r�t� ||jt j �}|r�|�d�q�|�d�n |jdk r�|�d�n |�d�d� d � |��S) N�closed�closing�fd=� _selector�polling�idle�open�<{}>� )r"r�r��appendr�r��getattrr�r �_test_selector_event� selectorsZ EVENT_READ�format�join)rrAr r�rrr�__repr__�s(    �     z_UnixReadPipeTransport.__repr__c Cs�zt�|j|j�}WnDttfk r,Yn�tk rX}z|�|d�W5d}~XYn^X|rl|j� |�nJ|j � �r�t � d|�d|_|j �|j�|j �|jj�|j �|jd�dS)Nz"Fatal read error on pipe transport�%r was closed by peerT)rw�readr��max_sizer�r�r=� _fatal_errorr�Z data_receivedr�� get_debugr rAr��_remove_readerr�Z eof_received�_call_connection_lost)rr1rFrrrr��s  z"_UnixReadPipeTransport._read_readycCs>|js |jrdSd|_|j�|j�|j��r:t�d|�dS)NTz%r pauses reading)r�r�r�r�r�r�r �debug�rrrr� pause_reading�s   z$_UnixReadPipeTransport.pause_readingcCsB|js |jsdSd|_|j�|j|j�|j��r>t�d|�dS)NFz%r resumes reading) r�r�r�r�r�r�r�r r�r�rrr�resume_readings   z%_UnixReadPipeTransport.resume_readingcCs ||_dSr�r��rrUrrr� set_protocol sz#_UnixReadPipeTransport.set_protocolcCs|jSrr�r�rrr� get_protocolsz#_UnixReadPipeTransport.get_protocolcCs|jSr�r�r�rrr� is_closingsz!_UnixReadPipeTransport.is_closingcCs|js|�d�dSr)r��_closer�rrrr%sz_UnixReadPipeTransport.closecCs,|jdk r(|d|��t|d�|j��dS�Nzunclosed transport r#�r�r,r%�r�_warnrrr�__del__s z_UnixReadPipeTransport.__del__�Fatal error on pipe transportcCsZt|t�r4|jtjkr4|j��rLtjd||dd�n|j�||||j d��|� |�dS�Nz%r: %sT��exc_info)�message� exceptionr�rU) rOr=rBZEIOr�r�r r��call_exception_handlerr�r��rrFr�rrrr�s �z#_UnixReadPipeTransport._fatal_errorcCs(d|_|j�|j�|j�|j|�dS�NT)r�r�r�r�r�r��rrFrrrr�-sz_UnixReadPipeTransport._closecCs4z|j�|�W5|j��d|_d|_d|_XdSr�r�r%r�r�Zconnection_lostr�rrrr�2s  z,_UnixReadPipeTransport._call_connection_lost)NN)r�)r�r�r�r�rr�r�r�r�r�r�r�r%r*r+r�r�r�r�r�rrr!rrR�s rRcs�eZdZd%�fdd� Zdd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dd�Z dd�Z dd�Z dd�Z dd�Zejfdd�Zdd�Zd&dd �Zd'd!d"�Zd#d$�Z�ZS)(rYNc s�t��||�||jd<||_|��|_||_t�|_d|_ d|_ t � |j�j }t�|�}t�|�}t�|�} |s�|s�| s�d|_d|_d|_td��t �|jd�|j�|jj|�| s�|r�tj�d�s�|j�|jj|j|j�|dk r�|j�tj|d�dS)NrTrFz?Pipe transport is only for pipes, sockets and character devicesZaix)rrr�r�r;r�r�� bytearray�_buffer� _conn_lostr�rwr�r�r�r�r�r�r<r�r�r�r�r&�platform� startswithr�r�r r�) rr�rTrUrVrWr�Zis_charZis_fifoZ is_socketr!rrr?s:       � �z _UnixWritePipeTransport.__init__cCs�|jjg}|jdkr |�d�n|jr0|�d�|�d|j���t|jdd�}|jdk r�|dk r�t� ||jt j �}|r�|�d�n |�d�|� �}|�d|���n |jdk r�|�d�n |�d�d � d �|��S) Nr�r�r�r�r�r�zbufsize=r�r�r�)r"r�r�r�r�r�r�r�r r�r�Z EVENT_WRITE�get_write_buffer_sizer�r�)rrAr r�rhrrrr�ds,    �     z _UnixWritePipeTransport.__repr__cCs t|j�Sr)�lenr�r�rrrr�|sz-_UnixWritePipeTransport.get_write_buffer_sizecCs6|j��rt�d|�|jr*|�t��n|��dS)Nr�)r�r�r rAr�r��BrokenPipeErrorr�rrrr�s   z#_UnixWritePipeTransport._read_readyc Cs4t|t�rt|�}|sdS|js&|jrN|jtjkr|}d}t�d|�Yn.X|dkrLdSt|�}|j��rlt� d||�z|j � |�\}}Wn.t k r�|j��r�tjd|dd�YnX|||f|��dS)N���8Unknown child process pid %d, will report returncode 255r�$process %s exited with returncode %s�'Child watcher got an unexpected pid: %rTr�) rw�waitpid�WNOHANG�ChildProcessErrorr rr#r�r�r�r%�poprJ)rr&rnr"rorDrErrrr'�s4�  � � zSafeChildWatcher._do_waitpid) r�r�r�r%rrr_rr(r'r�rrr!rr�s rcsPeZdZ�fdd�Z�fdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z �Z S)rcs$t���t��|_i|_d|_dSr�)rr� threadingZLock�_lock�_zombies�_forksr�r!rrrs  zFastChildWatcher.__init__cs"|j��|j��t���dSr)r%r-r:rr%r�r!rrr%s  zFastChildWatcher.closec Cs0|j� |jd7_|W5QR�SQRXdS)Nr)r9r;r�rrrrszFastChildWatcher.__enter__c Cs^|j�B|jd8_|js"|js0W5QR�dSt|j�}|j��W5QRXt�d|�dS)Nrz5Caught subprocesses termination from unknown pids: %s)r9r;r:r?r-r r)rrrrZcollateral_victimsrrrrs  �zFastChildWatcher.__exit__c Gsf|j�Fz|j�|�}Wn.tk rF||f|j|<YW5QR�dSXW5QRX|||f|��dSr)r9r:r7rJr%)rrnrDrErorrrr_'sz"FastChildWatcher.add_child_handlercCs*z|j|=WdStk r$YdSXdSr-r.rrrrr5s z%FastChildWatcher.remove_child_handlerc Cs�zt�dtj�\}}Wntk r,YdSX|dkr:dSt|�}|j��z|j�|�\}}WnNtk r�|j r�||j |<|j � �r�t �d||�YW5QR�qd}YnX|j � �r�t �d||�W5QRX|dkr�t �d||�q|||f|��qdS)Nr3rz,unknown process %s exited with returncode %sr2z8Caught subprocess termination from unknown pid: %d -> %d)rwr4r5r6r#r9r%r7rJr;r:r�r�r r�r)rrnr"rorDrErrrr(<s@  �  ��z FastChildWatcher._do_waitpid_all) r�r�r�rr%rrr_rr(r�rrr!rr�s  rc@sdeZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dS)rcCsi|_d|_dSr)r%�_saved_sighandlerr�rrrrzszMultiLoopChildWatcher.__init__cCs |jdk Sr)r<r�rrrr\~szMultiLoopChildWatcher.is_activecCsT|j��|jdkrdSt�tj�}||jkr:t�d�nt�tj|j�d|_dS)Nz+SIGCHLD handler was changed by outside code) r%r-r<r9� getsignalr*r+r r)rrNrrrr%�s     zMultiLoopChildWatcher.closecCs|Srrr�rrrr�szMultiLoopChildWatcher.__enter__cCsdSrr�r�exc_typeZexc_valZexc_tbrrrr�szMultiLoopChildWatcher.__exit__cGs&t��}|||f|j|<|�|�dSr)r�get_running_loopr%r')rrnrDrEr�rrrr_�sz'MultiLoopChildWatcher.add_child_handlercCs*z|j|=WdStk r$YdSXdSr-r.rrrrr�s z*MultiLoopChildWatcher.remove_child_handlercCsN|jdk rdSt�tj|j�|_|jdkr�s�z6ThreadedChildWatcher._join_threads..)r(rE�valuesr�)r�threadsrKrrrrF�sz"ThreadedChildWatcher._join_threadscCs|Srrr�rrrrszThreadedChildWatcher.__enter__cCsdSrrr>rrrrszThreadedChildWatcher.__exit__cCs6dd�t|j���D�}|r2||j�d�t|d�dS)NcSsg|]}|��r|�qSr)rGrIrrrrL s�z0ThreadedChildWatcher.__del__..z0 has registered but not finished child processesr#)r(rErMr"r,)rr�rNrrrr�s  �zThreadedChildWatcher.__del__cGsFt��}tj|jdt|j���||||fdd�}||j|<|��dS)Nzwaitpid-T)�target�namerErH) rr@r8ZThreadr'�nextrDrE�start)rrnrDrEr�rKrrrr_s � z&ThreadedChildWatcher.add_child_handlercCsdSr�rrrrrrsz)ThreadedChildWatcher.remove_child_handlercCsdSrrrrrrrsz ThreadedChildWatcher.attach_loopcCs�zt�|d�\}}Wn(tk r<|}d}t�d|�Yn Xt|�}|��r\t�d||�|��rtt�d||�n|j |||f|��|j � |�dS)Nrr0r1r2rA) rwr4r6r rr#r�r�rBrmrEr7)rr�r&rDrErnr"rorrrr'"s&� �z ThreadedChildWatcher._do_waitpidN)r�r�r�rr\r%rFrrr*r+r�r_rrr'rrrrr�s  rcsDeZdZeZ�fdd�Zdd�Z�fdd�Zdd�Zd d �Z �Z S) �_UnixDefaultEventLoopPolicycst���d|_dSr)rr�_watcherr�r!rrrAs z$_UnixDefaultEventLoopPolicy.__init__c CsHtj�8|jdkr:t�|_tt��tj�r:|j�|j j �W5QRXdSr) rr9rTrrOr8�current_thread� _MainThreadr�_localr�r�rrr� _init_watcherEs �z)_UnixDefaultEventLoopPolicy._init_watchercs6t��|�|jdk r2tt��tj�r2|j�|�dSr)r�set_event_looprTrOr8rUrVrrr!rrrYMs   �z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr|��|jSr)rTrXr�rrrr[[s z-_UnixDefaultEventLoopPolicy.get_child_watchercCs|jdk r|j��||_dSr)rTr%)rrjrrr�set_child_watcheres  z-_UnixDefaultEventLoopPolicy.set_child_watcher) r�r�r�rZ _loop_factoryrrXrYr[rZr�rrr!rrS=s    rS)1rBr�rCrwr�r9ryr�r r&r8r*�rrrrrrr r r r �logr �__all__r�� ImportErrorrZBaseSelectorEventLooprZ ReadTransportrRZ_FlowControlMixinZWriteTransportrYZBaseSubprocessTransportr^rr#r$rrrrZBaseDefaultEventLoopPolicyrSrrrrrr�s^             �NO5Ji}Y3