Ë
    tPêjl  ã                  óÞ   — d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZ dd	lmZmZmZ  ej0                  d
«      Zdd„Zdd„Zdd„Zdd„Z G d„ de«      Zy)zX
Functionality for formatting vulnerability results as a set of human-readable columns.
é    )ÚannotationsN)ÚIterable)Úzip_longest)ÚAnyÚcast)ÚVersioné   )ÚVulnerabilityFormatÚpypi_urlÚvuln_id_urlz\033]8;;[^\033]*\033\\c                ó   — d|› d| › d�S )z)Wrap text in an OSC 8 terminal hyperlink.z]8;;z\z]8;;\© )ÚtextÚurls     ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/pip_audit/_format/columns.pyÚ
_osc8_linkr      s   € à�c�U˜&   nÐ5Ð5ó    c                ó@   — t        t        j                  d| «      «      S )zGReturn the visible length of a string, ignoring OSC 8 escape sequences.Ú )ÚlenÚ_OSC8_REÚsub)Úss    r   Ú_visible_lenr      s   € äŒx�|‰|˜B Ó"Ó#Ð#r   c                ó*   — | d|t        | «      z
  z  z   S )zILeft-justify a string to the given visible width, ignoring OSC 8 escapes.ú )r   )r   Úwidths     r   Ú_visible_ljustr   !   s   € àˆs�eœl¨1›oÑ-Ñ.Ñ.Ð.r   c           
     óH  — | D �cg c]  }t        t        t        |«      «      ‘Œ } }t        | ddiŽD �cg c]  }t	        t        t
        |«      «      ‘Œ }}| D �cg c]0  }dj                  t        t        ||«      «      j                  «       ‘Œ2 }}||fS c c}w c c}w c c}w )z¶Return a list of formatted rows and a list of column sizes.
    For example::
    >>> tabulate([['foobar', 2000], [0xdeadbeef]])
    (['foobar     2000', '3735928559'], [10, 4])
    Ú	fillvaluer   r   )	ÚtupleÚmapÚstrr   Úmaxr   Újoinr   Úrstrip)ÚrowsÚrowÚcolÚsizesÚtables        r   Útabulater,   &   s�   € ð -1Ö1 SŒE”#”c˜3“-Õ Ð1€DÐ1Ü4?ÀÐ4TÐQSÑ4TÖU¨SŒS””\ 3Ó'Õ(ÐU€EÐUØKOÖPÀCˆS�X‰X”cœ.¨#¨uÓ5Ó6×=Ñ=Õ?ÐP€EÐPØ�%ˆ<Ðùò 2ùÚUùÚPs   … B´ BÁ5Bc                  ón   — e Zd ZdZd
d„Zedd„«       Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Zdd„Z	dd„Z
dd„Zy	)ÚColumnsFormatzp
    An implementation of `VulnerabilityFormat` that formats vulnerability results as a set of
    columns.
    c                ó    — || _         || _        y)aƒ  
        Create a new `ColumnFormat`.

        `output_desc` is a flag to determine whether descriptions for each vulnerability should be
        included in the output as they can be quite long and make the output difficult to read.

        `output_aliases` is a flag to determine whether aliases (such as CVEs) for each
        vulnerability should be included in the output.
        N)Úoutput_descÚoutput_aliases)Úselfr0   r1   s      r   Ú__init__zColumnsFormat.__init__8   s   € ð 'ˆÔØ,ˆÕr   c                 ó   — y)z8
        See `VulnerabilityFormat.is_manifest`.
        Fr   )r2   s    r   Úis_manifestzColumnsFormat.is_manifestE   s   € ð
 r   c                ó<  ‡— g }g d¢}|r|j                  d«       | j                  r|j                  d«       | j                  r|j                  d«       |j                  |«       |j                  «       D �‡��cg c]Z  \  Š}‰j	                  «       sE|D ]@  }| j                  t        t        j                  ‰«      |t        ˆfd„|D «       d«      «      ‘ŒB Œ\ }}}}|j                  |«       d}	t        |«      dkD  rWt        |«      \  }
}t        |«      d	kD  r(|
j                  dd
j                  d„ |D «       «      «       |
D ]  }|	r|	dz  }	|	|z  }	Œ |j                  «       D �cg c];  }|j	                  «       r)| j!                  t        t        j"                  |«      «      ‘Œ= }}|rd|j                  d	ddg«       t        |«      \  }}|j                  dd
j                  d„ |D «       «      «       |	r|	dz  }	|D ]  }|	r|	dz  }	|	|z  }	Œ |	S c c}}}w c c}w )z¤
        Returns a column formatted string for a given mapping of dependencies to vulnerability
        results.

        See `VulnerabilityFormat.format`.
        )ÚNamer   ÚIDzFix VersionszApplied FixÚAliasesÚDescriptionc              3  óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­w©N)Údep)Ú.0Úfr=   s     €r   ú	<genexpr>z'ColumnsFormat.format.<locals>.<genexpr>e   s   øè ø€ Ò7˜A¨!¯%©%°3«,”aÑ7ùs   ƒ˜Nr   r	   r   r   c              3  ó&   K  — | ]	  }d |z  –— Œ y­w©ú-Nr   ©r>   Úxs     r   r@   z'ColumnsFormat.format.<locals>.<genexpr>v   s   è ø€ Ò/G¸A°°aµÑ/Gùó   ‚ú
