add-determinism 0.7.3

RPM buildroot helper to strip nondeterministic bits in files
Documentation
B

�/g^vc@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddl
mZddl
m
Z
ddl
mZddl
mZdd	l
mZdd
l
mZddlmZdZdZd
ZdZdZdZdZGdd�de
j�ZGdd�de
j�ZGdd�de�ZGdd�de�ZGdd�de �Z!Gdd�dej"�Z#Gdd�dej$�Z%Gd d!�d!�Z&Gd"d#�d#ej'�Z(e#Z)Gd$d%�d%ej*�Z+Gd&d'�d'ej*�Z,e+Z-dS)(z.Selector and proactor event loops for Windows.�N�)�events)�base_subprocess)�futures)�proactor_events)�selector_events)�tasks)�
windows_utils)�logger)�SelectorEventLoop�ProactorEventLoop�IocpProactor�DefaultEventLoopPolicy�WindowsSelectorEventLoopPolicy�WindowsProactorEventLoopPolicy���i�i�g����MbP?g�������?cs^eZdZdZdd��fdd�
Z�fdd�Zdd	�Z�fd
d�Z�fdd
�Z�fdd�Z	�Z
S)�_OverlappedFuturez�Subclass of Future which represents an overlapped operation.

    Cancelling it will immediately cancel the overlapped operation.
    N��loopcs&t�j|d�|jr|jd=||_dS�Nr�����)�super�__init__�_source_traceback�_ov)�self�ovr��	__class__��./usr/lib64/python3.7/asyncio/windows_events.pyr0sz_OverlappedFuture.__init__csHt���}|jdk	rD|jjr dnd}|�dd|�d|jjd�d��|S)N�pendingZ	completedrzoverlapped=<z, �#xz>)r�
_repr_inforr Zinsert�address�r�infoZstaterrrr"6s


 z_OverlappedFuture._repr_infoc
Csr|jdkrdSy|j��WnJtk
rf}z,d||d�}|jrJ|j|d<|j�|�Wdd}~XYnXd|_dS)Nz&Cancelling an overlapped future failed��message�	exception�future�source_traceback)r�cancel�OSErrorr�_loop�call_exception_handler)r�exc�contextrrr�_cancel_overlapped=s

