U
    d                     @   s  d Z ddlm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
k
rT   dZ	Y nX ddlmZ ddlmZ e	pteZejZejZejd dkrddlmZ n2zdd	lmZ W n  e
k
r   dd	lmZ Y nX ed
d eeD ZdD ].Zzeeeee< W q ek
r   Y qX qejd ZZ ej!"dZ#e#rHeee#e# ZZ e#rTdhne$ Z%e#rfd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,Z0G d-d. d.e1Z2dS )/ze
This module contains utilities added by billiard, to keep
"non-core" functionality out of ``.util``.    )absolute_importN   )RestartFreqExceeded)	monotonic   BytesIO)StringIOc                 c   s&   | ]}| d rtt||fV  qdS )ZSIGN)
startswithgetattrsignal).0n r   3/tmp/pip-unpacked-wheel-lulkwrw3/billiard/common.py	<genexpr>"   s    
 r   )SIGHUPSIGABRTSIGTERMREMAP_SIGTERMSIGQUITF   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_statusZ   s    r&   c                 C   s   |t | S Nr   )sloadr   r   r   pickle_loadsc   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_setsignalh   s    r1   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_SOFTWAREr1   r   SIG_DFLsysexit)r/   framer   r   r   _shutdown_cleanupo   s
    
r;   c                 C   s   t t| d S r'   )r   r   )sigr   r   r   r/   z   s    r/   c                 C   s   | t kp|d k	o|tjkS r'   )TERMSIGS_FORCEr   SIG_IGN)r<   currentr   r   r   _should_override_term_signal~   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   	getsignalr1   TERMSIGS_IGNOREr>   )r0   fullr<   numr   r   r   reset_signals   s    rG   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)selfrI   rJ   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   rK   rL   rJ   rI   r   )rM   nowrK   r   r   r   step   s    
zrestart_state.step)N)__name__
__module____qualname__r   rN   rP   r   r   r   r   rH      s   rH   )3__doc__
__future__r   r4   r   r8   pickleZpypicklecPickleZcpickleImportError
exceptionsr   Zfiver   r)   Zpickle_loadloadsr*   version_infoior   	cStringIOr	   dictdirr#   Z
_alias_sigr   r,   r   ZTERM_SIGNALZTERM_SIGNAMEenvirongetr   setrD   r=   r6   rB   rA   r3   r&   r1   r;   r/   r@   rG   objectrH   r   r   r   r   <module>   s   
 		