o
    y?˜Y  ã                   @   sŽ   d Z ddlZddlZddlZddlZddlmZ dZdZej	dkr&ej
jZnejZejZG dd„ deƒZG d	d
„ d
eƒZeed�dd„ ƒZdS )z>Monkey-patching to add multiprocessing support for coverage.pyé    N)Úcontractz_coverage$patchedÚ_COVERAGE_RCFILE©é   é   c                   @   s   e Zd ZdZdd„ ZdS )ÚProcessWithCoveragez<A replacement for multiprocess.Process that starts coverage.c              	   C   sÆ   ddl m} tjt }|d|d�}| ¡  |j}z,| d¡r#| d¡ t	| ƒW | d¡r1| d¡ | 
¡  | ¡  | d¡rD| d¡ S S | d¡rO| d¡ | 
¡  | ¡  | d¡rb| d¡ w w )	z,Wrapper around _bootstrap to start coverage.r   )ÚCoverageT)Údata_suffixÚconfig_fileÚ	multiprocz!Calling multiprocessing bootstrapz"Finished multiprocessing bootstrapzSaved multiprocessing data)Úcoverager   ÚosÚenvironÚCOVERAGE_RCFILE_ENVÚstartÚdebugÚshouldÚwriteÚoriginal_bootstrapÚstopÚsave)Úselfr   ÚrcfileÚcovr   © r   úD/var/www/html/env/lib/python3.10/site-packages/coverage/multiproc.pyÚ
_bootstrap   s.   





ÿ
ü

ÿ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„ Zdd„ Zdd„ ZdS )	ÚStowawayzLAn object to pickle, so when it is unpickled, it can apply the monkey-patch.c                 C   s
   || _ d S )N©r   )r   r   r   r   r   Ú__init__4   ó   
zStowaway.__init__c                 C   s
   d| j iS ©Nr   r"   )r   r   r   r   Ú__getstate__7   r$   zStowaway.__getstate__c                 C   s   t |d ƒ d S r%   )Úpatch_multiprocessing)r   Ústater   r   r   Ú__setstate__:   s   zStowaway.__setstate__N)r   r   r   r    r#   r&   r)   r   r   r   r   r!   2   s
    r!   r"   c              	      s„   t ttƒrdS tjdkrtjt_ntt_ˆt	j
t< zddlm} |j‰ W n ttfy/   Y nw ‡ ‡fdd„}||_tttdƒ dS )zàMonkey-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.

    Nr   r   )Úspawnc                    s   ˆ | ƒ}t ˆƒ|d< |S )z@Get the original preparation data, and also insert our stowaway.Ústowaway)r!   )ÚnameÚd©Úoriginal_get_preparation_datar   r   r   Ú"get_preparation_data_with_stowawaya   s   zApatch_multiprocessing.<locals>.get_preparation_data_with_stowawayT)ÚhasattrÚmultiprocessingÚPATCHED_MARKERÚsysÚversion_infor   r   ÚOriginalProcessÚProcessr   r   r   r*   Úget_preparation_dataÚImportErrorÚAttributeErrorÚsetattr)r   r*   r0   r   r.   r   r'   >   s   




ÿr'   )r    r2   Úmultiprocessing.processr   r4   Úcoverage.miscr   r3   r   r5   ÚprocessÚBaseProcessr6   r7   r   r   r   Úobjectr!   Ústrr'   r   r   r   r   Ú<module>   s    

