o
    „¿ÑgC&  ã                   @  s"  d Z ddlm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mZmZmZmZmZ ddlmZmZ ddlmZmZm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" erjddlm#Z# eeƒZdZ$d$dd„Z%e
G dd„ dƒƒZ&d%dd„Z'G dd„ dƒZ(d&d"d#„Z)dS )'zXML reporting for coverage.pyé    )ÚannotationsN)Ú	dataclass)ÚAnyÚDictÚIOÚIterableÚOptionalÚTYPE_CHECKING)Ú__version__Úfiles)Úisolate_moduleÚhuman_sortedÚhuman_sorted_items)ÚFileReporter)Úget_analysis_to_report)ÚAnalysis)ÚTMorf)Ú__url__)ÚCoveragezQhttps://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtdÚhitÚintÚnumÚreturnÚstrc                 C  s   |dkrdS d| |  S )z0Return the fraction of `hit`/`num`, as a string.r   Ú1z%.4g© )r   r   r   r   úR/var/www/html/bloggers_ems/venv/lib/python3.10/site-packages/coverage/xmlreport.pyÚrate"   s   r   c                   @  s:   e Zd ZU dZded< ded< ded< ded< ded< d	S )
ÚPackageDataz2Data we keep about each "package" (in Java terms).z"Dict[str, xml.dom.minidom.Element]Úelementsr   ÚhitsÚlinesÚbr_hitsÚbranchesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r   r   r   r   *   s   
 r   Úparentr   ÚchildÚNonec                 C  s   |   |¡ dS )z=Append a child to a parent, in a way mypy will shut up about.N)ÚappendChild)r)   r*   r   r   r   r,   4   s   r,   c                   @  s4   e Zd ZdZdZddd„Zdddd„Zddd„Zd	S )ÚXmlReporterz<A reporter for writing Cobertura-style XML coverage results.z
XML reportÚcoverager   r   r+   c                 C  sr   || _ | j j| _tƒ | _| jjr2| jjD ]}tj |¡r1| jjr&| 	d¡}nt
 |¡}| j |¡ qi | _|  d S )Nú\/)r.   ÚconfigÚsetÚsource_pathsÚsourceÚosÚpathÚexistsÚrelative_filesÚrstripr   Úcanonical_filenameÚaddÚpackages)Úselfr.   Úsrcr   r   r   Ú__init__>   s   

€zXmlReporter.__init__NÚmorfsúOptional[Iterable[TMorf]]ÚoutfileúOptional[IO[str]]Úfloatc                 C  s  |pt j}| j ¡  ¡ }tjj ¡ }|dusJ ‚| 	ddd¡| _
| j
j}| dt¡ | dttt ¡ d ƒƒ¡ | | j
 dt› d¡¡ | | j
 dt› d¡¡ t| j|ƒD ]\}}|  |||¡ qX| j
 d	¡}| |¡ t| jƒD ]}	| j
 d
¡}
t||
ƒ | j
 |	¡}t|
|ƒ qtd\}}d\}}| j
 d¡}| |¡ t| j ¡ ƒD ]m\}}| j
 d¡}t||ƒ | j
 d¡}t||ƒ t|j ¡ ƒD ]	\}}t||ƒ qÈ| d| t j!d¡¡ | dt"|j#|j$ƒ¡ |ròt"|j%|j&ƒ}nd}| d|¡ | dd¡ ||j#7 }||j$7 }||j%7 }||j&7 }q§| dt|ƒ¡ | dt|ƒ¡ | dt"||ƒ¡ |rK| dt|ƒ¡ | dt|ƒ¡ | dt"||ƒ¡ n| dd¡ | dd¡ | dd¡ | dd¡ | 't(| j
ƒ¡ || }|dkrxd}|S d||  | }|S )z¯Generate a Cobertura-compatible XML report for `morfs`.

        `morfs` is a list of modules or file names.

        `outfile` is a file object to write the XML to.

        Nr.   ÚversionÚ	timestampiè  z Generated by coverage.py: ú z
 Based on Úsourcesr3   )r   r   r;   ÚpackageÚclassesÚnameÚ.ú	line-rateÚ0úbranch-rateÚ
