o
    go(                     @  s  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
mZmZmZmZmZ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 dZ!G dd dZ"G dd deZ#G dd deZ$G dd deZ%dS )zSupport for plugins.    )annotationsN)	FrameType)	AnyDictIterableIteratorListOptionalSetTupleUnion)PluginError)isolate_module)CoveragePlugin
FileTracerFileReporter)TArcTConfigurable	TDebugCtlTLineNoTPluginConfigTSourceTokenLinesc                   @  s|   e Zd ZdZd'ddZe	d(d)ddZd*ddZd*ddZd*ddZ	d*ddZ
d+ddZd,ddZd-d!d"Zd.d%d&ZdS )/Pluginsz7The currently loaded collection of coverage.py plugins.returnNonec                 C  s,   g | _ i | _g | _g | _g | _d | _|  d S N)ordernamesfile_tracersconfigurerscontext_switcherscurrent_moduleself r$   W/var/www/html/bloggers_ems/venv/lib/python3.10/site-packages/coverage/plugin_support.py__init__   s   zPlugins.__init__NmodulesIterable[str]configr   debugOptional[TDebugCtl]c           	      C  sl   |  }||_ |D ](}||_t| tj| }t|dd}|s&td|d||}||| q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)r*   r!   
__import__sysr'   getattrr   get_plugin_options)	clsr'   r)   r*   pluginsmodulemodr,   optionsr$   r$   r%   load_plugins&   s   


zPlugins.load_pluginspluginr   c                 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#   r7   r$   r$   r%   add_file_tracerF      zPlugins.add_file_tracerc                 C  r8   )zAdd a configuring plugin.

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

        N)r9   r   r:   r$   r$   r%   add_configurerO   r<   zPlugins.add_configurerc                 C  r8   )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)r9   r    r:   r$   r$   r%   add_dynamic_contextX   r<   zPlugins.add_dynamic_contextc                 C  s   |  |d dS )zfAdd a plugin that does nothing.

        This is only useful for testing the plugin support.

        N)r9   r:   r$   r$   r%   add_noopa   s   zPlugins.add_noopspecializedOptional[List[CoveragePlugin]]c                 C  s   | j  d|jj }| jr/| jdr/| jd| j d| td| j | j}t||}||_d|_	| j
| || j|< |durK|| 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.

        .r7   zLoaded plugin z: zplugin TN)r!   	__class____name__r*   shouldwriteLabelledDebugDebugPluginWrapper_coverage_plugin_name_coverage_enabledr   appendr   )r#   r7   r@   plugin_namelabelledr$   r$   r%   r9   i   s   

zPlugins._add_pluginboolc                 C  
   t | jS r   )rN   r   r"   r$   r$   r%   __bool__      
zPlugins.__bool__Iterator[CoveragePlugin]c                 C  rO   r   )iterr   r"   r$   r$   r%   __iter__   rQ   zPlugins.__iter__rL   strc                 C  s
   | j | S )zReturn a plugin by name.)r   )r#   rL   r$   r$   r%   get   s   
zPlugins.get)r   r   r   )r'   r(   r)   r   r*   r+   r   r   )r7   r   r   r   )r7   r   r@   rA   r   r   r   rN   )r   rR   )rL   rU   r   r   )rD   
__module____qualname____doc__r&   classmethodr6   r;   r=   r>   r?   r9   rP   rT   rV   r$   r$   r$   r%   r      s    



	
	
	


