
    L-Ph(                    Z   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	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e
egdf         Z G d d          Z G d de          Z  G d de          Z! G d de          Z"dS )zSupport for plugins.    )annotationsN)	FrameType)AnyCallable)IterableIterator)PluginError)isolate_module)CoveragePlugin
FileTracerFileReporter)TArcTConfigurable	TDebugCtlTLineNoTPluginConfigTSourceTokenLinesc                  l    e Zd ZdZ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d'dZd(dZdS ))Pluginsz7The currently loaded collection of coverage.py plugins.NdebugTDebugCtl | NonereturnNonec                h    g | _         i | _        g | _        g | _        g | _        d | _        || _        d S N)ordernamesfile_tracersconfigurerscontext_switcherscurrent_moduler   )selfr   s     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/coverage/plugin_support.py__init__zPlugins.__init__   s;    +-
02
241379*.


    modulesIterable[str]configr   c                    |D ]q}|| _         t          |           t          j        |         }t	          |dd          }|st          d|d          |                    |          } || |           rd| _         dS )z@Load plugin modules, and read their settings from configuration.coverage_initNzPlugin module z' didn't define a coverage_init function)r!   
__import__sysr&   getattrr	   get_plugin_options)r"   r&   r(   modulemodr*   optionss          r#   load_from_configzPlugins.load_from_config'   s      	) 	)F"(Dv+f%C#C$??M  !VVVVV   //77GM$(((("r%   plugin_initsIterable[TCoverageInit]c                &    |D ]} ||            dS )z%Load plugins from callables provided.N )r"   r3   fns      r#   load_from_callableszPlugins.load_from_callables>   s,    
  	 	BBtHHHH	 	r%   pluginr   c                <    |                      || j                   dS )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"   r9   s     r#   add_file_tracerzPlugins.add_file_tracerF   s#     	!233333r%   c                <    |                      || j                   dS )zAdd a configuring plugin.

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

        N)r;   r   r<   s     r#   add_configurerzPlugins.add_configurerO   s#     	!122222r%   c                <    |                      || j                   dS )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)r;   r    r<   s     r#   add_dynamic_contextzPlugins.add_dynamic_contextX   s#     	!788888r%   c                2    |                      |d           dS )zfAdd a plugin that does nothing.

        This is only useful for testing the plugin support.

        N)r;   r<   s     r#   add_noopzPlugins.add_noopa   s      	&&&&&r%   specializedlist[CoveragePlugin] | Nonec                   | j          d|j        j         }| j        rl| j                            d          rR| j                            d| j         d|           t          d| j         | j                  }t          ||          }||_        d|_	        | j
                            |           || j        |<   ||                    |           dS dS )zAdd a plugin object.

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

        .r9   zLoaded plugin z: zplugin TN)r!   	__class____name__r   shouldwriteLabelledDebugDebugPluginWrapper_coverage_plugin_name_coverage_enabledr   appendr   )r"   r9   rD   plugin_namelabelleds        r#   r;   zPlugins._add_plugini   s     ,JJv/?/HJJ: 	:$*++H55 	:JQd.AQQvQQRRR$%Ft/B%F%F
SSH'99F'2$#' 
&!!!"(
;"v&&&&& #"r%   boolc                *    t          | j                  S r   )rS   r   r"   s    r#   __bool__zPlugins.__bool__       DJr%   Iterator[CoveragePlugin]c                *    t          | j                  S r   )iterr   rU   s    r#   __iter__zPlugins.__iter__   rW   r%   rQ   strc                    | j         |         S )zReturn a plugin by name.)r   )r"   rQ   s     r#   getzPlugins.get   s    z+&&r%   r   )r   r   r   r   )r&   r'   r(   r   r   r   )r3   r4   r   r   )r9   r   r   r   )r9   r   rD   rE   r   r   r   rS   )r   rX   )rQ   r\   r   r   )rI   
__module____qualname____doc__r$   r2   r8   r=   r?   rA   rC   r;   rV   r[   r^   r6   r%   r#   r   r      s        AA    # # # #.   4 4 4 43 3 3 39 9 9 9' ' ' '' ' ' '0              ' ' ' ' ' 'r%   r   c                  4    e Zd ZdZddd	ZddZddZddZdS )rL   z?A Debug writer, but with labels for prepending to the messages.r6   labelr\   r   r   prev_labelsr'   c                D    t          |          |gz   | _        || _        d S r   )listlabelsr   )r"   rd   r   re   s       r#   r$   zLabelledDebug.__init__   s#    ;''5'1


r%   r   c                8    t          || j        | j                  S )z<Add a label to the writer, and return a new `LabelledDebug`.)rL   r   rh   )r"   rd   s     r#   	add_labelzLabelledDebug.add_label   s    UDJ<<<r%   c                p    | j         dgz   }d                    d t          |          D                       S )z4The prefix to use on messages, combining the labels. z:
c              3  ,   K   | ]\  }}d |z  |z   V  dS )z  Nr6   ).0ird   s      r#   	<genexpr>z/LabelledDebug.message_prefix.<locals>.<genexpr>   s.      KK81e$q&,KKKKKKr%   )rh   join	enumerate)r"   prefixess     r#   message_prefixzLabelledDebug.message_prefix   s9    ;"%zzKKy7J7JKKKKKKr%   messager   c                f    | j                             |                                  |            dS )z/Write `message`, but with the labels prepended.N)r   rK   rt   )r"   ru   s     r#   rK   zLabelledDebug.write   s5    
D//11<7<<=====r%   N)r6   )rd   r\   r   r   re   r'   )rd   r\   r   rL   r   r\   )ru   r\   r   r   )rI   r`   ra   rb   r$   rj   rt   rK   r6   r%   r#   rL   rL      ss        II    = = = =L L L L
> > > > > >r%   rL   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 )"rM   z:Wrap a plugin, and use debug to report on what it's doing.r9   r   r   rL   r   r   c                d    t                                                       || _        || _        d S r   )superr$   r9   r   )r"   r9   r   rH   s      r#   r$   zDebugPluginWrapper.__init__   s+    


