
    j@                     v   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	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 dd
lmZ  G d de          Z G d d          Zej        d             Z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)StringIO)Path)CoverageDatafilename_suffix   )CentralCovContextWarning)DistCovError)cleanupc                       e Zd ZdS )BrokenCovConfigErrorN)__name__
__module____qualname__     [/lsinfo/ai/hellotax_ai/base_platform/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              #      K   t          | |          }	 t          | |t          j        |                     d V  t          | ||           d S # t          | ||           w xY wr   )getattrsetattrcopy)objattrbackups      r   _backupr"   !   so      S$F#T49V,,---T6"""""T6""""s   'A A!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_topdirr2   +   s9    _T' ' ' ' ' ! r   c                 *    t          d           d|  S )NT.r   )names    r   _data_suffixr6   >   s    d##,,d,,,r   c                       e Zd ZdZddZej        d             Zed             Z	ed             Z
ed             Zed             Zed	             Zed
             Zed             ZdS )CovControllerz0Base class for different plugin implementations.Nc                 (   || _         || _        || _        || _        || _        || _        || _        d| _        d| _        d| _	        t                      | _        g | _        t          j        t          j                              | _        d| _        dS )z8Get some common config used by multiple derived classes.N)
cov_source
cov_report
cov_config
cov_append
cov_branchconfignodeidcovcombining_cov	data_fileset
node_descsfailed_workersr'   fspathr   r%   r)   is_collocated)r*   r:   r;   r<   r=   r>   r?   r@   s           r   __init__zCovController.__init__E   s    $$$$$!%% 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_topdirW   sB      xzz

r   c                 `    | j                                          |                                  d S r   )rA   stop	unset_envr*   s    r   pausezCovController.pause^   s'    r   c                 `    | j                                          |                                  d S r   )rA   startset_envrO   s    r   resumezCovController.resumec   s%    r   c                 :   | j         t          j        t          j        d<   n1t          j                            | j                   t          j        d<   t          | j                  }|                                r4t          j        |	                                          t          j        d<   nt          j        t          j        d<   t          j
                            | j        j        j                  t          j        d<   | j        rdt          j        d<   dS dS )zPPut info about coverage into the env so that subprocesses can activate coverage.NCOV_CORE_SOURCECOV_CORE_CONFIGCOV_CORE_DATAFILEenabledCOV_CORE_BRANCH)r:   r'   pathsepenvironjoinr   r<   existsrG   resolvepathabspathrA   r?   rC   r>   )r*   config_files     r   rS   zCovController.set_envh   s     ?",.JBJ()),.JOODO,L,LBJ()4?++ 	7,.Ik6I6I6K6K,L,LBJ()),.JBJ()*,'//$(/:S*T*T
