o
    v&i                     @  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mZ ddl	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZmZ e
rRdd	lmZ dd
lmZ ddlmZ ddd(ddZd)ddZd*ddZd+ddZd,d d!Zd"Zd#ed$Z e fd-d&d'Z!dS ).z!Invasive patches for coverage.py.    )annotationsN)Path)TYPE_CHECKINGAnyNoReturn)env)NoDebuggingDevNullDebug)ConfigErrorCoverageException)Coverage)CoverageConfig)	TDebugCtlT)make_pth_filecovr   configr   debugr   r   boolreturnNonec                C  s   | dr|nt }tt|jD ]5}| dkr t| | q dkr+ t| || q dkr5 t| qdkr?t||| q	 t	d|dS )z3Apply invasive patches requested by `[run] patch=`.patch_exitexecvfork
subprocesszUnknown patch N)
shouldr	   sortedsetr   _patch__exit_patch_execv_patch_fork_patch_subprocessr
   )r   r   r   r   r    r"   T/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/coverage/patch.pyapply_patches   s   



r$   c                   s,    d tjd	 fdd}|t_dS )
zPatch os._exit.zPatching _exitstatusintr   r   c                   sx   t t d  W d    n1 sw   Y  t t    W d    n1 s1w   Y  |  d S )NzUsing _exit patch with cov = )
contextlibsuppress	Exceptionwritesave)r%   r   r   old_exitr"   r#   coverage_os_exit_patch:   s   
z,_patch__exit.<locals>.coverage_os_exit_patchN)r%   r&   r   r   )r*   osr   )r   r   r.   r"   r,   r#   r   4   s   

r   c                   sJ   t jrtdd d fdd	}|d
tjt_|dtjt_dS )z$Patch the execv family of functions.z+patch=execv isn't supported yet on Windows.zPatching execvfnamestr	old_execvr   r   c                   s   d fdd}|S )Nargsr   kwargsr   c                    s   t t d d W d    n1 sw   Y  t t   W d    n1 s4w   Y  drf| d }  |d< tjrft	
d|d< t	
d }d ur_||d< t	
d|d< | i | d S )	NzUsing execv patch for z with cov = eCOVERAGE_PROCESS_CONFIGCOVERAGE_COREPYTHONPYCACHEPREFIXPATH)r'   r(   r)   r*   r+   endswith	serializer   TESTINGr/   getenv)r3   r4   new_envcache_prefix)r   r   r   r0   r2   r"   r#   coverage_execv_patchL   s   

zD_patch_execv.<locals>.make_execv_patch.<locals>.coverage_execv_patch)r3   r   r4   r   r   r   r"   )r0   r2   rA   r   r   r   )r0   r2   r#   make_execv_patchK   s   z&_patch_execv.<locals>.make_execv_patchr   execveN)r0   r1   r2   r   r   r   )r   WINDOWSr   r*   r/   r   rD   )r   r   r   rC   r"   rB   r#   r   D   s   
r   c                 C  s4   ddl m} tjrtd| d tj|d dS )z/Ensure Coverage is properly reset after a fork.r   )_after_fork_in_childz*patch=fork isn't supported yet on Windows.zPatching fork)after_in_childN)coverage.controlrF   r   rE   r   r*   r/   register_at_fork)r   rF   r"   r"   r#   r    l   s
   
r    c                   sP     d |rt d fdd}t| | jdusJ |  tjd< dS )	zBWrite .pth files and set environment vars to measure subprocesses.zPatching subprocessr   r   c                    s.   D ]}   dt|  | jdd qd S )NzDeleting subprocess .pth file: T)
missing_ok)r*   r1   unlink)pr   	pth_filesr"   r#   delete_pth_files~   s   z+_patch_subprocess.<locals>.delete_pth_filesNr7   )r   r   )r*   create_pth_filesatexitregisterconfig_filer<   r/   environ)r   r   r   rO   r"   rM   r#   r!   w   s   

r!   zOtry:
    import coverage
except:
    pass
else:
    coverage.process_startup()
zimport sys; exec(z)

list[Path]c              	   C  s|   g }t  D ]5}t|dt  d }z| dr$| dt| |jt	dd W n	 t
y5   Y qw || q|S )z-Create .pth files for measuring subprocesses.	subcover_z.pthr   zWriting subprocess .pth file: zutf-8)encoding)sitegetsitepackagesr   r/   getpidr   r*   r1   
write_textPTH_TEXTOSErrorappend)r   rN   pth_dirpth_filer"   r"   r#   rP      s   
rP   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   rU   )"__doc__
__future__r   rQ   r'   r/   rX   pathlibr   typingr   r   r   coverager   coverage.debugr   r	   coverage.exceptionsr
   r   r   coverage.configr   coverage.typesr   r$   r   r   r    r!   PTH_CODEr\   rP   r"   r"   r"   r#   <module>   s0   


(
	