r%   filenamer\   FileTracer | Nonec                    | j                             |          }| j                            d|d|           |r-| j                            d|          }t          ||          }|S )Nzfile_tracer() --> file )r9   file_tracerr   rK   rj   DebugFileTracerWrapper)r"   r{   tracerr   s       r#   r   zDebugPluginWrapper.file_tracer   sx    ((22
DDD&DDEEE 	;J(()=)=)=>>E+FE::Fr%   FileReporter | strc                   | j                             |          }t          |t                    sJ | j                            d|d|           |r.| j                            d|          }t          |||          }|S )Nzfile_reporter(r~   r   )r9   file_reporter
isinstancer   r   rK   rj   DebugFileReporterWrapper)r"   r{   reporterr   s       r#   r   z DebugPluginWrapper.file_reporter   s    ;,,X66(L11111
H(HHHHHIII 	KJ(()=)=)=>>E/(EJJHr%   framer   
str | Nonec                z    | j                             |          }| j                            d|d|           |S )Nzdynamic_context(r~   )r9   dynamic_contextr   rK   )r"   r   contexts      r#   r   z"DebugPluginWrapper.dynamic_context   sC    +--e44
FEFF7FFGGGr%   src_dirr'   c                z    | j                             |          }| j                            d|d|           |S )Nzfind_executable_files(r~   )r9   find_executable_filesr   rK   )r"   r   executable_filess      r#   r   z(DebugPluginWrapper.find_executable_files   sF    ;<<WEE
W'WWCSWWXXXr%   r(   r   c                v    | j                             d|d           | j                            |           d S )Nz
configure())r   rK   r9   	configure)r"   r(   s     r#   r   zDebugPluginWrapper.configure   s@    
1f111222f%%%%%r%   Iterable[tuple[str, Any]]c                4    | j                                         S r   )r9   sys_inforU   s    r#   r   zDebugPluginWrapper.sys_info   s    {##%%%r%   )r9   r   r   rL   r   r   )r{   r\   r   r|   )r{   r\   r   r   )r   r   r   r   )r   r\   r   r'   )r(   r   r   r   )r   r   )rI   r`   ra   rb   r$   r   r   r   r   r   r   __classcell__rH   s   @r#   rM   rM      s        DD     
         
       
& & & && & & & & & & &r%   rM   c                  B    e Zd ZdZddZddZddZddZddZddZ	dS )r   zA debugging `FileTracer`.r   r   r   rL   r   r   c                "    || _         || _        d S r   )r   r   )r"   r   r   s      r#   r$   zDebugFileTracerWrapper.__init__   s    


