U
    Íø.e:  ã                   @   sv  d Z ddlZddlZddlZddlZddlmZ ddlmZ ej	Z
ejZddlmZ edd„ eeƒD ƒƒZd	D ],Zzeeeeeƒ< W qn ek
r˜   Y qnX qnejd
 ZZej d¡ZerÈeeeƒe ZZerÒd
hneƒ Zerâdhneƒ ZdZddeddhZddddddddeddddddhZ dgZ!dd„ Z"e
fdd„Zd d!„ Z#d"d#„ Z$d$d%„ Z%d&d'„ Z&e$dfd(d)„Z'G d*d+„ d+ƒZ(dS ),ze
This module contains utilities added by billiard, to keep
"non-core" functionality out of ``.util``.é    Né   )ÚRestartFreqExceeded)Ú	monotonic©ÚBytesIOc                 c   s&   | ]}|  d ¡rtt|ƒ|fV  qdS )ZSIGN)Ú
startswithÚgetattrÚsignal)Ú.0Ún© r   ú3/tmp/pip-unpacked-wheel-39f38r4u/billiard/common.pyÚ	<genexpr>   s    
 r   )ÚSIGHUPÚSIGABRTÚSIGTERMÚREMAP_SIGTERMÚSIGQUITéF   r   ÚSIGUSR1ÚSIGUSR2ÚSIGTRAPr   ZSIGEMTÚSIGSYSÚSIGPIPEÚSIGALRMÚSIGXCPUÚSIGXFSZÚ	SIGVTALRMÚSIGPROFFc                 C   sN   | pddk rDzd  |  t|   ¡W S  tk
rB   d  |  ¡ Y S X d  | ¡S )Nr   zsignal {0} ({1})z
signal {0}zexitcode {0})ÚformatÚSIGMAPÚKeyError)Ústatusr   r   r   Úhuman_statusN   s    r#   c                 C   s   |t | ƒƒS ©Nr   )ÚsÚloadr   r   r   Úpickle_loadsW   s    r'   c                 C   s2   zt   | |¡ W n ttttfk
r,   Y nX d S r$   )r	   ÚOSErrorÚAttributeErrorÚ
ValueErrorÚRuntimeError)ÚsignumÚhandlerr   r   r   Úmaybe_setsignal\   s    r.   c                 C   s:   t d rt t¡ t| tjƒ dt d< t d|   ¡ d S )Nr   Té   )	Ú_should_have_exitedÚosÚ_exitÚEX_SOFTWAREr.   r	   ÚSIG_DFLÚsysÚexit)r,   Úframer   r   r   Ú_shutdown_cleanupc   s
    
r8   c                 C   s   t t| d ƒS r$   )r   r	   )Úsigr   r   r   r,   n   s    r,   c                 C   s   | t kp|d k	o|tjkS r$   )ÚTERMSIGS_FORCEr	   ÚSIG_IGN)r9   Úcurrentr   r   r   Ú_should_override_term_signalr   s    þr=   c                 C   s^   |rt ntD ]*}t|ƒ}|rt|t |¡ƒrt|| ƒ qtD ]}t|ƒ}|r<t|tjƒ q<d S r$   )	ÚTERMSIGS_FULLÚTERMSIGS_DEFAULTr,   r=   r	   Ú	getsignalr.   ÚTERMSIGS_IGNOREr;   )r-   Úfullr9   Únumr   r   r   Úreset_signalsy   s    rD   c                   @   s"   e Zd ZeZdd„ Zddd„ZdS )Úrestart_statec                 C   s   || | _ | _d\| _| _d S )N)r   N)ÚmaxRÚmaxTÚRÚT)ÚselfrF   rG   r   r   r   Ú__init__ˆ   s    zrestart_state.__init__Nc                 C   s’   |d krt ƒ n|}| j}| jr>|| j | jkr>|d | _| _n2| jrp| j| jkrp| jrpd| _|  d|| jf ¡‚| jd kr€|| _|  jd7  _d S )Nr   z	%r in %rsr   )r   rH   rI   rG   rF   r   )rJ   ÚnowrH   r   r   r   ÚstepŒ   s    
zrestart_state.step)N)Ú__name__Ú
__module__Ú__qualname__r   rK   rM   r   r   r   r   rE   …   s   rE   ))Ú__doc__r1   r	   r5   ÚpickleÚ
exceptionsr   Útimer   r&   Zpickle_loadÚloadsr'   Úior   ÚdictÚdirr    Z
_alias_sigr   r)   r   ZTERM_SIGNALZTERM_SIGNAMEÚenvironÚgetr   ÚsetrA   r:   r3   r?   r>   r0   r#   r.   r8   r,   r=   rD   rE   r   r   r   r   Ú<module>   sr   ÿ ÿû	ñ	