
    /~hJ&                    6   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 ddl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rddlm"Z"  ee      ZdZ#ddZ$e
 G d d             Z%ddZ& G d d      Z'ddZ(y)zXML reporting for coverage.py    )annotationsN)	dataclass)AnyIOTYPE_CHECKING)Iterable)__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.dtdc                    |dk(  ryd| |z  z  S )z0Return the fraction of `hit`/`num`, as a string.r   1z%.4g )hitnums     [/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/coverage/xmlreport.pyrater   #   s    
axs##    c                  D    e Zd ZU dZded<   ded<   ded<   ded<   ded<   y	)
PackageDataz2Data we keep about each "package" (in Java terms).z"dict[str, xml.dom.minidom.Element]elementsinthitslinesbr_hitsbranchesN)__name__
__module____qualname____doc____annotations__r   r   r   r   r   +   s    <00
IJLMr   r   c                &    | j                  |       y)z=Append a child to a parent, in a way mypy will shut up about.N)appendChild)parentchilds     r   r*   r*   5   s    
ur   c                  .    e Zd ZdZdZddZdd	dZd
dZy)XmlReporterz<A reporter for writing Cobertura-style XML coverage results.z
XML reportc                   || _         | j                   j                  | _        t               | _        | j                  j                  r| j                  j                  D ]z  }t
        j                  j                  |      s#| j                  j                  r|j                  d      }nt        j                  |      }| j                  j                  |       | i | _        |  y )N\/)coverageconfigsetsource_pathssourceospathexistsrelative_filesrstripr
   canonical_filenameaddpackages)selfr1   srcs      r   __init__zXmlReporter.__init__?   s     mm**E;;{{)) /77>>#&{{11!jj/#66s;%%))#./ 13r   Nc           	     
   |xs t         j                  }| j                  j                         j	                         }t
        j                  j                  j                         }|J |j                  ddd      | _
        | j                  j                  }|j                  dt               |j                  dt        t        t!        j                          dz                     |j#                  | j                  j%                  dt&         d             |j#                  | j                  j%                  dt(         d             t+        | j                  |      D ]  \  }}| j-                  |||        | j                  j/                  d	      }|j#                  |       t1        | j2                        D ]P  }	| j                  j/                  d
      }
t#        ||
       | j                  j5                  |	      }t#        |
|       R d\  }}d\  }}| j                  j/                  d      }|j#                  |       t7        | j8                  j;                               D ]p  \  }}| j                  j/                  d      }t#        ||       | j                  j/                  d      }t#        ||       t7        |j<                  j;                               D ]  \  }}t#        ||        |j                  d|j?                  t@        jB                  d             |j                  dtE        |jF                  |jH                               |r!tE        |jJ                  |jL                        }nd}|j                  d|       |j                  dd       ||jF                  z  }||jH                  z  }||jJ                  z  }||jL                  z  }s |j                  dt        |             |j                  dt        |             |j                  dtE        ||             |rS|j                  dt        |             |j                  dt        |             |j                  dtE        ||             n6|j                  dd       |j                  dd       |j                  dd       |j                  dd       |jO                  tQ        | j                               ||z   }|dk(  rd}|S d||z   z  |z  }|S )zGenerate 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.

        Nr1   version	timestampi  z Generated by coverage.py:  z
 Based on sourcesr5   )r   r   r=   packageclassesname.	line-rate0branch-rate
complexityzlines-validzlines-coveredzbranches-validzbranches-coveredr   g        g      Y@))sysstdoutr1   get_datahas_arcsxmldomminidomgetDOMImplementationcreateDocumentxml_outdocumentElementsetAttributer	   strr   timer*   createCommentr   DTD_URLr   xml_filecreateElementr   r4   createTextNoder   r=   itemsr   replacer6   sepr   r    r!   r"   r#   writeserialize_xml)r>   morfsoutfilerQ   impl	xcoveragefranalysisxsourcesr7   xsourcetxtlnum_tot	lhits_totbnum_tot	bhits_tot	xpackagespkg_namepkg_dataxpackagexclasses_	class_eltbranch_ratedenompcts                             r   reportzXmlReporter.reportO   sM    'SZZ==))+446 ww335**4TB LL00	y+6{CDIIK4D0E,FGdll88)'!4
 	 	dll88:gYa9PQR 34==%H 	2LBMM"h1	2 <<--i8h' !!2!23 	&Dll00:G'*,,--d3C%		& #)")LL..z:	i( #5T]]5H5H5J"K 	*Hh||11)<H	8,||11)<H(+ 283D3D3J3J3L M 19Hi01!!&(*:*:2663*GH!!+tHMM8>>/RS"8#3#3X5F5FG!!!-=!!,4&I&H)))I)))H'	** 	}c(m<I?{DH,EF""#3S]C""#5s9~F""=$y(2KL""#5s;""#3S9""=#6|S1 	mDLL12 8#A:C 
 9y01E9C
r   c           
     	   | j                   j                  r|j                  j                  dk(  ry|j                  j                  dd      }| j                  D ]d  }| j                   j                  st        j                  |      }|j                  |j                  dd      dz         sS|t        |      dz   d } nb |j                         j                  dd      }| j                  j                  |j                  dt        |        j                  d             t        j                   j#                  |      xs d}dj%                  |j'                  d      d| j                   j(                         }|j                  dd      }| j*                  j-                  |t/        i dddd            }	| j0                  j3                  d      }
