o
    gv                     @  s   d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZ ddlmZ dZejjZejZG dd deZG d	d
 d
ZdddZdS )z>Monkey-patching to add multiprocessing support for coverage.py    )annotationsN)AnyDictOptional)DebugControlz_coverage$patchedc                   @  s   e Zd ZdZdd ZdS )ProcessWithCoveragez<A replacement for multiprocess.Process that starts coverage.c                 O  sp  d}z,ddl m} |ddd}d|_|  |j}|dusJ |dr&|}|r-|d W n tyI   td	t	j
d
 tjt	j
d
 t	j
   w z<t| g|R i |W |r]|d z
|  |  W n ty} } z
|rx|jd|d  d}~ww |r|d S S |r|d z
|  |  W n ty } z
|r|jd|d  d}~ww |r|d w w )z,Wrapper around _bootstrap to start coverage.Nr   )CoverageT)data_suffix	auto_dataF	multiprocz!Calling multiprocessing bootstrapz0Exception during multiprocessing bootstrap init:)filez"Finished multiprocessing bootstrapz2Exception during multiprocessing bootstrap cleanup)exczSaved multiprocessing data)coverager   _warn_preimported_sourcestart_debugshouldwrite	Exceptionprintsysstderr	traceback	print_excflushoriginal_bootstrapstopsave)selfargskwargsdebugr   covr   r    r#   R/var/www/html/bloggers_ems/venv/lib/python3.10/site-packages/coverage/multiproc.py
_bootstrap   sb   




zProcessWithCoverage._bootstrapN)__name__
__module____qualname____doc__r%   r#   r#   r#   r$   r      s    r   c                   @  s.   e Zd ZdZdddZdd	d
ZdddZdS )StowawayzLAn object to pickle, so when it is unpickled, it can apply the monkey-patch.rcfilestrreturnNonec                 C  s
   || _ d S )Nr+   )r   r+   r#   r#   r$   __init__B      
zStowaway.__init__Dict[str, str]c                 C  s
   d| j iS Nr+   r/   )r   r#   r#   r$   __getstate__E   r1   zStowaway.__getstate__statec                 C  s   t |d  d S r3   )patch_multiprocessing)r   r5   r#   r#   r$   __setstate__H   s   zStowaway.__setstate__Nr+   r,   r-   r.   )r-   r2   )r5   r2   r-   r.   )r&   r'   r(   r)   r0   r4   r7   r#   r#   r#   r$   r*   @   s
    

r*   r+   r,   r-   r.   c              	     s|   t ttrdS tjt_tjtj	d< zddlm
} |j W n ttfy*   Y nw d fd	d
}||_tttd dS )zMonkey-patch the multiprocessing module.

    This enables coverage measurement of processes started by multiprocessing.
    This involves aggressive monkey-patching.

    `rcfile` is the path to the rcfile being used.

    NCOVERAGE_RCFILEr   )spawnnamer,   r-   Dict[str, Any]c                   s    | }t |d< |S )z@Get the original preparation data, and also insert our stowaway.stowaway)r*   )r;   doriginal_get_preparation_datar+   r#   r$   "get_preparation_data_with_stowawayk   s   zApatch_multiprocessing.<locals>.get_preparation_data_with_stowawayT)r;   r,   r-   r<   )hasattrmultiprocessingPATCHED_MARKERr   r%   OriginalProcessospathabspathenvironr:   get_preparation_dataImportErrorAttributeErrorsetattr)r+   r:   rA   r#   r?   r$   r6   L   s   


r6   r8   )r)   
__future__r   rC   multiprocessing.processrF   os.pathr   r   typingr   r   r   coverage.debugr   rD   processBaseProcessrE   r%   r   r   r*   r6   r#   r#   r#   r$   <module>   s    %