r   c                   @  s:   e Zd ZdZddd	d
ZdddZdddZdddZdS )rG   z?A Debug writer, but with labels for prepending to the messages.r$   labelrU   r*   r   prev_labelsr(   c                 C  s   t ||g | _|| _d S r   )listlabelsr*   )r#   r\   r*   r]   r$   r$   r%   r&      s   
zLabelledDebug.__init__r   c                 C  s   t || j| jS )z<Add a label to the writer, and return a new `LabelledDebug`.)rG   r*   r_   )r#   r\   r$   r$   r%   	add_label   s   zLabelledDebug.add_labelc                 C  s$   | j dg }ddd t|D S )z4The prefix to use on messages, combining the labels. z:
c                 s  s     | ]\}}d | | V  qdS )z  Nr$   ).0ir\   r$   r$   r%   	<genexpr>   s    z/LabelledDebug.message_prefix.<locals>.<genexpr>)r_   join	enumerate)r#   prefixesr$   r$   r%   message_prefix   s   zLabelledDebug.message_prefixmessager   c                 C  s   | j |   |  dS )z/Write `message`, but with the labels prepended.N)r*   rF   rh   )r#   ri   r$   r$   r%   rF      s   zLabelledDebug.writeN)r$   )r\   rU   r*   r   r]   r(   )r\   rU   r   rG   r   rU   )ri   rU   r   r   )rD   rX   rY   rZ   r&   r`   rh   rF   r$   r$   r$   r%   rG      s    

rG   c                      s^   e Zd ZdZd" fdd	Zd#ddZd$ddZd%ddZd&ddZd'ddZ	d(d d!Z
  ZS ))rH   z:Wrap a plugin, and use debug to report on what it's doing.r7   r   r*   rG   r   r   c                   s   t    || _|| _d S r   )superr&   r7   r*   )r#   r7   r*   rC   r$   r%   r&      s   