t5        |
| j0                  j3                  d	             | j0                  j3                  d
      }t5        |
|       |
j7                  dt        j                   j9                  ||             |
j7                  d|j                  dd             |
j7                  dd       |j;                         }|j=                         }t?        |j@                        D ]  }| j0                  j3                  d      }|j7                  dtC        |             |j7                  dtC        tE        ||jF                  v                   |r||v r8||   \  }}|j7                  dd       |j7                  ddd|z  |z  ||fz         ||v rC||   D cg c]  }|dk  rdn
tC        |       }}|j7                  ddj%                  |             t5        ||        t        |j@                        }|t        |jF                        z
  }|rFtI        d |jK                         D              }tI        d |jK                         D              }||z
  }nd}d}|
j7                  dtM        ||             |rtM        ||      }nd}|
j7                  d|       |
|	jN                  |<   |	xjP                  |z  c_(        |	xjR                  |z  c_)        |	xjT                  |z  c_*        |	xjV                  |z  c_+        yc c}w )z(Add to the XML report for a single file.r   N\/   r0   rI   classmethodsr!   rH   filenamerM   rK   linenumberr    branchtruezcondition-coveragez%d%% (%d/%d)d   exitzmissing-branches,c              3  &   K   | ]	  \  }}|  y wNr   .0tks      r   	<genexpr>z'XmlReporter.xml_file.<locals>.<genexpr>   s      Etq! Es   c              3  ,   K   | ]  \  }}||z
    y wr   r   r   s      r   r   z'XmlReporter.xml_file.<locals>.<genexpr>   s     "KTQ1q5"Ks   rJ   rL   ),r2   
skip_emptynumbersn_statementsr   rb   r4   r9   r
   r;   
startswithlenrelative_filenamer<   r:   r6   r7   dirnamejoinsplitxml_package_depthr=   
setdefaultr   rW   r_   r*   rY   relpathbranch_statsmissing_branch_arcssorted
statementsrZ   r   missingsumvaluesr   r   r    r!   r"   r#   )r>   rj   rk   rQ   r   source_pathrel_namer   package_namerF   xclassxlinesr   r   r   xlinetotaltakenbannlinesclass_lines
class_hitsclass_branchesmissing_branchesclass_br_hitsrz   s                             r   r^   zXmlReporter.xml_file   s7    ;;!!,,1 ;;&&tS1,, 	NK;;--#66{C"";#6#6tS#AC#GH#C$4Q$6$78	N ++-55dC@H!!"++oH~">"E"Ee"LM''//(+2s((7==-.Lt{{/L/LMNsC0--**<RAqRS9TU*.,,*D*DW*MFDLL66yAB++G4FF#FBGGOOHg$FGJ(8(8s(CDL#.,,.&::< 8../ 	'DLL..v6ExT3 vs3t8;K;K/K+L'MN<'#/#5LE5&&x8&&,&#e)U*:E5)II ..EXY]E^_!a%SV ;_H_&&'9388H;MN&'	'* (--. 3x'7'7#88
  E|/B/B/D EEN""K\5H5H5J"KK*-==MNM 	Kj+)FG}n=KKM;7%+"
"$=(N*7  `s   (S)r1   r   returnNoner   )rf   zIterable[TMorf] | Nonerg   zIO[str] | Noner   float)rj   r   rk   r   rQ   boolr   r   )r$   r%   r&   r'   report_typer@   r}   r^   r   r   r   r.   r.   :   s    FK/ ZxU+r   r.   c                "    | j                         S )z Serialize a minidom node to XML.)toprettyxml)rS   s    r   re   re     s    ??r   )r   r   r   r   r   rZ   )r+   r   r,   r   r   r   )rS   zxml.dom.minidom.Documentr   rZ   ))r'   
__future__r   r6   os.pathrN   r[   xml.dom.minidomrR   dataclassesr   typingr   r   r   collections.abcr   r1   r	   r
   coverage.miscr   r   r   coverage.pluginr   coverage.report_corer   coverage.resultsr   coverage.typesr   coverage.versionr   r   r]   r   r   r*   r.   re   r   r   r   <module>r      s    $ " 	  
   ! ) ) $ ' J J ( 7 %   $!B ^$   
F+ F+Rr   