o
    Df                     @   sV  d dl Z d dlZd dlZd dlZzd dlZW n ey#   d dlZY nw zd dlmZ W n ey9   dd ZY nw 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 g d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-d)d!d"Z.d#d$ Z/d%d& Z0d'd( Z1dS )*    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_randomizationpy3k_warningr   -z-W)itemsgetattrsysflagsappendwarnoptions)flag_opt_mapargsflagoptr	    r"   F/home/ubuntu/webapp/venv/lib/python3.10/site-packages/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   &   t rt jt| g|R i | d S d S N)_loggerlogr8   msgr   kwargsr"   r"   r#   r3   `      r3   c                 O   rB   rC   )rD   rE   DEBUGrF   r"   r"   r#   r   e   rI   r   c                 O   rB   rC   )rD   rE   INFOrF   r"   r"   r#   r4   j   rI   r4   c                 O   rB   rC   )rD   rE   r9   rF   r"   r"   r#   r5   o   rI   r5   c                 O   rB   rC   )rD   rE   WARNINGrF   r"   r"   r#   warnings   rI   rM   c                 O   rB   rC   )rD   rE   ERRORrF   r"   r"   r#   errorw   rI   rO   c                  C   s   ddl } |   zMtsH| tadt_| td | td t	t
dr/t
t t
t n t
jtdi f t
jtdi f W |   tS W |   tS W |   tS |   w )z0
    Returns logger used by multiprocessing
    r   Nr8   r9   
unregisterr"   )logging_acquireLockrD   	getLoggerLOGGER_NAME	propagateaddLevelNamer8   r9   hasattratexitrP   r&   register_exithandlersremover   _releaseLock)rQ   r"   r"   r#   r6   |   s,   



r6   c                 C   sJ   ddl }t }|t}| }|| || | r!||  dat	S )zB
    Turn on logging and add a handler which prints to stderr
    r   NT)
rQ   r6   	FormatterDEFAULT_LOGGING_FORMATStreamHandlersetFormatter
addHandlersetLevel_log_to_stderrrD   )levelrQ   logger	formatterhandlerr"   r"   r#   r7      s   



r7   c                  C   s   t jds	t z:dt jv r-t } | d | d}| 	d}|
t| |d W S t }tjd}|
tt| |jW S  tyM   t w )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modulesri   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z2dt jv r+t }|d |d}|	t
|d|  W dS tjd}|	t
t|  W dS  tyM } ztd|d}~ww )	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.
    rh   z$pdeathsig is only supported on linuxri   rj   Nintrk   z(An error occured while setting pdeathsig)r   rl   rm   rn   ro   ri   rp   rq   rs   rt   PR_SET_PDEATHSIGcastrv   rx   ry   rw   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               
      sJ   	 z | i |W S  t y# } zt|tjkr W Y d }~nd }~ww qrC   )rn   r2   errnoEINTR)r   rH   excfuncr"   r#   wrapped   s   z_eintr_retry.<locals>.wrapped)	functoolswraps)r   r   r"   r   r#   _eintr_retry   s   r   rC   )2r   r   r   rX   ri   ImportErrorrv   
subprocessr   multiprocessing.utilr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   compatr2   __all__ru   r   NOTSETr8   rJ   rK   r9   rL   rN   rT   r^   rD   rc   r3   r   r4   r5   rM   rO   r6   r7   r   r   r   r"   r"   r"   r#   <module>   sR   	<	