r7   zSkip Reasonc              3  ó&   K  — | ]	  }d |z  –— Œ y­wrB   r   rD   s     r   r@   z'ColumnsFormat.format.<locals>.<genexpr>‡   s   è ø€ Ò+C¸¨C°!­GÑ+CùrF   )Úappendr1   r0   ÚitemsÚ
is_skippedÚ_format_vulnr   ÚserviceÚResolvedDependencyÚnextÚextendr   r,   Úinsertr%   ÚkeysÚ_format_skipped_depÚSkippedDependency)r2   ÚresultÚfixesÚ	vuln_dataÚheaderr=   ÚvulnsÚvulnÚ	vuln_rowsÚcolumns_stringÚvuln_stringsr*   r(   Ú	skip_dataÚskip_stringss        `         r   ÚformatzColumnsFormat.formatL   s/  ø€ ð &(ˆ	Ú:ˆÙØ�M‰M˜-Ô(Ø×ÒØ�M‰M˜)Ô$Ø×ÒØ�M‰M˜-Ô(Ø×Ñ˜Ô ð %Ÿl™l›n÷	
ñ 	
ñ ��UØ—>‘>Ô#Øò	
ð ð ×ÑÜ”W×/Ñ/°Ó5ØÜÓ7 Ô7¸Ó>õð	
ðð	
ˆ	ò 	
ð 	×Ñ˜Ô#àˆô ˆy‹>˜AÒÜ"*¨9Ó"5ÑˆL˜%ô �9‹~ Ò!Ø×#Ñ# A s§x¡xÑ/GÀÔ/GÓ'GÔHà#ò &�Ù!Ø" dÑ*�NØ #Ñ%‘ð&ð —{‘{“}ö
àØ�~‰~Ôð ×$Ñ$¤T¬'×*CÑ*CÀSÓ%IÕJð
ˆ	ð 
ñ Ø×Ñ˜Q ¨Ð 7Ô8Ü"*¨9Ó"5ÑˆL˜%Ø×Ñ  3§8¡8Ñ+C¸UÔ+CÓ#CÔDáØ $Ñ&�Ø#ò &�Ù!Ø" dÑ*�NØ #Ñ%‘ð&ð
 Ðùô_	
ùò:
s   Á;AHÅ(A Hc                óH  ‡— t         j                  j                  «       rt        nd„ Š ‰|j                  t        |j                  «      «      |j                   ‰|j                  t        |j                  «      «      | j                  |j                  «      g}|� |j                  | j                  |«      «       | j                  r3|j                  dj                  ˆfd„|j                  D «       «      «       | j                   r|j                  |j"                  «       |S )Nc                ó   — | S r<   r   )r   Ú_urls     r   ú<lambda>z,ColumnsFormat._format_vuln.<locals>.<lambda>˜   s   € È€ r   z, c              3  óB   •K  — | ]  } ‰|t        |«      «      –— Œ y ­wr<   )r   )r>   ÚaÚlinks     €r   r@   z-ColumnsFormat._format_vuln.<locals>.<genexpr>¢   s   øè ø€ Ò&UÀ1¡t¨A¬{¸1«~×'>Ñ&Uùs   ƒ)ÚsysÚstdoutÚisattyr   Úcanonical_namer   ÚversionÚidr   Ú_format_fix_versionsÚfix_versionsrI   Ú_format_applied_fixr1   r%   Úaliasesr0   Údescription)r2   r=   rZ   Úapplied_fixrW   rg   s        @r   rL   zColumnsFormat._format_vuln’   sÞ   ø€ ô !ŸZ™Z×.Ñ.Ô0�zÑ6Mˆá�×#Ñ#¤X¨c×.@Ñ.@Ó%AÓBØ�K‰KÙ�—‘œ+ d§g¡gÓ.Ó/Ø×%Ñ% d×&7Ñ&7Ó8ð	
ˆ	ð Ð"Ø×Ñ˜T×5Ñ5°kÓBÔCØ×ÒØ×Ñ˜TŸY™YÓ&UÈÏÉÔ&UÓUÔVØ×ÒØ×Ñ˜T×-Ñ-Ô.ØÐr   c                ó\   — dj                  |D �cg c]  }t        |«      ‘Œ c}«      S c c}w )Nú,)r%   r#   )r2   ro   rl   s      r   rn   z"ColumnsFormat._format_fix_versions§   s#   € Ø�x‰x°\ÖB¨'œ˜W�ÒBÓCÐCùÒBs   �)c                ó2   — |j                   |j                  gS r<   )rk   Úskip_reason)r2   r=   s     r   rS   z!ColumnsFormat._format_skipped_depª   s   € à×ÑØ�O‰Oð
ð 	
r   c                ó€  — |j                  «       rWt        t        j                  |«      }d|j                  j
                  › d|j                  j                  › d|j                  › �S t        t        j                  |«      }d|j                  j
                  › d|j                  j                  › d|j                  › d�S )NzFailed to fix z (z): zSuccessfully upgraded z => ú))	rK   r   ÚfixÚSkippedFixVersionr=   rk   rl   rw   ÚResolvedFixVersion)r2   rs   s     r   rp   z!ColumnsFormat._format_applied_fix°   s±   € Ø×!Ñ!Ô#Üœs×4Ñ4°kÓBˆKà  §¡×!?Ñ!?Ð @ÀÀ;Ç?Á?×CZÑCZÐB[Ð[^Ø×*Ñ*Ð+ð-ðô œ3×1Ñ1°;Ó?ˆà$ [§_¡_×%CÑ%CÐ$DÀBÀ{ÇÁ×G^ÑG^ÐF_ð `Ø×%Ñ%Ð& að)ð	