&'? 	6,5BJ()))	6 	6r   c                  F   t           j                            dd           t           j                            dd           t           j                            dd           t           j                            dd           t           j                            dd           dS )zRemove coverage info from env.rV   NrW   rX   rZ   COV_CORE_CONTEXT)r'   r\   popr   r   r   rN   zCovController.unset_envy   s}     	
($///

($///

*D111

($///

)400000r   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_desc   s3     (..x9P9I9PR^_a`a_aRb9cdddr   c                     t          | d          r|                     ||           d S t          dt          |          z
  d          }|dz  }|dz  }||z   d| d|||z   z   d}|                     |           d S )NsepD       
)hasattrrm   maxlenr   )streamstxt	sep_totalsep_len	sep_extraouts          r   rm   zCovController.sep   s    65!! 	JJq#Vc#hh.33I1nG!AI[FF3FFg	.A)BFFFCLLr   c                 Z
    d} j         sOt           j        d          5   j                            ddt                    cddd           S # 1 swxY w Y   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                       rd j         v pdd|d}t           j         t                     od j                                         v }|                    d|pdi           t           j        d          5    j        j        d!i |}ddd           n# 1 swxY w Y   d j         v rՉ j         d         }t           j        d          5   j                            d|           ddd           n# 1 swxY w Y   t           j        d          5   j                            dt                    }ddd           n# 1 swxY w Y   |r|                    d| d           n|                    d           d j         v r j         d         }t           j        d          5   j                            d|          }ddd           n# 1 swxY w Y   |                    d| j        j        j        n| d           d j         v r j         d         }t           j        d          5   j                            d|          }ddd           n# 1 swxY w Y   |                    d| j        j        j        n| d           d j         v r j         d         }t           j        d          5   j                            d|          }ddd           n# 1 swxY w Y   |                    d| j        j        j        n|z             d j         v r j         d         }t           j        d          5   j                            d|            j                            dt                    }ddd           n# 1 swxY w Y   |                    d | j        j        j        n| d           |S )"zProduce coverage reports.Nr?   T)show_missingignore_errorsfiler   -z
coverage:  coveragerp   zcoverage: failed workerszlThe following workers failed to return coverage data, ensure that pytest-cov is installed on these workers.
rq   c              3   *   K   | ]}|j         v V  d S r   )r;   ).0xr*   s     r   	<genexpr>z(CovController.summary.<locals>.<genexpr>   s*      FFqDO#FFFFFFr   )termterm-missingr   zskip-coveredskip_coveredannotate)r~   	directory)r~   r   z)Coverage annotated source written to dir z1Coverage annotated source written next to source
htmlzCoverage HTML written to dir xml)r~   outfilezCoverage XML written to file jsonz!Coverage JSON written to file %s
lcovzCoverage LCOV written to file r   )r;   r"   rA   reportr   rt   rE   rm   r]   sortedrF   r   gatewayidany
isinstancedictvaluesupdater   html_reportr?   html_dir
xml_report
xml_outputjson_reportjson_outputlcov_reportlcov_output)	r*   ru   total	node_descnodeoptionsr   annotate_diroutputs	   `        r   summaryzCovController.summary   s     	^8,, ^ ^xDS\]]^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 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 		3!/4?!B Kt!% G
 &dot<<kSWSbSiSiSkSkAkLNNNL,@DABBB8,, 3 3'22'223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ((?:6L8,, N N!!!MMMN N N N N N N N N N N N N N N
 8,, L LdKKL L L L L L L L L L L L L L L SYYYYZZZZQRRR T_$$_V,F8,, S S,,46,RRS S S S S S S S S S S S S S SLLsU[Uc9Q9Qiosssttt DO##_U+F8,, P P++$+OOP P P P P P P P P P P P P P PLLuW]We9S9Skquuuvvv T_$$_V,F8,, Q Q,,4,PPQ Q Q Q Q Q Q Q Q Q Q Q Q Q QLL=`f`nA\A\tz{||| T_$$_V,F8,, L L$$4$HHH dKKL L L L L L L L L L L L L L L LLwY_Yg$(/:U:Umswwwxxxs   "AAAG66G:=G:,III5"J##J'*J'
L33L7:L7N>>OO Q		QQ*>S44S8;S8)NN)r   r   r   __doc__rI   
contextlibcontextmanagerrK   r2   rP   rT   rS   r   rN   rk   rm   r   r   r   r   r8   r8   B   s       ::" " " "$      ^   ^ 6 6 ^6  1 1 \1 e e \e
   \ T T ^T T Tr   r8   c                   >    e Zd ZdZed             Zed             ZdS )Centralz)Implementation for centralised operation.c                 n   t                       t          j        | j        | j        t          d          | j                  | _        | j        j        j	        dk    r%d}t          j        t          |          d           t          j        | j        | j        t          d          t          j                            | j        j        j                  | j                  | _        | j        s| j                                         | j                                         |                                  d S )	Ncsourcebranchdata_suffixrb   test_functionzDetected dynamic_context=test_function in coverage configuration. This is unnecessary as this plugin provides the more complete --cov-context option.r   )
stacklevelccr   r   r   rC   rb   )r   r   Coverager:   r>   r6   r<   rA   r?   dynamic_contextwarningswarnr	   r'   r`   ra   rC   rB   r=   eraserR   rS   )r*   messages     r   rR   zCentral.start   s
   			$??$S))	
 
 
 8?*o==f  M27;;JJJJ%.??$T**goodho&?@@
 
 
  	HNNr   c                    |                                   | 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)rN   rA   rM   saverB   loadcombinerk   sysri   rj   rE   add)r*   r   s     r   finishzCentral.finish  s     	%&&s|S5EFF	I&&&&&r   N)r   r   r   r   r2   rR   r   r   r   r   r   r      sN        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                    t                       t          j        | j        | j        t          d          | j                  | _        | j        j        j	        dk    rt          d          d| j        _        d| j        _        d| j        _        t          j        | j        | j        t          d          t          j                            | j        j        j                  | j                  | _        | j        s| j                                         | j                                         | j        g| j        j        j        d<   d S )	Nmr   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.Fmcr   r   )r   r   r   r:   r>   r6   r<   rA   r?   r   r
   _warn_no_data_warn_unimported_source_warn_preimported_sourcer'   r`   ra   rC   rB   r=   r   rR   r)   pathsrO   s    r   rR   zDistMaster.start!  s!   			$??$S))	
 
 
 8?*o==B  
 "'+0(,1)%.??$T**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   )str)r   roots     r   
