
    /~hG(                       d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZmZmZmZmZmZ  ee      Z G d d      Z G d d      Z G d de      Z G d de      Z G d de      Z y)zSupport for plugins.    )annotationsN)	FrameType)Any)IterableIterator)PluginError)isolate_module)CoveragePlugin
FileTracerFileReporter)TArcTConfigurable	TDebugCtlTLineNoTPluginConfigTSourceTokenLinesc                      e Zd ZdZddZe	 d	 	 	 	 	 	 	 dd       ZddZddZddZ	ddZ
	 	 	 	 	 	 dd	Zdd
ZddZddZy)Pluginsz7The currently loaded collection of coverage.py plugins.c                \    g | _         i | _        g | _        g | _        g | _        d | _        |  y N)ordernamesfile_tracersconfigurerscontext_switcherscurrent_moduleselfs    `/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/coverage/plugin_support.py__init__zPlugins.__init__   s3    +-
02
241379*.    Nc                     |        }||_         |D ]_  }||_        t        |       t        j                  |   }t        |dd      }|st        d|d      |j                  |      } |||       a d|_        |S )zpLoad plugins from `modules`.

        Returns a Plugins object with the loaded and configured plugins.

        coverage_initNzPlugin module z' didn't define a coverage_init function)debugr   
__import__sysmodulesgetattrr   get_plugin_options)	clsr'   configr$   pluginsmodulemodr#   optionss	            r   load_pluginszPlugins.load_plugins'   s     % 	,F%+G"v++f%C#C$?M !$VJ.UV  //7G'7+	, "&r!   c                <    | j                  || j                         y)zAdd a file tracer plugin.

        `plugin` is an instance of a third-party plugin class.  It must
        implement the :meth:`CoveragePlugin.file_tracer` method.

        N)_add_pluginr   r   plugins     r   add_file_tracerzPlugins.add_file_tracerG   s     	!2!23r!   c                <    | j                  || j                         y)zAdd a configuring plugin.

        `plugin` is an instance of a third-party plugin class. It must
        implement the :meth:`CoveragePlugin.configure` method.

        N)r2   r   r3   s     r   add_configurerzPlugins.add_configurerP   s     	!1!12r!   c                <    | j                  || j                         y)zAdd a dynamic context plugin.

        `plugin` is an instance of a third-party plugin class.  It must
        implement the :meth:`CoveragePlugin.dynamic_context` method.

        N)r2   r   r3   s     r   add_dynamic_contextzPlugins.add_dynamic_contextY   s     	!7!78r!   c                (    | j                  |d       y)zfAdd a plugin that does nothing.

        This is only useful for testing the plugin support.

        N)r2   r3   s     r   add_noopzPlugins.add_noopb   s     	&r!   c                   | j                    d|j                  j                   }| j                  ru| j                  j	                  d      rZ| j                  j                  d| j                   d|       t        d| j                   | j                        }t        ||      }||_        d|_	        | j                  j                  |       || j                  |<   ||j                  |       yy)zAdd a plugin object.

        `plugin` is a :class:`CoveragePlugin` instance to add.  `specialized`
        is a list to append the plugin to.

        .r4   zLoaded plugin z: zplugin TN)r   	__class____name__r$   shouldwriteLabelledDebugDebugPluginWrapper_coverage_plugin_name_coverage_enabledr   appendr   )r   r4   specializedplugin_namelabelleds        r   r2   zPlugins._add_pluginj   s     ,,-Qv/?/?/H/H.IJ::$**++H5JJ~d.A.A-DBvjQR$wt/B/B.E%F

SH'9F'2$#' 

&!"(

;"v& #r!   c                ,    t        | j                        S r   )boolr   r   s    r   __bool__zPlugins.__bool__       DJJr!   c                ,    t        | j                        S r   )iterr   r   s    r   __iter__zPlugins.__iter__   rM   r!   c                     | j                   |   S )zReturn a plugin by name.)r   )r   rH   s     r   getzPlugins.get   s    zz+&&r!   )returnNoner   )r'   Iterable[str]r+   r   r$   zTDebugCtl | NonerS   r   )r4   r
   rS   rT   )r4   r
   rG   zlist[CoveragePlugin] | NonerS   rT   rS   rK   )rS   zIterator[CoveragePlugin])rH   strrS   r
   )r?   
__module____qualname____doc__r    classmethodr0   r5   r7   r9   r;   r2   rL   rP   rR    r!   r   r   r      s    A% 
 #'	   	
 
 >439''' 1' 
	'0  'r!   r   c                  2    e Zd ZdZdddZd	dZd
dZddZy)rB   z?A Debug writer, but with labels for prepending to the messages.c                :    t        |      |gz   | _        || _        y r   )listlabelsr$   )r   labelr$   prev_labelss       r   r    zLabelledDebug.__init__   s    ;'5'1
r!   c                D    t        || j                  | j                        S )z<Add a label to the writer, and return a new `LabelledDebug`.)rB   r$   r`   )r   ra   s     r   	add_labelzLabelledDebug.add_label   s    UDJJ<<r!   c                d    | j                   dgz   }dj                  d t        |      D              S )z4The prefix to use on messages, combining the labels. z:
c              3  2   K   | ]  \  }}d |z  |z     yw)z  Nr\   ).0ira   s      r   	<genexpr>z/LabelledDebug.message_prefix.<locals>.<genexpr>   s     K81e$q&,Ks   )r`   join	enumerate)r   prefixess     r   message_prefixzLabelledDebug.message_prefix   s,    ;;"%zzKy7JKKKr!   c                ^    | j                   j                  | j                          |        y)z/Write `message`, but with the labels prepended.N)r$   rA   rn   )r   messages     r   rA   zLabelledDebug.write   s'    

D//127)<=r!   N)r\   )ra   rW   r$   r   rb   rU   )ra   rW   rS   rB   rS   rW   )rp   rW   rS   rT   )r?   rX   rY   rZ   r    rd   rn   rA   r\   r!   r   rB   rB      s    I=L
>r!   rB   c                  T     e Zd ZdZd	 fdZd
dZddZddZddZddZ	ddZ
 xZS )rC   z:Wrap a plugin, and use debug to report on what it's doing.c                >    t         |           || _        || _        y r   )superr    r4   r$   )r   r4   r$   r>   s      r   r    zDebugPluginWrapper.__init__   s    
r!   c                    | j                   j                  |      }| j                  j                  d|d|       |r*| j                  j	                  d|      }t        ||      }|S )Nzfile_tracer() --> file )r4   file_tracerr$   rA   rd   DebugFileTracerWrapper)r   filenametracerr$   s       r   rx   zDebugPluginWrapper.file_tracer   sd    ((2

<|6&DEJJ((5)=>E+FE:Fr!   c                    | j                   j                  |      }t        |t              sJ | j                  j                  d|d|       |r+| j                  j                  d|      }t        |||      }|S )Nzfile_reporter(rv   rw   )r4   file_reporter
isinstancer   r$   rA   rd   DebugFileReporterWrapper)r   rz   reporterr$   s       r   r}   z DebugPluginWrapper.file_reporter   sv    ;;,,X6(L111

>(VH<HIJJ((5)=>E/(EJHr!   c                ~    | j                   j                  |      }| j                  j                  d|d|       |S )Nzdynamic_context(rv   )r4   dynamic_contextr$   rA   )r   framecontexts      r   r   z"DebugPluginWrapper.dynamic_context   s;    ++--e4

+E9F7+FGr!   c                ~    | j                   j                  |      }| j                  j                  d|d|       |S )Nzfind_executable_files(rv   )r4   find_executable_filesr$   rA   )r   src_direxecutable_filess      r   r   z(DebugPluginWrapper.find_executable_files   s?    ;;<<WE

1'FCSBVWXr!   c                x    | j                   j                  d|d       | j                  j                  |       y )Nz
configure())r$   rA   r4   	configure)r   r+   s     r   r   zDebugPluginWrapper.configure   s/    

:fZq12f%r!   c                6    | j                   j                         S r   )r4   sys_infor   s    r   r   zDebugPluginWrapper.sys_info   s    {{##%%r!   )r4   r
   r$   rB   rS   rT   )rz   rW   rS   zFileTracer | None)rz   rW   rS   zFileReporter | str)r   r   rS   
str | None)r   rW   rS   rU   )r+   r   rS   rT   )rS   zIterable[tuple[str, Any]])r?   rX   rY   rZ   r    rx   r}   r   r   r   r   __classcell__r>   s   @r   rC   rC      s)    D

 
&&r!   rC   c                  @    e Zd ZdZd	dZd
dZddZddZddZddZ	y)ry   zA debugging `FileTracer`.c                     || _         || _        y r   )r{   r$   )r   r{   r$   s      r   r    zDebugFileTracerWrapper.__init__   s    
r!   c                    dt         j                  j                  |j                  j                        |j
                  fz  S )z7A short string identifying a frame, for debug messages.z%s@%d)ospathbasenamef_codeco_filenamef_lineno)r   r   s     r   _show_framez"DebugFileTracerWrapper._show_frame   s7    GGU\\556NN
 
 	
r!   c                v    | j                   j                         }| j                  j                  d|       |S )Nzsource_filename() --> )r{   source_filenamer$   rA   )r   	sfilenames     r   r   z&DebugFileTracerWrapper.source_filename   s4    KK//1	

1)?@r!   c                v    | j                   j                         }| j                  j                  d|       |S )Nz"has_dynamic_source_filename() --> )r{   has_dynamic_source_filenamer$   rA   )r   hass     r   r   z2DebugFileTracerWrapper.has_dynamic_source_filename   s3    kk557

=cWEF
r!   c                    | j                   j                  ||      }| j                  j                  dj	                  || j                  |      |             |S )Nz*dynamic_source_filename({!r}, {}) --> {!r})r{   dynamic_source_filenamer$   rA   formatr   )r   rz   r   dyns       r   r   z.DebugFileTracerWrapper.dynamic_source_filename   sQ    kk11(EB

ELLd&&u-s
 	 
r!   c                    | j                   j                  |      }| j                  j                  d| j	                  |       d|       |S )Nzline_number_range(rv   )r{   line_number_ranger$   rA   r   )r   r   pairs      r   r   z(DebugFileTracerWrapper.line_number_range   sG    {{,,U3

-d.>.>u.E-FfTHUVr!   N)r{   r   r$   rB   rS   rT   )r   r   rS   rW   rq   rV   )rz   rW   r   r   rS   r   )r   r   rS   ztuple[TLineNo, TLineNo])
r?   rX   rY   rZ   r    r   r   r   r   r   r\   r!   r   ry   ry      s#    #


r!   ry   c                  t     e Zd ZdZd fdZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZ xZS )r   zA debugging `FileReporter`.c                @    t         |   |       || _        || _        y r   )rt   r    r   r$   )r   rz   r   r$   r>   s       r   r    z!DebugFileReporterWrapper.__init__   s    " 
r!   c                v    | j                   j                         }| j                  j                  d|       |S )Nzrelative_filename() --> )r   relative_filenamer$   rA   r   rets     r   r   z*DebugFileReporterWrapper.relative_filename   s3    mm--/

3C7;<
r!   c                v    | j                   j                         }| j                  j                  d|       |S )Nzlines() --> )r   linesr$   rA   r   s     r   r   zDebugFileReporterWrapper.lines   s2    mm!!#

<w/0
r!   c                v    | j                   j                         }| j                  j                  d|       |S )Nzexcluded_lines() --> )r   excluded_linesr$   rA   r   s     r   r   z'DebugFileReporterWrapper.excluded_lines  s3    mm**,

089
r!   c                ~    | j                   j                  |      }| j                  j                  d|d|       |S )Nztranslate_lines(rv   )r   translate_linesr$   rA   )r   r   r   s      r   r   z(DebugFileReporterWrapper.translate_lines	  s;    mm++E2

+E9F3'BC
r!   c                ~    | j                   j                  |      }| j                  j                  d|d|       |S )Nztranslate_arcs(rv   )r   translate_arcsr$   rA   )r   arcsr   s      r   r   z'DebugFileReporterWrapper.translate_arcs  s:    mm**40

?4(&@A
r!   c                v    | j                   j                         }| j                  j                  d|       |S )Nzno_branch_lines() --> )r   no_branch_linesr$   rA   r   s     r   r   z(DebugFileReporterWrapper.no_branch_lines  s3    mm++-

1#9:
r!   c                v    | j                   j                         }| j                  j                  d|       |S )Nzexit_counts() --> )r   exit_countsr$   rA   r   s     r   r   z$DebugFileReporterWrapper.exit_counts  s3    mm'')

-cW56
r!   c                v    | j                   j                         }| j                  j                  d|       |S )Nzarcs() --> )r   r   r$   rA   r   s     r   r   zDebugFileReporterWrapper.arcs  s2    mm  "

;sg./
r!   c                    | j                   j                         }| j                  j                  dt	        |      fz         |S )Nzsource() --> %d chars)r   sourcer$   rA   lenr   s     r   r   zDebugFileReporterWrapper.source"  s7    mm""$

0CH;>?
r!   c                    t        | j                  j                               }| j                  j	                  dt        |      fz         |S )Nz"source_token_lines() --> %d tokens)r_   r   source_token_linesr$   rA   r   r   s     r   r   z+DebugFileReporterWrapper.source_token_lines'  s<    4==3356

=SKL
r!   )rz   rW   r   r   r$   rB   rS   rT   rq   )rS   set[TLineNo])r   zIterable[TLineNo]rS   r   )r   zIterable[TArc]rS   	set[TArc])rS   zdict[TLineNo, int])rS   r   )rS   r   )r?   rX   rY   rZ   r    r   r   r   r   r   r   r   r   r   r   r   r   s   @r   r   r      s=    %









r!   r   )!rZ   
__future__r   r   os.pathr&   typesr   typingr   collections.abcr   r   coverage.exceptionsr   coverage.miscr	   coverage.pluginr
   r   r   coverage.typesr   r   r   r   r   r   r   rB   rC   ry   r   r\   r!   r   <module>r      s~     " 	  
   . + ( D D  Bp' p'f> >*(& (&V"Z "J8| 8r!   