r   N)r0   Úboolr1   r}   )Úreturnr}   )rU   z;dict[service.Dependency, list[service.VulnerabilityResult]]rV   zlist[fix.FixVersion]r~   r#   )r=   zservice.ResolvedDependencyrZ   zservice.VulnerabilityResultrs   zfix.FixVersion | Noner~   ú	list[Any])ro   zlist[Version]r~   r#   )r=   zservice.SkippedDependencyr~   r   )rs   zfix.FixVersionr~   r#   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r3   Úpropertyr5   r`   rL   rn   rS   rp   r   r   r   r.   r.   2   s�   „ ñó
-ð òó ððDàKðDð $ðDð 
ó	DðLà'ðð *ðð +ð	ð
 
óó*Dó
ô
r   r.   )r   r#   r   r#   r~   r#   )r   r#   r~   Úint)r   r#   r   r…   r~   r#   )r'   zIterable[Iterable[Any]]r~   ztuple[list[str], list[int]])rƒ   Ú
__future__r   Úrerh   Úcollections.abcr   Ú	itertoolsr   Útypingr   r   Úpackaging.versionr   Úpip_audit._fixÚ_fixrz   Úpip_audit._serviceÚ_servicerM   Ú	interfacer
   r   r   Úcompiler   r   r   r   r,   r.   r   r   r   ú<module>r’      sa   ðñõ #ã 	Û 
Ý $Ý !ß å %å Ý $ç AÑ Aàˆ2�:‰:Ð/Ó0€ó6ó
$ó
/ó
	ôI
Ð'õ I
r   