<listcomp>z-DistMaster.configure_node.<locals>.<listcomp>G  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                 2   t          |di           }d|vr| j                            |           dS d|v rdt          j                    t          j                    t          j        dd          |d         fz  }t          j
        | j        | j        || j                  }|                                 t          j        d	k     rQt!                      }|                    t%          |d                              |j                            |           nSt!          d
d          }|                    |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 r   rg   r   Tzshould-not-exist)no_disksuffixcov_worker_pathr   )"r   rF   appendr   r   r'   getpidrandomrandintr   r   r:   r>   r<   rR   rj   r   read_fileobjr   datar   loadsget_datarM   r   rA   r?   r   r   _rinfork   ri   rE   r   )
r*   r   errorr   r   rA   r   r`   rinfor   s
             r   testnodedownzDistMaster.testnodedownK  s   
 ~r22v--&&t,,,F &&)"$$	q&))+,	- K #4?4?`ky}  zI  J  J  JCIIKKK$v--#~~!!(62C+D"E"EFFF%%%%#D9KLLL

6"34555%%d+++HHJJJHHJJJ+,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)rA   rM   r   rB   r   r   rO   s    r   r   zDistMaster.finishs  sb    
 	%r   N)	r   r   r   r   r2   rR   r   r   r   r   r   r   r   r     sm        008 8 ^8<	
 	
 	
&' &' &'P 	 	 ^	 	 	r   r   c                   D    e Zd ZdZed             Zed             Zd ZdS )
DistWorkerz'Implementation for distributed workers.c                 P   t                       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        t          d| j                   | j                  | _        | j                                         |                                  d S )Nr   r   c                 <    g | ]}|                               S r   )replace)r   r   master_topdirworker_topdirs     r   r   z$DistWorker.start.<locals>.<listcomp>  s(    "n"n"nTZ6>>-#O#O"n"n"nr   wr   )r   r   r   r?   r   r)   rH   r:   r<   r   r   r   r>   r6   r@   rA   rR   rS   )r*   r   r   s    @@r   rR   zDistWorker.start  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 $??$%6%6%677	
 
 
 	r   c                    |                                   | j                                         | j        r/| j                                         | j        | j        j        d<   dS | j                                         | j                                         t          j
        dk     rBt                      }| j        j                            |           |                                }n+| j                                                                        }| j        j                            | j        | j        |d           dS )z8Stop coverage and send relevant info back to the master.r   r   )r   r   r   N)rN   rA   rM   rH   r   r@   r?   r   r   r   rj   r   r   write_fileobjgetvaluer   dumpsr   r)   )r*   buffr   s      r   r   zDistWorker.finish  s    	 	 HMMOOO >B[DK$%9:::HHMMOOO $v--zz++D111}}x((**0022K$++'+{*.+'+     r   c                     dS )z&Only the master reports so do nothing.Nr   )r*   ru   s     r   r   zDistWorker.summary  s      r   N)r   r   r   r   r2   rR   r   r   r   r   r   r   r     s^        11  ^6 # # ^#J5 5 5 5 5r   r   )"r   r   r   r0   r'   r   r   r   r   ior   pathlibr   r   coverage.datar   coverage.sqldatar   r   r	   r
   embedr   	Exceptionr   r   r   r"   r2   r6   r8   r   r   r   r   r   r   <module>r     s<   > >          				   



               & & & & & & , , , , , , & & & & & &            	 	 	 	 	9 	 	 	        # # #! ! !&- - -f f f f f f f fR0' 0' 0' 0' 0'm 0' 0' 0'f_ _ _ _ _ _ _ _DF5 F5 F5 F5 F5 F5 F5 F5 F5 F5r   