z$_OverlappedFuture._cancel_overlappedc�|��t���S�N)r1rr+�rrrrr+M�z_OverlappedFuture.cancelcst��|�|��dSr3)r�
set_exceptionr1�rr(rrrr6Q�z_OverlappedFuture.set_exceptioncst��|�d|_dSr3)r�
set_resultr�r�resultrrrr9Ur8z_OverlappedFuture.set_result)�__name__�
__module__�__qualname__�__doc__rr"r1r+r6r9�
__classcell__rrrrr*srcsneZdZdZdd��fdd�
Zdd�Z�fdd	�Zd
d�Zdd
�Z�fdd�Z	�fdd�Z
�fdd�Z�ZS)�_BaseWaitHandleFuturez2Subclass of Future which represents a wait handle.Nrcs8t�j|d�|jr|jd=||_||_||_d|_dS)NrrT)rrrr�_handle�_wait_handle�_registered)rr�handle�wait_handlerrrrr]sz_BaseWaitHandleFuture.__init__cCst�|jd�tjkS�Nr)�_winapiZWaitForSingleObjectrBZ
WAIT_OBJECT_0r4rrr�_pollksz_BaseWaitHandleFuture._pollcsdt���}|�d|jd���|jdk	rB|��r4dnd}|�|�|jdk	r`|�d|jd���|S)Nzhandle=r!ZsignaledZwaitingzwait_handle=)rr"�appendrBrIrCr$rrrr"ps



z _BaseWaitHandleFuture._repr_infocCs
d|_dSr3)r�r�futrrr�_unregister_wait_cbzsz)_BaseWaitHandleFuture._unregister_wait_cbc
Cs�|js
dSd|_|j}d|_yt�|�WnZtk
r�}z<|jtjkrtd||d�}|jrd|j|d<|j�	|�dSWdd}~XYnX|�
d�dS�NFz$Failed to unregister the wait handler&r*)rDrC�_overlappedZUnregisterWaitr,�winerror�ERROR_IO_PENDINGrr-r.rM�rrFr/r0rrr�_unregister_waits"
z&_BaseWaitHandleFuture._unregister_waitcr2r3)rSrr+r4rrrr+�r5z_BaseWaitHandleFuture.cancelc�|��t��|�dSr3)rSrr6r7rrrr6�r5z#_BaseWaitHandleFuture.set_exceptioncrTr3)rSrr9r:rrrr9�r5z _BaseWaitHandleFuture.set_result)
r<r=r>r?rrIr"rMrSr+r6r9r@rrrrrAZs
rAcsFeZdZdZdd��fdd�
Zdd�Z�fdd	�Z�fd
d�Z�ZS)�_WaitCancelFuturezoSubclass of Future which represents a wait for the cancellation of a
    _WaitHandleFuture using an event.
    Nrcst�j||||d�d|_dS)Nr)rr�_done_callback)rr�eventrFrrrrr�sz_WaitCancelFuture.__init__cCstd��dS)Nz'_WaitCancelFuture must not be cancelled)�RuntimeErrorr4rrrr+��z_WaitCancelFuture.cancelc�$t��|�|jdk	r |�|�dSr3)rr9rVr:rrrr9��
z_WaitCancelFuture.set_resultcrZr3)rr6rVr7rrrr6�r[z_WaitCancelFuture.set_exception)	r<r=r>r?rr+r9r6r@rrrrrU�s
rUcs6eZdZdd��fdd�
Z�fdd�Zdd�Z�ZS)	�_WaitHandleFutureNrcs<t�j||||d�||_d|_t�dddd�|_d|_dS)NrTF)rr�	_proactorZ_unregister_proactorrOZCreateEvent�_event�
_event_fut)rrrErF�proactorrrrrr�s
z_WaitHandleFuture.__init__csF|jdk	r"t�|j�d|_d|_|j�|j�d|_t��|�dSr3)	r^rH�CloseHandler_r]�_unregisterrrrMrKrrrrM�s
	z%_WaitHandleFuture._unregister_wait_cbc
Cs�|js
dSd|_|j}d|_yt�||j�WnZtk
r�}z<|jtjkrxd||d�}|jrh|j|d<|j	�
|�dSWdd}~XYnX|j�|j|j
�|_dSrN)rDrCrOZUnregisterWaitExr^r,rPrQrr-r.r]�_wait_cancelrMr_rRrrrrS�s$

z"_WaitHandleFuture._unregister_wait)r<r=r>rrMrSr@rrrrr\�sr\c@s<eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZeZ	dS)
�
PipeServerzXClass representing a pipe server.

    This is much like a bound, listening socket.
    cCs,||_t��|_d|_d|_|�d�|_dS�NT)�_address�weakref�WeakSet�_free_instances�_pipe�_accept_pipe_future�_server_pipe_handle)rr#rrrr�s

zPipeServer.__init__cCs|j|�d�}|_|S)NF)rjrl)r�tmprrr�_get_unconnected_pipe�sz PipeServer._get_unconnected_pipec
Csr|��rdStjtjB}|r&|tjO}t�|j|tjtjBtj	Btj
tjtjtj
tj�}t�|�}|j�|�|Sr3)�closedrHZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperfZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ	PIPE_WAITZPIPE_UNLIMITED_INSTANCESrZBUFSIZEZNMPWAIT_WAIT_FOREVER�NULL�
PipeHandleri�add)rZfirst�flagsZh�piperrrrls


zPipeServer._server_pipe_handlecCs
|jdkSr3)rfr4rrrrorYzPipeServer.closedcCsV|jdk	r|j��d|_|jdk	rRx|jD]}|��q,Wd|_d|_|j��dSr3)rkr+rfri�closerj�clear)rrtrrrrus


zPipeServer.closeN)
r<r=r>r?rrnrlroru�__del__rrrrrd�s
rdc@seZdZdZdS)�_WindowsSelectorEventLoopz'Windows version of selector event loop.N)r<r=r>r?rrrrrx+�rxcs<eZdZdZd�fdd�	Zdd�Zdd�Zdd	d
�Z�ZS)
rz2Windows version of proactor event loop using IOCP.Ncs|dkrt�}t��|�dSr3)rrr)rr`rrrr2szProactorEventLoop.__init__c�s8|j�|�}|IdH}|�}|j||d|id�}||fS)N�addr��extra)r]�connect_pipe�_make_duplex_pipe_transport)r�protocol_factoryr#�frt�protocol�transrrr�create_pipe_connection7s
z(ProactorEventLoop.create_pipe_connectionc�s.t���d�����fdd�	������gS)Nc
sd}yj|rL|��}�j�|����r2|��dS��}�j||d�id����}|dkr`dS�j�|�}Wn�t	k
r�}zF|r�|�
�dkr���d||d��|��n�jr�t
jd|dd�Wdd}~XYn2tjk
r�|r�|��YnX|�_|���dS)	Nrzr{rzPipe accept failed)r'r(rtzAccept pipe failed on pipe %rT)Zexc_info)r;riZdiscardrorur~rnr]�accept_piper,�filenor.Z_debugr	Zwarningr�CancelledErrorrk�add_done_callback)r�rtr�r/�r#�loop_accept_piperrZserverrrr�Bs<

z>ProactorEventLoop.start_serving_pipe.<locals>.loop_accept_piper3)rdZ	call_soon)rrr#rr�r�start_serving_pipe?s(
z$ProactorEventLoop.start_serving_pipec		�sl|��}
t||||||||f|
|d�|	��}y|
IdHWn,tk
rf|��|��IdH�YnX|S)N)�waiterr|)�
create_future�_WindowsSubprocessTransportZ	ExceptionruZ_wait)rr��args�shell�stdin�stdout�stderr�bufsizer|�kwargsr�Ztransprrr�_make_subprocess_transportms

z,ProactorEventLoop._make_subprocess_transportr3r3)	r<r=r>r?rr�r�r�r@rrrrr/s
0rc@s�eZdZdZd7dd�Zdd�Zdd�Zd	d
�Zd8dd
�Zdd�Z	d9dd�Z
d:dd�Zd;dd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zd<d!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd=d/d0�Zd1d2�Zd3d4�Zd5d6�ZdS)>rz#Proactor implementation using IOCP.rcCsDd|_g|_t�tjtd|�|_i|_t�	�|_
g|_t�	�|_dSrG)
r-�_resultsrO�CreateIoCompletionPort�INVALID_HANDLE_VALUErp�_iocp�_cachergrhrD�
_unregistered�_stopped_serving)rZconcurrencyrrrr�s
zIocpProactor.__init__cCs|jdkrtd��dS)NzIocpProactor is closed)r�rXr4rrr�
_check_closed��
zIocpProactor._check_closedcCsFdt|j�dt|j�g}|jdkr0|�d�d|jjd�|�fS)Nzoverlapped#=%sz
result#=%sroz<%s %s>z )Zlenr�r�r�rJrr<Zjoin)rr%rrr�__repr__�s


zIocpProactor.__repr__cCs
||_dSr3)r-)rrrrr�set_loop�rYzIocpProactor.set_loopNcCs |js|�|�|j}g|_|Sr3)r�rI)r�timeoutrmrrr�select�s

zIocpProactor.selectcCs|j��}|�|�|Sr3)r-r�r9)r�valuerLrrr�_result��

zIocpProactor._resultrcC�z|�|�t�t�}y4t|tj�r6|�|��||�n|�|��|�Wnt	k
rb|�
d�SXdd�}|�|||�S)N�c
S�Py|��Stk
rJ}z$|jtjtjfkr8t|j��n�Wdd}~XYnXdSr3��	getresultr,rPrOZERROR_NETNAME_DELETEDZERROR_OPERATION_ABORTEDZConnectionResetErrorr��r��keyrr/rrr�finish_recv��
z&IocpProactor.recv.<locals>.finish_recv)�_register_with_iocprO�
Overlappedrp�
isinstance�socketZWSARecvr�ZReadFile�BrokenPipeErrorr��	_register)r�connZnbytesrsrr�rrr�recv��


zIocpProactor.recvcCr�)Nr�c
Sr�r3r�r�rrrr��r�z+IocpProactor.recv_into.<locals>.finish_recv)r�rOr�rpr�r�ZWSARecvIntor�ZReadFileIntor�r�r�)rr��bufrsrr�rrr�	recv_into�r�zIocpProactor.recv_intocCsZ|�|�t�t�}t|tj�r4|�|��||�n|�|��|�dd�}|�	|||�S)Nc
Sr�r3r�r�rrr�finish_send�r�z&IocpProactor.send.<locals>.finish_send)
r�rOr�rpr�r�ZWSASendr�Z	WriteFiler�)rr�r�rsrr�rrr�send�s


zIocpProactor.sendcsv|���|��j��t�t�}|����������fdd�}dd�}|�|�|�}||��}t	j
||jd�|S)NcsD|��t�d����}��tjtj|���	��
������fS)Nz@P)r��structZpackr��
setsockoptr��
SOL_SOCKETrOZSO_UPDATE_ACCEPT_CONTEXT�
settimeoutZ
gettimeoutZgetpeername)r�r�rr��r��listenerrr�
finish_accept�s
z*IocpProactor.accept.<locals>.finish_acceptc�s4y|IdHWn tjk
r.|���YnXdSr3)rr�ru)r)r�rrr�accept_coro�s
z(IocpProactor.accept.<locals>.accept_coror)r��_get_accept_socket�familyrOr�rpZAcceptExr�r�rZ
ensure_futurer-)rr�rr�r�r)Zcororr�r�accept�s

	
zIocpProactor.acceptc
s�|���yt�����j�WnBtk
rb}z$|jtjkr@���	�ddkrR�Wdd}~XYnXt�
t�}|����|��fdd�}|�
|�|�S)Nrrcs|����tjtjd��SrG)r�r�r�r�rOZSO_UPDATE_CONNECT_CONTEXT�r�r�r�r�rr�finish_connects
z,IocpProactor.connect.<locals>.finish_connect)r�rOZ	BindLocalr�r�r,rP�errnoZ	WSAEINVALZgetsocknamer�rpZ	ConnectExr�)rr�r#�err�rr�r�connects

zIocpProactor.connectc		Csb|�|�t�t�}|d@}|d?d@}|�|��t�|���|||dd�dd�}|�|||�S)Nri rc
Sr�r3r�r�rrr�finish_sendfile%r�z.IocpProactor.sendfile.<locals>.finish_sendfile)	r�rOr�rpZTransmitFiler��msvcrtZ
get_osfhandler�)	rZsockZfileZoffsetZcountrZ
offset_lowZoffset_highr�rrr�sendfiles



	zIocpProactor.sendfilecsJ|���t�t�}|�����}|r0|���S�fdd�}|�|�|�S)Ncs|���Sr3)r�r��rtrr�finish_accept_pipe;r5z4IocpProactor.accept_pipe.<locals>.finish_accept_pipe)r�rOr�rpZConnectNamedPiper�r�r�)rrtrZ	connectedr�rr�rr�0s


zIocpProactor.accept_pipec
�szt}xjyt�|�}PWn0tk
rF}z|jtjkr6�Wdd}~XYnXt|dt�}tj	||j
d�IdHqWt�|�S)Nir)
�CONNECT_PIPE_INIT_DELAYrOZConnectPiper,rPZERROR_PIPE_BUSYZmin�CONNECT_PIPE_MAX_DELAYrZsleepr-rrq)rr#ZdelayrEr/rrrr}As
zIocpProactor.connect_pipecCs|�||d�S)z�Wait for a handle.

        Return a Future object. The result of the future is True if the wait
        completed, or False if the wait did not complete (on timeout).
        F)�_wait_for_handle)rrEr�rrr�wait_for_handleTszIocpProactor.wait_for_handlecCs|�|dd�}||_|Sre)r�rV)rrWZ
done_callbackrLrrrrc\szIocpProactor._wait_cancelcs�|��|dkrtj}nt�|d�}t�t�}t�||j	|j
|�}|r\t||||jd��nt
|||||jd���jr~�jd=�fdd�}�|d|f|j|j
<�S)N�@�@rrcs���Sr3)rIr��r�rr�finish_wait_for_handleysz=IocpProactor._wait_for_handle.<locals>.finish_wait_for_handler)r�rH�INFINITE�math�ceilrOr�rpZRegisterWaitWithQueuer�r#rUr-r\rr�)rrEr�Z
_is_cancel�msrrFr�rr�rr�cs 


	zIocpProactor._wait_for_handlecCs0||jkr,|j�|�t�|��|jdd�dSrG)rDrrrOr�r�r��r�objrrrr��s
z IocpProactor._register_with_iocpc
Cs�|��t||jd�}|jr$|jd=|jsry|dd|�}Wn,tk
rf}z|�|�Wdd}~XYnX|�|�||||f|j|j	<|Sr)
r�rr-rr r,r6r9r�r#)rrr��callbackr�r�r�rrrr��s

zIocpProactor._registercCs|��|j�|�dS)a
Unregister an overlapped object.

        Call this method when its future has been cancelled. The event can
        already be signalled (pending in the proactor event queue). It is also
        safe if the event is never signalled (because it was cancelled).
        N)r�r�rJ)rrrrrrb�szIocpProactor._unregistercCst�|�}|�d�|SrG)r�r�)rr�Zsrrrr��r�zIocpProactor._get_accept_socketcCs�|dkrt}n0|dkr td��nt�|d�}|tkr>td���xt�|j|�}|dkrZPd}|\}}}}y|j�|�\}}	}
}WnVt	k
r�|j
��r�|j
�dd||||fd��|dtj
fkr�t�|�wBYnX|
|jkr�|��qB|��sBy||||	�}Wn:tk
�r@}
z|�|
�|j�|�Wdd}
~
XYqBX|�|�|j�|�qBWx |jD]}	|j�|	jd��qdW|j��dS)Nrznegative timeoutr�ztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r'�status)r�Z
ValueErrorr�r�rOZGetQueuedCompletionStatusr�r�ZpopZKeyErrorr-Z	get_debugr.r�rHrar�r+Zdoner,r6r�rJr9r�r#rv)rr�r�r�ZerrZtransferredr�r#r�rr�r�r�r�rrrrI�sJ






zIocpProactor._pollcCs|j�|�dSr3)r�rrr�rrr�
_stop_serving�szIocpProactor._stop_servingcCs |jdkrdSx�t|j���D]�\}\}}}}|��r8qt|t�rDqy|��Wqtk
r�}z6|j	dk	r�d||d�}|j
r�|j
|d<|j	�|�Wdd}~XYqXqWd}t�
�}	|	|}
xD|j�r|
t�
�kr�t�d|t�
�|	�t�
�|}
|�|�q�Wg|_t�|j�d|_dS)NzCancelling a future failedr&r*g�?z,%r is running after closing for %.1f seconds)r�Zlistr�ZitemsZ	cancelledr�rUr+r,r-rr.�timeZ	monotonicr	ZdebugrIr�rHra)rr#rLrr�r�r/r0Z
msg_updateZ
start_timeZnext_msgrrrru�s:
 


"
zIocpProactor.closecCs|��dSr3)rur4rrrrw*rYzIocpProactor.__del__)rr3�rr�r�r3r3)r<r=r>r?rr�r�r�r�r�r�r�r�r�r�r�r�r}r�rcr�r�r�rbr�rIr�rurwrrrrrs4






"
 

7/rc@seZdZdd�ZdS)r�c
sPtj|f|||||d�|���_�fdd�}�jj�t�jj��}	|	�|�dS)N)r�r�r�r�r�cs�j��}��|�dSr3)�_procZpollZ_process_exited)r�Z
returncoder4rrr�5r�z4_WindowsSubprocessTransport._start.<locals>.callback)	rZPopenr�r-r]r�ZintrBr�)
rr�r�r�r�r�r�r�r�r�rr4r�_start0sz"_WindowsSubprocessTransport._startN)r<r=r>r�rrrrr�.sr�c@�eZdZeZdS)rN)r<r=r>r
�
_loop_factoryrrrrr@ryrc@r�)rN)r<r=r>rr�rrrrrDryr).r?rOrHr�r�r�r�r�r�rgZrrrrrrrZlogr	Z__all__rpr�ZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDr�r�ZFuturerrArUr\ZobjectrdZBaseSelectorEventLooprxZBaseProactorEventLooprrZBaseSubprocessTransportr�r
ZBaseDefaultEventLoopPolicyrrr
rrrrZ<module>sP0J4;P2