
    i?                     L   d Z ddlZddlZddlZddlZddl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 ddlZddlmZ ddlmZ ddlmZ dd	lmZ  G d
 de          Z G d d          Zd Z G d d          Z G d de          Z G d de          Z G d de          ZdS )z8Coverage controllers for use by pytest-cov and nose-cov.    N)Path)Union)CoverageData)filename_suffix   )CentralCovContextWarning)DistCovErrorc                       e Zd ZdS )BrokenCovConfigErrorN)__name__
__module____qualname__     N/root/projects/qq-shell/venv/lib/python3.11/site-packages/pytest_cov/engine.pyr   r      s        Dr   r   c                   $    e Zd Zed             ZdS )	_NullFilec                     d S Nr   )vs    r   writez_NullFile.write   s    r   N)r   r   r   staticmethodr   r   r   r   r   r      s-          \  r   r   c                 F     t          j                    fd            }|S )Nc                    	 t          j                    }n# t          $ r d }Y nw xY wt          j        | j                   	  | g|R i ||t          j        |           S S # |t          j        |           w w xY wr   )r   cwdOSErroroschdirtopdir)selfargskwargsoriginal_cwdmeths       r   ensure_topdir_wrapperz-_ensure_topdir.<locals>.ensure_topdir_wrapper"   s    	 8::LL 	  	  	   LLL	  		'4.t...v..'&&&& (|'&&&& (s    &&A& &A?)	functoolswraps)r$   r%   s   ` r   _ensure_topdirr(   !   s9    _T' ' ' ' ' ! r   c                       e Zd ZdZdej        dedef         dedef         fdZ	e
j        d             Zed             Zed	             Zd
 Zd Zed             Zed             Zd Zed             ZdS )CovControllerz0Base class for different plugin implementations.optionsconfigNnodeidc                    |j         | _         |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        || _        || _        d| _        d| _	        d| _
        t                      | _        g | _        t          j        t!          j                              | _        d| _        d| _        dS )z8Get some common config used by multiple derived classes.NF)
cov_source
cov_report
cov_config
cov_append
cov_branchcov_precisionr,   r-   covcombining_cov	data_fileset
node_descsfailed_workersr   fspathr   r   r   is_collocatedstarted)r    r+   r,   r-   s       r   __init__zCovController.__init__7   s    !,!,!,!,!,$2!%% i

++!r   c              #      K   t          j                    }t          j        | j                   d V  t          j        |           d S r   )r   r   r   r   r   )r    r#   s     r   ensure_topdirzCovController.ensure_topdirK   sB      xzz

r   c                 F    d| _         | j                                         d S NF)r=   r5   stopr    s    r   pausezCovController.pauseR   s    r   c                 F    | j                                          d| _        d S NT)r5   startr=   rD   s    r   resumezCovController.resumeW   s    r   c                     d| _         d S rG   r=   rD   s    r   rH   zCovController.start\   s    r   c                     d| _         d S rB   rK   rD   s    r   finishzCovController.finish_   s    r   c                 N    d                     |  dj         |dd                    S )z"Return a description of this node.zplatform {}, python {}z{}.{}.{}-{}-{}N   )format)platformversion_infos     r   get_node_desczCovController.get_node_descb   s3     (..x9P9I9PR^_a`a_aRb9cdddr   c                  F    t          j        d          \  } }| dk     rd} | S )N)P      )fallback(   rU   )shutilget_terminal_size)width_s     r   	get_widthzCovController.get_widthh   s.     +X>>>q2::Er   c                    t          |d          r|                    ||           d S |                                 }t          j        dk    r|dz  }t          |t          |          z
  dz
  dt          |          z  z  d          }||z  }| d| d| }t          |          t          |                                          z   |k    r||                                z  }|dz  }|                    |           d S )Nsepwin32r       z

)	hasattrr_   r]   sysrQ   maxlenrstripr   )r    streamstxt	fullwidthNfilllines           r   r_   zCovController.sepq   s   65!! 	JJq#((I |w&&
 Q	YS)A-1s1vv:>BBAq5D))S))4))D 4yy3qxxzz??*i77

"FNDLLr   c                 	     j                             dd j        t                    }t	           j                  dk    r3                     |ddd                     j                              nF                     |dd           t           j                  D ]}                     |d	|             j	        rX                     |dd
           |
                    d            j	        D ]$}|
                    |j        j         d           %t           fddD                       rud j        v pdd| j        d}t           j        t                     od j                                        v }|                    d|pdi             j         j        d)i | d j        v r{ j        d         } j                             d|            j                             dt                     |r|
                    d| d           n|
                    d           d j        v rU j        d         } j                             d|           |
                    d| j         j        j        n| d           d j        v rU j        d         } j                             d|           |
                    d| j         j        j        n| d           d j        v rT j        d         } j                             d|           |
                    d| j         j        j        n|z             d  j        v r} j        d          }t7          |                              d!          5 }	 j                             d|	d "           ddd           n# 1 swxY w Y   |
                    d#| d           d$ j        v r} j        d$         }t7          |                              d%          5 }	 j                             d|	d "           ddd           n# 1 swxY w Y   |
                    d&| d           d' j        v rv j        d'         } j                             d|            j                             dt                     |
                    d(| j         j        j        n| d           |S )*zProduce coverage reports.Ttotal)ignore_errorsoutput_format	precisionfiler   r\   z