r%   r   r   r\   c                h    dt           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   s1    GU\566N
 
 	
r%   c                r    | j                                         }| j                            d|           |S )Nzsource_filename() --> )r   source_filenamer   rK   )r"   	sfilenames     r#   r   z&DebugFileTracerWrapper.source_filename   s:    K//11	
?)??@@@r%   rS   c                r    | j                                         }| j                            d|           |S )Nz"has_dynamic_source_filename() --> )r   has_dynamic_source_filenamer   rK   )r"   hass     r#   r   z2DebugFileTracerWrapper.has_dynamic_source_filename   s9    k5577
EcEEFFF
r%   r{   r   c                    | j                             ||          }| j                            d                    ||                     |          |                     |S )Nz*dynamic_source_filename({!r}, {}) --> {!r})r   dynamic_source_filenamer   rK   formatr   )r"   r{   r   dyns       r#   r   z.DebugFileTracerWrapper.dynamic_source_filename   sb    k11(EBB
ELLd&&u--s
 
 	 	 	 
r%   tuple[TLineNo, TLineNo]c                    | j                             |          }| j                            d|                     |           d|           |S )Nzline_number_range(r~   )r   line_number_ranger   rK   r   )r"   r   pairs      r#   r   z(DebugFileTracerWrapper.line_number_range   sQ    {,,U33
Ud.>.>u.E.EUUTUUVVVr%   N)r   r   r   rL   r   r   )r   r   r   r\   rw   r_   )r{   r\   r   r   r   r   )r   r   r   r   )
rI   r`   ra   rb   r$   r   r   r   r   r   r6   r%   r#   r   r      s        ##   
 
 
 
   
   
        r%   r   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`.r{   r\   r   r   r   rL   r   r   c                f    t                                          |           || _        || _        d S r   )rz   r$   r   r   )r"   r{   r   r   rH   s       r#   r$   z!DebugFileReporterWrapper.__init__   s-    """ 


r%   c                r    | j                                         }| j                            d|           |S )Nzrelative_filename() --> )r   relative_filenamer   rK   r"   rets     r#   r   z*DebugFileReporterWrapper.relative_filename   s9    m--//
;C;;<<<
r%   set[TLineNo]c                r    | j                                         }| j                            d|           |S )Nzlines() --> )r   linesr   rK   r   s     r#   r   zDebugFileReporterWrapper.lines  s9    m!!##
///000
r%   c                r    | j                                         }| j                            d|           |S )Nzexcluded_lines() --> )r   excluded_linesr   rK   r   s     r#   r   z'DebugFileReporterWrapper.excluded_lines  s9    m**,,
888999
r%   r   Iterable[TLineNo]c                z    | j                             |          }| j                            d|d|           |S )Nztranslate_lines(r~   )r   translate_linesr   rK   )r"   r   r   s      r#   r   z(DebugFileReporterWrapper.translate_lines  sC    m++E22
BEBB3BBCCC
r%   arcsIterable[TArc]	set[TArc]c                z    | j                             |          }| j                            d|d|           |S )Nztranslate_arcs(r~   )r   translate_arcsr   rK   )r"   r   r   s      r#   r   z'DebugFileReporterWrapper.translate_arcs  sC    m**400
@4@@@@AAA
r%   c                r    | j                                         }| j                            d|           |S )Nzno_branch_lines() --> )r   no_branch_linesr   rK   r   s     r#   r   z(DebugFileReporterWrapper.no_branch_lines  s9    m++--
9#99:::
r%   dict[TLineNo, int]c                r    | j                                         }| j                            d|           |S )Nzexit_counts() --> )r   exit_countsr   rK   r   s     r#   r   z$DebugFileReporterWrapper.exit_counts  s9    m''))
5c55666
r%   c                r    | j                                         }| j                            d|           |S )Nzarcs() --> )r   r   r   rK   r   s     r#   r   zDebugFileReporterWrapper.arcs  s9    m  ""
.s..///
r%   c                    | j                                         }| j                            dt	          |          fz             |S )Nzsource() --> %d chars)r   sourcer   rK   lenr   s     r#   r   zDebugFileReporterWrapper.source$  s>    m""$$
0CHH;>???
r%   r   c                    t          | j                                                  }| j                            dt          |          fz             |S )Nz"source_token_lines() --> %d tokens)rg   r   source_token_linesr   rK   r   r   s     r#   r   z+DebugFileReporterWrapper.source_token_lines)  sF    4=335566
=SKLLL
r%   )r{   r\   r   r   r   rL   r   r   rw   )r   r   )r   r   r   r   )r   r   r   r   )r   r   )r   r   )r   r   )rI   r`   ra   rb   r$   r   r   r   r   r   r   r   r   r   r   r   r   s   @r#   r   r      s       %%     
   
   
   
   
   
   
   
   
   
       r%   r   )#rb   
__future__r   r   os.pathr,   typesr   typingr   r   collections.abcr   r   coverage.exceptionsr	   coverage.miscr
   coverage.pluginr   r   r   coverage.typesr   r   r   r   r   r   r   TCoverageInitrL   rM   r   r   r6   r%   r#   <module>r      s     " " " " " " 				  



                       . . . . . . . . + + + + + + ( ( ( ( ( ( D D D D D D D D D D                ^Bo' o' o' o' o' o' o' o'd 'D)> > > > > > > >*(& (& (& (& (& (& (& (&V" " " " "Z " " "J8 8 8 8 8| 8 8 8 8 8r%   