
    ܖi#                    r    d 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 ddlmZ ddlmZ  G d	 d
e      Zy)zI
Functionality for formatting vulnerability results as a Markdown table.
    )annotations)dedent)cast)VersionN   )VulnerabilityFormatc                      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	 	 	 	 dd	Zdd
Zy)MarkdownFormatzx
    An implementation of `VulnerabilityFormat` that formats vulnerability results as a set of
    Markdown tables.
    c                     || _         || _        y)a  
        Create a new `MarkdownFormat`.

        `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)selfr   r   s      ^/var/www/html/content-pipeline/venv/lib/python3.12/site-packages/pip_audit/_format/markdown.py__init__zMarkdownFormat.__init__   s     ',    c                     y)z8
        See `VulnerabilityFormat.is_manifest`.
        F )r   s    r   is_manifestzMarkdownFormat.is_manifest%   s    
 r   c                h    | j                  ||      }| j                  |      }|r|r|dz  }||z  }|S )z|
        Returns a Markdown formatted string representing a set of vulnerability results and applied
        fixes.
        
)_format_vuln_results_format_skipped_deps)r   resultfixesoutputskipped_deps_outputs        r   formatzMarkdownFormat.format,   sH     **659"77? $))Fr   c           	       	 d}d}|r
|dz  }|dz  }| j                   r
|dz  }|dz  }| j                  r
|dz  }|dz  }g }|j                         D ]n  \  	}	j                         rt	        t
        j                  	      	t        	fd|D        d       }|D ]$  }|j                  | j                  	||             & p |syt        d	| d	| d	      d
j                  |      z   S )Nz"Name | Version | ID | Fix Versionsz--- | --- | --- | ---z | Applied Fixz | ---z
 | Aliasesz | Descriptionc              3  B   K   | ]  }|j                   k(  s|  y w)N)dep).0fr    s     r   	<genexpr>z6MarkdownFormat._format_vuln_results.<locals>.<genexpr>U   s     AaAEESLAs    
            r   )r   r   items
is_skippedr   serviceResolvedDependencynextappend_format_vulnr   join)
r   r   r   headerborder	vuln_rowsvulnsapplied_fixvulnr    s
            @r   r   z#MarkdownFormat._format_vuln_results?   s'   
 6(&&FhFl"FhF&&FhF!	 ,,. 	LJC~~w1137CA5A4HK L  !2!23k!JKL	L H H 

 IIi ! 	!r   c           	     V   |j                    d|j                   d|j                   d| j                  |j                         }||d| j                  |       z  }| j                  r!|ddj                  |j                         z  }| j                  r|d|j                   z  }|S )N | z, )canonical_nameversionid_format_fix_versionsfix_versions_format_applied_fixr   r-   aliasesr   description)r   r    r3   r2   	vuln_texts        r   r,   zMarkdownFormat._format_vulnc   s     !!"#ckk]#dggYc(():):;<> 	 "3t77DEFFI3tyy6788I3t//011Ir   c                \    dj                  |D cg c]  }t        |       c}      S c c}w )N,)r-   str)r   r:   r7   s      r   r9   z#MarkdownFormat._format_fix_versionsu   s#    xx\B'WBCCBs   )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 => ))	r'   r   fixSkippedFixVersionr    r6   r7   skip_reasonResolvedFixVersion)r   r2   s     r   r;   z"MarkdownFormat._format_applied_fixx   s    !!#s44kBK !?!? @;??CZCZB[[^**+- 311;?$[__%C%C$DB{G^G^F_ `%%&a)	
r   c                "   d}d}g }|j                         D ]P  \  }}|j                         st        t        j                  |      }|j                  | j                  |             R |syt        d| d| d      dj                  |      z   S )NzName | Skip Reasonz	--- | ---r$   r%   r   )	r&   r'   r   r(   SkippedDependencyr+   _format_skipped_depr   r-   )r   r   r.   r/   skipped_dep_rowsr    _s          r   r   z#MarkdownFormat._format_skipped_deps   s     &&(lln 	GFC~~744c: ''(@(@(EF	G
  H H 

 II&'( 	(r   c                8    |j                    d|j                   S )Nr5   )namerF   )r   r    s     r   rJ   z"MarkdownFormat._format_skipped_dep   s    ((3s/00r   N)r   boolr   rO   returnNone)rP   rO   )r   ;dict[service.Dependency, list[service.VulnerabilityResult]]r   zlist[fix.FixVersion]rP   rA   )r    zservice.ResolvedDependencyr3   zservice.VulnerabilityResultr2   zfix.FixVersion | NonerP   rA   )r:   zlist[Version]rP   rA   )r2   zfix.FixVersionrP   rA   )r   rR   rP   rA   )r    zservice.SkippedDependencyrP   rA   )__name__
__module____qualname____doc__r   propertyr   r   r   r,   r9   r;   r   rJ   r   r   r   r
   r
      s    
-  K $ 
	&"!K"! $"! 
	"!H' * +	
 
$D
(Q(	(,1r   r
   )rV   
__future__r   textwrapr   typingr   packaging.versionr   pip_audit._fix_fixrD   pip_audit._service_servicer(   	interfacer   r
   r   r   r   <module>ra      s0    #   %  $ *J1( J1r   