complexityzlines-validzlines-coveredzbranches-validzbranches-coveredr   g        g      Y@))ÚsysÚstdoutr.   Úget_dataÚhas_arcsÚxmlÚdomÚminidomÚgetDOMImplementationÚcreateDocumentÚxml_outÚdocumentElementÚsetAttributer
   r   r   Útimer,   ÚcreateCommentr   ÚDTD_URLr   Úxml_fileÚcreateElementr   r2   ÚcreateTextNoder   r;   Úitemsr   Úreplacer4   Úsepr   r    r!   r"   r#   ÚwriteÚserialize_xml)r<   r?   rA   rS   ÚimplÚ	xcoverageÚfrÚanalysisÚxsourcesr5   ÚxsourceÚtxtÚlnum_totÚ	lhits_totÚbnum_totÚ	bhits_totÚ	xpackagesÚpkg_nameÚpkg_dataÚxpackageÚxclassesÚ_Ú	class_eltÚbranch_rateÚdenomÚpctr   r   r   ÚreportN   sz   
	

ÿ








ÿzXmlReporter.reportri   r   rj   r   rS   Úboolc              	   C  s  | j jr|jjdkrdS |j dd¡}| jD ]"}| j js!t 	|¡}| 
| dd¡d ¡r8|t|ƒd d… } nq| ¡  dd¡}| j |jdt|ƒ …  d¡¡ tj |¡pYd}d | d¡d| j j… ¡}| dd¡}| j |ti ddddƒ¡}	| j d¡}
t|
| j d	¡ƒ | j d
¡}t|
|ƒ |
 dtj ||¡¡ |
 d| dd¡¡ |
 dd¡ | ¡ }| ¡ }t|j ƒD ][}| j d¡}| dt!|ƒ¡ | dt!t"||j#vƒƒ¡ |r||v rü|| \}}| dd¡ | ddd| | ||f ¡ ||v rdd„ || D ƒ}| dd |¡¡ t||ƒ q½t|j ƒ}|t|j#ƒ }|rCt$dd„ | %¡ D ƒƒ}t$dd„ | %¡ D ƒƒ}|| }nd}d}|
 dt&||ƒ¡ |rYt&||ƒ}nd}|
 d|¡ |
|	j'|< |	 j(|7  _(|	 j)|7  _)|	 j*|7  _*|	 j+|7  _+dS ) z(Add to the XML report for a single file.r   Nú\ú/é   r/   rK   ÚclassÚmethodsr!   rJ   ÚfilenamerO   rM   ÚlineÚnumberr    ÚbranchÚtruezcondition-coveragez%d%% (%d/%d)éd   c                 S  s    g | ]}|d k r
dnt |ƒ‘qS )r   Úexit)r   )Ú.0Úbr   r   r   Ú
<listcomp>ä   s     z(XmlReporter.xml_file.<locals>.<listcomp>zmissing-branchesú,c                 s  s    | ]\}}|V  qd S ©Nr   ©rŠ   ÚtÚkr   r   r   Ú	<genexpr>ì   s   € z'XmlReporter.xml_file.<locals>.<genexpr>c                 s  s    | ]	\}}|| V  qd S rŽ   r   r   r   r   r   r’   í   s   € rL   rN   ),r0   Ú
skip_emptyÚnumbersÚn_statementsrƒ   rc   r2   r7   r   r9   Ú
startswithÚlenÚrelative_filenamer:   r8   r4   r5   ÚdirnameÚjoinÚsplitÚxml_package_depthr;   Ú
setdefaultr   rY   r`   r,   r[   ÚrelpathÚbranch_statsÚmissing_branch_arcsÚsortedÚ
statementsr   r   ÚmissingÚsumÚvaluesr   r   r    r!   r"   r#   )r<   ri   rj   rS   rƒ   Úsource_pathÚrel_namer™   Úpackage_namerH   ÚxclassÚxlinesrŸ   r    r„   ÚxlineÚtotalÚtakenÚannlinesÚclass_linesÚ
class_hitsÚclass_branchesÚmissing_branchesÚclass_br_hitsry   r   r   r   r_   ª   sx   

þ"
þ



zXmlReporter.xml_file)r.   r   r   r+   rŽ   )r?   r@   rA   rB   r   rC   )ri   r   rj   r   rS   r}   r   r+   )r$   r%   r&   r'   Úreport_typer>   r|   r_   r   r   r   r   r-   9   s    
\r-   rU   úxml.dom.minidom.Documentc                 C  s   |   ¡ S )z Serialize a minidom node to XML.)Útoprettyxml)rU   r   r   r   rf     s   rf   )r   r   r   r   r   r   )r)   r   r*   r   r   r+   )rU   rµ   r   r   )*r'   Ú
__future__r   r4   Úos.pathrP   r\   Úxml.dom.minidomrT   Údataclassesr   Útypingr   r   r   r   r   r	   r.   r
   r   Úcoverage.miscr   r   r   Úcoverage.pluginr   Úcoverage.report_corer   Úcoverage.resultsr   Úcoverage.typesr   Úcoverage.versionr   r   r^   r   r   r,   r-   rf   r   r   r   r   Ú<module>   s6    

	 J