
    M                     
   d Z ddlm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
Z
dZd	Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d dej(                        Zy)z0Utilities for the container analysis data model.    )absolute_import)division)unicode_literalsN)container_data_util)requestsz  UNKNOWNc                       e Zd ZdZd Zy)SummaryResolverz?SummaryResolver is a base class for occurrence summary objects.c                      y)zresolve is called after all records are added to the summary.

    In this function, aggregate data can be calculated for display.
    N selfs    Klib/googlecloudsdk/api_lib/container/images/container_analysis_data_util.pyresolvezSummaryResolver.resolve#   s    
 	    N)__name__
__module____qualname____doc__r   r   r   r   r
   r
       s
    G	r   r
   c                   "    e Zd ZdZd Zd Zd Zy)PackageVulnerabilitiesSummaryzDPackageVulnerabilitiesSummary has information about vulnerabilities.c                 r    t        j                         | _        t        j                  t
              | _        y N)r   GetMessages(_PackageVulnerabilitiesSummary__messagescollectionsdefaultdictlistvulnerabilitiesr   s    r   __init__z&PackageVulnerabilitiesSummary.__init__.   s%    **,DO&2248Dr   c                     t        j                  |j                  j                        }| j                  |   j                  |       y r   )six	text_typevulnerabilityeffectiveSeverityr   append)r   occsevs      r   
add_recordz(PackageVulnerabilitiesSummary.add_record2   s5    
--));;
<C$$S)r   c                    d| _         d| _        | j                  j                         D ]  }|D ]  }| xj                   dz  c_         |j                  j
                  D ]Z  }|j                  j                  | j                  j                  j                  j                  k(  sE| xj                  dz  c_            t        | j                        | _        y )Nr      )total_vulnerability_foundnot_fixed_vulnerability_countr   valuesr$   packageIssuefixedVersionkindr   VersionKindValueValuesEnumMAXIMUMdict)r   occsr'   package_issues       r   r   z%PackageVulnerabilitiesSummary.resolve6   s    %&D")*D&$$++-#&&!+& ..;;M((--oo%%99AAB..!3.	 <  .   4 45Dr   N)r   r   r   r   r    r)   r   r   r   r   r   r   +   s    L9*6r   r   c                       e Zd ZdZd Zd Zy)ImageBasesSummaryz@PackageVulnerabilitiesSummary has information about image basis.c                     g | _         y r   )base_imagesr   s    r   r    zImageBasesSummary.__init__I   
    Dr   c                 :    | j                   j                  |       y r   )r;   r&   r   r'   s     r   r)   zImageBasesSummary.add_recordL       C r   Nr   r   r   r   r    r)   r   r   r   r9   r9   F   s    H!r   r9   c                       e Zd ZdZd Zd Zy)BuildsSummaryz+BuildsSummary has information about builds.c                     g | _         y r   )build_detailsr   s    r   r    zBuildsSummary.__init__S   s
    Dr   c                 :    | j                   j                  |       y r   )rD   r&   r>   s     r   r)   zBuildsSummary.add_recordV   s    c"r   Nr@   r   r   r   rB   rB   P   s    3#r   rB   c                       e Zd ZdZd Zd Zy)DeploymentsSummaryz5DeploymentsSummary has information about deployments.c                     g | _         y r   )deploymentsr   s    r   r    zDeploymentsSummary.__init__]   r<   r   c                 :    | j                   j                  |       y r   )rI   r&   r>   s     r   r)   zDeploymentsSummary.add_record`   r?   r   Nr@   r   r   r   rG   rG   Z   s    =!r   rG   c                       e Zd ZdZd Zd Zy)DiscoverySummaryz@DiscoveryResolver has information about vulnerability discovery.c                     g | _         y r   )	discoveryr   s    r   r    zDiscoverySummary.__init__g   s	    DNr   c                 :    | j                   j                  |       y r   )rN   r&   r>   s     r   r)   zDiscoverySummary.add_recordj   s    NN#r   Nr@   r   r   r   rL   rL   d   s    Hr   rL   c                   .     e Zd ZdZ fdZd Zd Z xZS )ContainerAndAnalysisDataa  Class defining container and analysis data.

  ContainerAndAnalysisData subclasses ContainerData because we want it to
  contain a superset of the attributes, particularly when `--format=json`,
  `format=value(digest)`, etc. is used with `container images describe`.
  c                    t         t        |   |j                  |j                  |j
                         t               | _        t               | _	        t               | _        t               | _        t               | _        y )N)registry
repositorydigest)superrQ   r    rS   rT   rU   r   package_vulnerability_summaryr9   image_basis_summaryrB   build_details_summaryrG   deployment_summaryrL   discovery_summary)r   name	__class__s     r   r    z!ContainerAndAnalysisData.__init__v   sb    	
"D24??4;; 3 P)F)HD&02D!.D02D-/Dr   c                    t        j                         }|j                  |j                  j                  j
                  k(  r| j                  j                  |       y |j                  |j                  j                  j                  k(  r| j                  j                  |       y |j                  |j                  j                  j                  k(  r| j                  j                  |       y |j                  |j                  j                  j                  k(  r| j                  j                  |       y |j                  |j                  j                  j                  k(  r| j                  j                  |       y y r   )r   r   r1   
Occurrencer3   VULNERABILITYrW   r)   IMAGErX   BUILDrY   
DEPLOYMENTrZ   	DISCOVERYr[   )r   
occurrencemessagess      r   r)   z#ContainerAndAnalysisData.add_record   s   ##%H8..BBPPP
((33J?	H//CCII	I
))*5	H//CCII	I
  ++J78..BBMMM
((4
//



1
1
;
;<
''
3<r   c                    | j                   j                          | j                  j                          | j                  j                          | j                  j                          | j
                  j                          y r   )rW   r   rX   rY   rZ   r[   r   s    r   resolveSummariesz)ContainerAndAnalysisData.resolveSummaries   s\    &&..0$$&&&(##%""$r   )r   r   r   r   r    r)   rh   __classcell__)r]   s   @r   rQ   rQ   n   s    04 %r   rQ   )r   
__future__r   r   r   r   'googlecloudsdk.api_lib.container.imagesr   (googlecloudsdk.api_lib.containeranalysisr   r"   _INDENT_NULL_SEVERITYobjectr
   r   r9   rB   rG   rL   ContainerDatarQ   r   r   r   <module>rq      s    7 &  '  G = 
 	f 	6O 66! !#O #! ! &%2@@ &%r   