U
    bhs                     @   sr  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
rH   d dlZY nX zd dlmZ W n ek
rv   dd ZY nX d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ dd	d
dddddddddddgZdZdZd ZdZdZdZdZ dZ!dZ"dZ#dZ$da%da&d d Z'd!d	 Z(d"d
 Z)d#d Z*d$d% Z+d&d' Z,d(d Z-d0d)dZ.d*d+ Z/d,d- Z0d.d/ Z1dS )1    N)_args_from_interpreter_flagsc                  C   st   ddddddddd	d
d
} g }|   D ].\}}ttj|}|dkr&|d||   q&tjD ]}|d|  q\|S )zrReturn a list of command-line arguments reproducing the current
        settings in sys.flags and sys.warnoptions.dOBsSEvbR3)
debugoptimizedont_write_bytecodeno_user_siteno_siteignore_environmentverbosebytes_warninghash_randomizationZpy3k_warningr   -z-W)itemsgetattrsysflagsappendwarnoptions)flag_opt_mapargsflagoptr	    r!   1/tmp/pip-unpacked-wheel-5abm461f/billiard/util.pyr      s&    
r   )_afterfork_registry_afterfork_counter_exit_function_finalizer_registry_finalizer_counterFinalizeForkAwareLocalForkAwareThreadLockget_temp_dir
is_exitingregister_after_fork_run_after_forkers_run_finalizers   )	get_errno	sub_debugr   infosub_warning
get_loggerlog_to_stderrr+   r-   r,   r(   r*   r)   SUBDEBUG
SUBWARNING      
            (   multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFc                 O   s   t rt jt| f|| d S N)_loggerlogr7   msgr   kwargsr!   r!   r"   r2   `   s    c                 O   s   t rt jt| f|| d S rA   )rB   rC   DEBUGrD   r!   r!   r"   r   e   s    c                 O   s   t rt jt| f|| d S rA   )rB   rC   INFOrD   r!   r!   r"   r3   j   s    c                 O   s   t rt jt| f|| d S rA   )rB   rC   r8   rD   r!   r!   r"   r4   o   s    c                 O   s   t rt jt| f|| d S rA   )rB   rC   WARNINGrD   r!   r!   r"   warnings   s    rJ   c                 O   s   t rt jt| f|| d S rA   )rB   rC   ERRORrD   r!   r!   r"   errorw   s    rL   c                  C   s   ddl } z| j| j }}W n" tk
r<   | j| j }}Y nX |  ztts| tadt_	| 
td | 
td ttdrtt tt n$tjtdi f tjtdi f W 5 |  X tS )z0
    Returns logger used by multiprocessing
    r   Nr7   r8   
unregisterr!   )loggingZ_prepareForkZ
_afterForkAttributeError_acquireLock_releaseLockrB   	getLoggerLOGGER_NAME	propagateaddLevelNamer7   r8   hasattratexitrM   r%   registerZ_exithandlersremover   )rN   acquirereleaser!   r!   r"   r5   |   s&    


c                 C   sJ   ddl }t }|t}| }|| || | rB||  dat	S )zB
    Turn on logging and add a handler which prints to stderr
    r   NT)
rN   r5   	FormatterDEFAULT_LOGGING_FORMATStreamHandlersetFormatter
addHandlersetLevel_log_to_stderrrB   )levelrN   logger	formatterhandlerr!   r!   r"   r6      s    



c                  C   s   t jdst zxdt jkrZt } | d | d}| 	d}|
t| |d W S t }tjd}|
tt| |jW S W n tk
r   t Y nX dS )zE
    Return the current value of the parent process death signal
    linuxcffiint prctl (int __option, ...);zint *Nr   	libc.so.6)r   platform
startswithOSErrormodulesrh   FFIcdefnewdlopenprctlPR_GET_PDEATHSIGctypesc_intcdllLoadLibrarybyrefvalue	Exception)ffiargCsiglibcr!   r!   r"   get_pdeathsig   s     




r   c              
   C   s   t jdstdz^dt jkrRt }|d |d}|	t
|d|  ntjd}|	t
t|  W n, tk
r } ztd|W 5 d}~X Y nX dS )	am  
    Set the parent process death signal of the calling process to sig
    (either a signal value in the range 1..maxsig, or 0 to clear).
    This is the signal that the calling process will get when its parent dies.
    This value is cleared for the child of a fork(2) and
    (since Linux 2.4.36 / 2.6.23) when executing a set-user-ID or set-group-ID binary.
    rg   z$pdeathsig is only supported on linuxrh   ri   Nintrj   z(An error occured while setting pdeathsig)r   rk   rl   rm   rn   rh   ro   rp   rr   rs   PR_SET_PDEATHSIGcastru   rw   rx   rv   r{   )r   r|   r~   r   er!   r!   r"   set_pdeathsig   s    


r   c                    s   t   fdd}|S )z&
    Automatic retry after EINTR.
    c               
      sF   z | |W S  t k
r> } zt|tjkr. W 5 d }~X Y q X q d S rA   )rm   r1   errnoZEINTR)r   rF   excfuncr!   r"   wrapped   s
    z_eintr_retry.<locals>.wrapped)	functoolswraps)r   r   r!   r   r"   _eintr_retry   s    r   )N)2r   r   r   rW   rh   ImportErrorru   
subprocessr   Zmultiprocessing.utilr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   compatr1   __all__rt   r   NOTSETr7   rG   rH   r8   rI   rK   rS   r]   rB   rb   r2   r   r3   r4   rJ   rL   r5   r6   r   r   r   r!   r!   r!   r"   <module>
   sh   <          	"