zDebugPluginWrapper.__init__filenamerU   Optional[FileTracer]c                 C  sH   | j |}| jd|d| |r"| jd|}t||}|S )Nzfile_tracer() --> file )r7   file_tracerr*   rF   r`   DebugFileTracerWrapper)r#   rm   tracerr*   r$   r$   r%   rq      s   
zDebugPluginWrapper.file_tracerUnion[FileReporter, str]c                 C  sX   | j |}t|tsJ | jd|d| |r*| jd|}t|||}|S )Nzfile_reporter(ro   rp   )r7   file_reporter
isinstancer   r*   rF   r`   DebugFileReporterWrapperr#   rm   reporterr*   r$   r$   r%   ru      s   z DebugPluginWrapper.file_reporterframer   Optional[str]c                 C  (   | j |}| jd|d| |S )Nzdynamic_context(ro   )r7   dynamic_contextr*   rF   )r#   rz   contextr$   r$   r%   r}         z"DebugPluginWrapper.dynamic_contextsrc_dirr(   c                 C  r|   )Nzfind_executable_files(ro   )r7   find_executable_filesr*   rF   )r#   r   executable_filesr$   r$   r%   r      r   z(DebugPluginWrapper.find_executable_filesr)   r   c                 C  s$   | j d|d | j| d S )Nz
configure())r*   rF   r7   	configure)r#   r)   r$   r$   r%   r      s   zDebugPluginWrapper.configureIterable[Tuple[str, Any]]c                 C  s
   | j  S r   )r7   sys_infor"   r$   r$   r%   r      rQ   zDebugPluginWrapper.sys_info)r7   r   r*   rG   r   r   )rm   rU   r   rn   )rm   rU   r   rt   )rz   r   r   r{   )r   rU   r   r(   )r)   r   r   r   )r   r   )rD   rX   rY   rZ   r&   rq   ru   r}   r   r   r   __classcell__r$   r$   rl   r%   rH      s    


	

rH   c                   @  sL   e Zd ZdZddd	ZdddZdddZdddZd ddZd!ddZ	dS )"rr   zA debugging `FileTracer`.rs   r   r*   rG   r   r   c                 C  s   || _ || _d S r   )rs   r*   )r#   rs   r*   r$   r$   r%   r&      s   
zDebugFileTracerWrapper.__init__rz   r   rU   c                 C  s   dt j|jj|jf S )z7A short string identifying a frame, for debug messages.z%s@%d)ospathbasenamef_codeco_filenamef_lineno)r#   rz   r$   r$   r%   _show_frame   s   z"DebugFileTracerWrapper._show_framec                 C      | j  }| jd| |S )Nzsource_filename() --> )rs   source_filenamer*   rF   )r#   	sfilenamer$   r$   r%   r         
z&DebugFileTracerWrapper.source_filenamerN   c                 C  r   )Nz"has_dynamic_source_filename() --> )rs   has_dynamic_source_filenamer*   rF   )r#   hasr$   r$   r%   r      r   z2DebugFileTracerWrapper.has_dynamic_source_filenamerm   r{   c                 C  s.   | j ||}| jd|| || |S )Nz*dynamic_source_filename({!r}, {}) --> {!r})rs   dynamic_source_filenamer*   rF   formatr   )r#   rm   rz   dynr$   r$   r%   r      s
   
z.DebugFileTracerWrapper.dynamic_source_filenameTuple[TLineNo, TLineNo]c                 C  s.   | j |}| jd| | d| |S )Nzline_number_range(ro   )rs   line_number_ranger*   rF   r   )r#   rz   pairr$   r$   r%   r      s   z(DebugFileTracerWrapper.line_number_rangeN)rs   r   r*   rG   r   r   )rz   r   r   rU   rj   rW   )rm   rU   rz   r   r   r{   )rz   r   r   r   )
rD   rX   rY   rZ   r&   r   r   r   r   r   r$   r$   r$   r%   rr      s    




rr   c                      s   e Zd ZdZd( fd
dZd)ddZd*ddZd*ddZd+ddZd,ddZ	d*ddZ
d-dd Zd.d!d"Zd)d#d$Zd/d&d'Z  ZS )0rw   zA debugging `FileReporter`.rm   rU   ry   r   r*   rG   r   r   c                   s   t  | || _|| _d S r   )rk   r&   ry   r*   rx   rl   r$   r%   r&      s   
z!DebugFileReporterWrapper.__init__c                 C  r   )Nzrelative_filename() --> )ry   relative_filenamer*   rF   r#   retr$   r$   r%   r      r   z*DebugFileReporterWrapper.relative_filenameSet[TLineNo]c                 C  r   )Nzlines() --> )ry   linesr*   rF   r   r$   r$   r%   r      r   zDebugFileReporterWrapper.linesc                 C  r   )Nzexcluded_lines() --> )ry   excluded_linesr*   rF   r   r$   r$   r%   r     r   z'DebugFileReporterWrapper.excluded_linesr   Iterable[TLineNo]c                 C  r|   )Nztranslate_lines(ro   )ry   translate_linesr*   rF   )r#   r   r   r$   r$   r%   r     r   z(DebugFileReporterWrapper.translate_linesarcsIterable[TArc]	Set[TArc]c                 C  r|   )Nztranslate_arcs(ro   )ry   translate_arcsr*   rF   )r#   r   r   r$   r$   r%   r     r   z'DebugFileReporterWrapper.translate_arcsc                 C  r   )Nzno_branch_lines() --> )ry   no_branch_linesr*   rF   r   r$   r$   r%   r     r   z(DebugFileReporterWrapper.no_branch_linesDict[TLineNo, int]c                 C  r   )Nzexit_counts() --> )ry   exit_countsr*   rF   r   r$   r$   r%   r     r   z$DebugFileReporterWrapper.exit_countsc                 C  r   )Nzarcs() --> )ry   r   r*   rF   r   r$   r$   r%   r     r   zDebugFileReporterWrapper.arcsc                 C  s$   | j  }| jdt|f  |S )Nzsource() --> %d chars)ry   sourcer*   rF   lenr   r$   r$   r%   r   !  s   
zDebugFileReporterWrapper.sourcer   c                 C  s(   t | j }| jdt|f  |S )Nz"source_token_lines() --> %d tokens)r^   ry   source_token_linesr*   rF   r   r   r$   r$   r%   r   &  s   z+DebugFileReporterWrapper.source_token_lines)rm   rU   ry   r   r*   rG   r   r   rj   )r   r   )r   r   r   r   )r   r   r   r   )r   r   )r   r   )r   r   )rD   rX   rY   rZ   r&   r   r   r   r   r   r   r   r   r   r   r   r$   r$   rl   r%   rw      s    








rw   )&rZ   
__future__r   r   os.pathr.   typesr   typingr   r   r   r   r   r	   r
   r   r   coverage.exceptionsr   coverage.miscr   coverage.pluginr   r   r   coverage.typesr   r   r   r   r   r   r   rG   rH   rr   rw   r$   r$   r$   r%   <module>   s"   , s+%