o
    i&                     @   s  U d dl mZ d dl mZ d dlZd dlmZ d dlmZ zd dl	Z	d dl	m
Z
 W n ey6   dZ	dZ
Y nw eeZdZdaee ed< daee ed	< d
efddZd
eeef fddZdd Zdd Zdd Zdedededed
ef
ddZdCdedee ded
ee fddZdDd d!Z				"	#	dEd$ed%ed&ed'ed(ed)ee ded
ee fd*d+ZdFd,ed-ed
ee fd.d/Z d
ee fd0d1Z!d2ed
dfd3d4Z"dDd5d6Z#dDd7d8Z$d
efd9d:Z%dGdee ded
ee fd;d<Z&d
ee fd=d>Z'd
eeef fd?d@Z(dDdAdBZ)dS )H    )Any)OptionalN)
get_logger)unwrap)Coveragepct_covered_coverage_instance_cached_coverage_percentagereturnc                   C   s   dS )N  r   r   r   [/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/coverage/patch.pyget_version   s   r   c                   C   s   ddiS )Ncoverage*r   r   r   r   r   _supported_versions       r   c                   C   s0   t du s
tt ddrdS dt _tt dt dS )zLPatch Coverage.py to capture coverage percentage when reports are generated.N_datadog_patchFTzCoverage.report)r   getattrr   wraptwrap_function_wrappercoverage_report_wrapperr   r   r   r   patch$   s   r   c                   C   s.   t du s
tt ddsdS tt jd dt _dS )zRemove Coverage.py patching.Nr   Freport)r   r   _ur   r   r   r   r   r   unpatch-   s   
r   c                   C   s   t d uS N)r   r   r   r   r   _is_coverage_available6   r   r   funcinstanceargskwargsc                 C   s   | |i |}|a |S )z4Wrapper to cache percentage when report() is called.r	   )r   r   r    r!   r   r   r   r   r   :   s   r   textformat_typecovc              
   K   s   t du rdS |du rt }|du rtd dS z| dkr&|jdi |}n|jdi |}|dur4|a|W S  tyO } ztd| W Y d}~dS d}~ww )aF  
    Generate a coverage report in the specified format.

    Args:
        format_type: Type of report to generate ("text", "lcov")
        cov: Coverage instance (defaults to current instance)
        **kwargs: Additional arguments for the report method

    Returns:
        Coverage percentage, or None if unavailable
    NzNo coverage instance availablelcovz8An exception occurred when running a coverage report: %sr   )	r   get_coverage_instancelogdebuglcov_reportr   r	   	Exceptionwarning)r$   r%   r!   r   er   r   r   generate_coverage_reportC   s&   
r.   c                   C   s   t d dS )zGRun a coverage report on the current instance (backward compatibility).r#   Nr.   r   r   r   r   run_coverage_reporti   s   r0   TFsourceomitincludeconfig_file	auto_datadata_suffixc           
   
   K   s   t du rtd dS zt  }|dur td t| |W S W n ty1   tjddd Y nw zt d
| |||||d|}|  t| td |W S  tyk }	 ztjd	|	dd W Y d}	~	dS d}	~	ww )a  
    Start coverage collection.

    Args:
        source: List of file paths or package names to measure
        omit: List of file paths to omit
        include: List of file paths to include
        config_file: Path to .coveragerc, or True for default, or False to disable
        auto_data: If True, save data automatically at exit
        data_suffix: Suffix for the data file
        **kwargs: Additional arguments for Coverage()

    Returns:
        The Coverage instance, or None if coverage.py is not available
    Nzcoverage.py is not availablezCoverage is already runningz!Failed to access running coverageTexc_info)r1   r2   r3   r4   r5   r6   zStarted coverage collectionzFailed to start coverage: %sr   )r   r(   r)   currentset_coverage_instancer+   startr,   )
r1   r2   r3   r4   r5   r6   r!   existingr%   r-   r   r   r   start_coverages   sB   

	
r=   saveerasec              
   C   s   t du rdS t }|du rtd dS z|  | r|  |r(|  t  td| | |W S  tyL } ztj	d|dd W Y d}~dS d}~ww )z
    Stop coverage collection.

    Args:
        save: If True, save the collected data
        erase: If True, erase the data after stopping

    Returns:
        The Coverage instance, or None if not running
    NzNo coverage instance is runningz$Stopped coverage (save=%s, erase=%s)zFailed to stop coverage: %sTr7   )
r   r'   r(   r)   stopr>   r?   reset_coverage_stater+   r,   )r>   r?   r%   r-   r   r   r   stop_coverage   s(   
rB   c               
   C   sV   t du rdS tdurtS zt W S  ty* }  ztd|  W Y d} ~ dS d} ~ ww )zr
    Get the current Coverage instance.

    Returns:
        The Coverage instance, or None if not available
    Nz#Failed to get coverage instance: %s)r   r   r   r9   r+   r(   r)   )r-   r   r   r   r'      s   
r'   cov_instancec                 C   s   | a td dS )zj
    Set the current coverage instance.

    Args:
        cov_instance: The coverage instance to set
    zSet coverage instanceN)r   r(   r)   )rC   r   r   r   r:      s   r:   c                   C   s   da datd dS )z#
    Reset all coverage state.
    NzReset coverage state)r   r	   r(   r)   r   r   r   r   rA      s   rA   c                   C   s
   t   dS )zb
    Clear the coverage instance (alias for reset_coverage_state for backward compatibility).
    N)rA   r   r   r   r   clear_coverage_instance   s   
rD   c                   C   s
   t  d uS r   )r'   r   r   r   r   is_coverage_running  s   
rE   c                 K   s   t d| fi |S )Nr&   r/   )r%   r!   r   r   r   generate_lcov_report  s   rF   c                   C   s   t S )z8Get the cached coverage percentage from the last report.r"   r   r   r   r   get_coverage_percentage  s   rG   c                   C   s   t durtt iS i S )z
    Get coverage metadata dict (for backwards compatibility).

    Returns a dict with PCT_COVERED_KEY if percentage is cached.
    N)r	   PCT_COVERED_KEYr   r   r   r   get_coverage_data  s   rI   c               
   C   sR   t  } | r$z|   W n ty# } ztd| W Y d}~nd}~ww t  dS )z,Erase all coverage data and clear the cache.zFailed to erase coverage: %sN)r'   r?   r+   r(   r,   rA   )r%   r-   r   r   r   erase_coverage  s   
rJ   )r#   N)r
   N)NNNTFN)TFr   )*typingr   r   r   ddtrace.internal.loggerr   ddtrace.internal.utils.wrappersr   r   r   r   ImportError__name__r(   rH   r   __annotations__r	   floatstrr   dictr   r   r   r   tupler   r.   r0   boolr=   rB   r'   r:   rA   rD   rE   rF   rG   rI   rJ   r   r   r   r   <module>   sr    		$	
&
;"


 