
    /~hb                        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
 ddlmZ dZej                  j                  Zej"                  Z G d de      Z G d	 d
      ZddZy)z>Monkey-patching to add multiprocessing support for coverage.py    )annotationsN)Any)DebugControlz_coverage$patchedc                      e Zd ZdZd Zy)ProcessWithCoveragez<A replacement for multiprocess.Process that starts coverage.c                   d}	 ddl m}  |dd      }d|_        |j                          |j                  }|J |j                  d      r|}|r|j                  d       	 t        | g|i ||r|j                  d       	 |j                          |j!                          |r|j                  d       S S # t        $ r_ t        d	t        j                  
       t        j                  t        j                  
       t        j                  j                           w xY w# t        $ r}|r|j                  d|        d}~ww xY w# |r|j                  d       	 |j                          |j!                          n'# t        $ r}|r|j                  d|        d}~ww xY w|r|j                  d       w w xY 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   s           [/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/coverage/multiproc.py
_bootstrapzProcessWithCoverage._bootstrap   s   %)	)tt<C+0C(IIKZZF%%%}}[)?@	:%d<T<V<@A


 89 #  	D3::VSZZ0JJ		  KK TZ]K^ @A

 KK TZ]K^ 89 sU   AB9 "E  D$9A(D!$	E-EEF=  F F=	F%
F  F%%F=N)__name__
__module____qualname____doc__r%        r$   r   r      s
    F :r+   r   c                  (    e Zd ZdZddZddZddZy)	StowawayzLAn object to pickle, so when it is unpickled, it can apply the monkey-patch.c                    || _         y )Nrcfile)r   r0   s     r$   __init__zStowaway.__init__B   s	    r+   c                    d| j                   iS Nr0   r/   )r   s    r$   __getstate__zStowaway.__getstate__E   s    $++&&r+   c                     t        |d          y r3   )patch_multiprocessing)r   states     r$   __setstate__zStowaway.__setstate__H   s    eHo.r+   Nr0   strreturnNone)r;   dict[str, str])r7   r=   r;   r<   )r&   r'   r(   r)   r1   r4   r8   r*   r+   r$   r-   r-   @   s    V'/r+   r-   c                Z    t        t        t              ryt        j                  t
        _        t        j                  j                         t        j                  d<   	 ddlm
} |j                  d fd}||_        t        t        t        d       y# t        t        f$ r Y 'w xY w)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   )spawnc                4     |       }t              |d<   |S )z@Get the original preparation data, and also insert our stowaway.stowaway)r-   )namedoriginal_get_preparation_datar0   s     r$   "get_preparation_data_with_stowawayzApatch_multiprocessing.<locals>.get_preparation_data_with_stowawayk   s     -d3A$V,AjMHr+   T)rC   r:   r;   zdict[str, Any])hasattrmultiprocessingPATCHED_MARKERr   r%   OriginalProcessospathabspathenvironr@   get_preparation_dataImportErrorAttributeErrorsetattr)r0   r@   rF   rE   s   `  @r$   r6   r6   L   s     /!4!?!?O %'GGOOF$;BJJ !H)(-(B(B%	 &H"O^T2 ( s   "B B*)B*r9   )r)   
__future__r   rH   multiprocessing.processrK   os.pathr   r   typingr   coverage.debugr   rI   processBaseProcessrJ   r%   r   r   r-   r6   r*   r+   r$   <module>rZ      sh    E "   	  
   ' % "))55$// #:/ #:J	/ 	/'3r+   