coverage:  coveragerb   zcoverage: failed workerszlThe following workers failed to return coverage data, ensure that pytest-cov is installed on these workers.

c              3   *   K   | ]}|j         v V  d S r   )r0   ).0xr    s     r   	<genexpr>z(CovController.summary.<locals>.<genexpr>   s*      FFqDO#FFFFFFr   )termterm-missingr}   N)show_missingrq   rt   rs   zskip-coveredskip_coveredannotate)rq   	directory)rq   rt   z)Coverage annotated source written to dir z1Coverage annotated source written next to source
htmlzCoverage HTML written to dir xml)rq   outfilezCoverage XML written to file jsonz!Coverage JSON written to file %s
markdownw)rq   rt   rr   z.Coverage Markdown information written to file zmarkdown-appendaz/Coverage Markdown information appended to file lcovzCoverage LCOV written to file r   )r5   reportr4   r   rf   r9   r_   joinsortedr:   r   gatewayidanyr0   
isinstancedictvaluesupdater   html_reportr,   html_dir
xml_report
xml_outputjson_reportjson_outputr   openlcov_reportlcov_output)
r    rh   rp   	node_descnoder+   r   annotate_diroutputoutput_files
   `         r   summaryzCovController.summary   s    d'UYUgnwxx t1$$HHVS"Irwwt/G/G"I"IJJJJHHVS*---#DO44 6 6	n5555  	5HHVS"<===LL  I  J  J  J+ 5 53334444 FFFF-EFFFFF 		'!/4?!B Kt!%!/	 G &dot<<kSWSbSiSiSkSkAkLNNNL,@DABBBDHO&&g&&& ((?:6LHDLIII HOO$YO??? SYYYYZZZZQRRR T_$$_V,FH  tv FFFLLsU[Uc9Q9Qiosssttt DO##_U+FHdFCCCLLuW]We9S9Skquuuvvv T_$$_V,FH  tV DDDLL=`f`nA\A\tz{||| ((_Z0Ff""3'' `;dT^___` ` ` ` ` ` ` ` ` ` ` ` ` ` `LLT&TTTUUU //_%67Ff""3'' `;dT^___` ` ` ` ` ` ` ` ` ` ` ` ` ` `LLU6UUUVVV T_$$_V,FH  tV DDD HOO$YO???LLwY_Yg$(/:U:Umswwwxxxs$   ?N))N-0N-P//P36P3)r   r   r   __doc__argparse	Namespacer   objectstrr>   
contextlibcontextmanagerr@   r(   rE   rI   rH   rM   r   rS   r]   r_   r   r   r   r   r*   r*   4   s7       :: 2 E$,<O Y^_ceh_hYi    (      ^   ^     e e \e
   \  4 Y Y ^Y Y Yr   r*   c                   L     e Zd ZdZe fd            Ze fd            Z xZS )Centralz)Implementation for centralised operation.c                 X   t          j        | j        | j        d| j                  | _        | j        j        j        dk    r%d}t          j	        t          |          d           t          j        | j        | j        t          d           dt          j                            | j        j        j                  | j                  | _        | j        s| j                                         | j                                         t)                                                       d S )	NTsourcebranchdata_suffixconfig_filetest_functionzDetected dynamic_context=test_function in coverage configuration. This is unnecessary as this plugin provides the more complete --cov-context option.r   )
stacklevel.combiner   r   r   r7   r   )rv   Coverager/   r3   r1   r5   r,   dynamic_contextwarningswarnr   r   r   pathabspathr7   r6   r2   eraserH   super)r    message	__class__s     r   rH   zCentral.start   s   $??	
 
 
 8?*o==f  M27;;JJJJ%.??*400:::goodho&?@@
 
 
  	HNNr   c                    t                                                       | j                                         | j                                         | j        | _        | j                                         | j                                         | j                                         |                     t          j
        t          j                  }| j                            |           dS )zSStop coverage, save data to file and set the list of coverage objects to report on.N)r   rM   r5   rC   saver6   loadcombinerS   rd   rQ   rR   r9   add)r    r   r   s     r   rM   zCentral.finish	  s     	%&&s|S5EFF	I&&&&&r   )r   r   r   r   r(   rH   rM   __classcell__r   s   @r   r   r      sm        33    ^: ' ' ' ' ^' ' ' ' 'r   r   c                   J    e Zd ZdZed             Zd Zd Zed             ZdS )
DistMasterz&Implementation for distributed master.c                 f   t          j        | j        | j        d| j                  | _        | j        j        j        dk    rt          d          d| j        _	        d| j        _
        d| j        _        t          j        | j        | j        t          d           dt          j                            | j        j        j                  | j                  | _        | j        s| j                                         | j                                         | j        g| j        j        j        d<   d S )	NTr   r   zDetected dynamic_context=test_function in coverage configuration. This is known to cause issues when using xdist, see: https://github.com/pytest-dev/pytest-cov/issues/604
It is recommended to use --cov-context instead.Fr   r   r   )rv   r   r/   r3   r1   r5   r,   r   r	   _warn_no_data_warn_unimported_source_warn_preimported_sourcer   r   r   r   r7   r6   r2   r   rH   r   pathsrD   s    r   rH   zDistMaster.start  s   $??	
 
 
 8?*o==B  
 "'+0(,1)%.??*400:::goodho&?@@
 
 
  	HNN+/;-h'''r   c                     |j                             t          j                    | j        d |j        j        D             d           dS )zFWorkers need to know if they are collocated and what files have moved.c                 ,    g | ]}t          |          S r   )r   )ry   roots     r   
<listcomp>z-DistMaster.configure_node.<locals>.<listcomp>A  s    *X*X*X3t99*X*X*Xr   )cov_master_hostcov_master_topdircov_master_rsync_rootsN)workerinputr   socketgethostnamer   nodemanagerroots)r    r   s     r   configure_nodezDistMaster.configure_node:  s[     	#)#5#7#7%)[*X*XAQAW*X*X*X 	
 	
 	
 	
 	
r   c                 X   t          |di           }d|vr| j                            |           dS d|v rdt          j                    t          j                    t          j        dd          |d         fz  }t          |          }|
                    |d                    |d	         }| j        j        j        d
                             |           |j                                        }|                     |j        |j                  }| j                            |           dS )z#Collect data file name from worker.workeroutputcov_worker_node_idNcov_worker_dataz%s.%s.%06d.%sr   i?B )suffixcov_worker_pathr   )getattrr:   appendr   r   r   getpidrandomrandintr   loadsr5   r,   r   r   _rinforS   rQ   rR   r9   r   )	r    r   errorr   r   cov_datar   rinfor   s	            r   testnodedownzDistMaster.testnodedownE  s.   
 ~r22v--&&t,,,F &&)"$$	q&))+,	- K $"  H NN6"34555+,DHO!(+224888 ##%%&&u~u7IJJ	I&&&&&r   c                    | j                                          | j                                          | j        | _         | j                                          | j                                          | j                                          dS )zJCombines coverage data and sets the list of coverage objects to report on.N)r5   rC   r   r6   r   r   rD   s    r   rM   zDistMaster.finishe  sb    
 	%r   N)	r   r   r   r   r(   rH   r   r   rM   r   r   r   r   r     sm        008 8 ^88	
 	
 	
' ' '@ 	 	 ^	 	 	r   r   c                   R     e Zd ZdZe fd            Ze fd            Zd Z xZS )
DistWorkerz'Implementation for distributed workers.c                 <   t          j                    | j        j        d         k    o| j        | j        j        d         k    | _        | j        sY| j        j        d         | j        | j        fd| j        D             | _        | j                                      | _        t          j
        | j        | j        d| j                  | _        d| j        _        | j                                         t                                                       d S )Nr   r   c                 <    g | ]}|                               S r   )replace)ry   r   master_topdirworker_topdirs     r   r   z$DistWorker.start.<locals>.<listcomp>  s(    "n"n"nTZ6>>-#O#O"n"n"nr   Tr   F)r   r   r,   r   r   r<   r/   r1   r   rv   r   r3   r5   r   rH   r   )r    r   r   r   s    @@r   rH   zDistWorker.startu  s      DK$;<M$NN Lt{67JKK 	 ! 	T K34GHM KM*"n"n"n"n"n^b^m"n"n"n"o55m]SSDO $??	
 
 
 ,1(r   c                    t                                                       | j                                         | j        r/| j                                         | j        | j        j        d<   dS | j        	                                 | j                                         | j        
                                                                }| j        j                            | j        | j        |d           dS )z8Stop coverage and send relevant info back to the master.r   )r   r   r   N)r   rM   r5   rC   r<   r   r-   r,   r   r   get_datadumpsr   r   )r    datar   s     r   rM   zDistWorker.finish  s     	 	 HMMOOO >B[DK$%9:::HHMMOOO 8$$&&,,..DK$++'+{*.+'+     r   c                     dS )z&Only the master reports so do nothing.Nr   )r    rh   s     r   r   zDistWorker.summary  s      r   )	r   r   r   r   r(   rH   rM   r   r   r   s   @r   r   r   r  s}        11    ^8     ^B5 5 5 5 5 5 5r   r   )r   r   r   r&   r   r   rY   r   rd   r   pathlibr   typingr   rv   coverage.datar   coverage.sqldatar   ru   r   r	   	Exceptionr   r   r(   r*   r   r   r   r   r   r   <module>r      s   > >          				    



               & & & & & & , , , , , , & & & & & &      	 	 	 	 	9 	 	 	       ! ! !&q q q q q q q qh/' /' /' /' /'m /' /' /'dU U U U U U U UpC5 C5 C5 C5 C5 C5 C5 C5 C5 C5r   