
                         J   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mZ dd	lmZ ej                   G d
 d             Zej"                   ej$                  ej&                  j(                         G d dej*                                      ZddddZee_        y)z=`gcloud access-context-manager policies quotas list` command.    )absolute_import)division)unicode_literalsN)levels)zones)base)policiesc                   "    e Zd ZU eed<   eed<   y)MetrictitleusageN)__name__
__module____qualname__str__annotations__int     :lib/surface/access_context_manager/policies/quotas/list.pyr   r      s    	*	*r   r   c                   <    e Zd ZdZdZd Zd Zd Zed        Z	d Z
y)	ListPoliciesQuotaszLists the Quota Usage.v1alphac                    t        |      }t        |      }d}d}d}| j                  |      }|D ]  }g }	|j                  r|	j	                  |j                         |j
                  r|	j	                  |j
                         |	D ]J  }
|t        |
j                        z  }|t        |
j                        z  }|t        |
j                        z  }L  t        d|      t        d|      t        d|      t        d|      t        d|      gS )zyReturns service primeters quota usage.

    Args:
      perimeters_to_display: Response of ListServicePerimeters API
    r   zService primeterszProtected resourceszIngress ruleszEgress ruleszTotal ingress/egress attributes)
listlenGetTotalIngressEgressAttributesstatusappendspec	resourcesingressPoliciesegressPoliciesr   )selfperimeters_to_display	argumentsservice_primetersprotected_resourcesingress_rulesegress_rulestotal_ingress_egress_attributesmetricconfigsconfigs              r   GetPrimetersQuotaUsagez)ListPoliciesQuotas.GetPrimetersQuotaUsage*   s    *+IIML&*&J&J'# g	v}}%	v{{#&s6#3#344V3344F1122   	"$56$&9:.~|,-/N	
 r   c                 R    d}|D ]  }|j                   s|dz  } t        d|      gS )zReturns levels quota usage, only counts basic access levels.

    Args:
      levels_to_display: Response of ListAccessLevels API
    r      zAccess levels)basicr   )r$   levels_to_displayaccess_levelslevels       r   GetLevelsQuotaUsagez&ListPoliciesQuotas.GetLevelsQuotaUsageO   s6     M"	 # ?M233r   c                 <   d}|D ]  }g }|j                   r|j                  |j                          |j                  r|j                  |j                         |D ]:  }|j                  r|j                  D ]  }|t	        |j
                  j                        z  }|t	        |j
                  j                        z  }|t        d |j                  j                  D              z  }|t	        |j                  j                        z  } |j                  s|j                  D ]o  }|t	        |j                  j                        z  }|t        d |j                  j                  D              z  }|t	        |j                  j                        z  }q =  |S )zReturns total ingress/egress attributes quota usage.

    Args:
      perimeters_to_display: Response of ListServicePerimeters API
    r   c              3   F   K   | ]  }t        |j                          y wNr   methodSelectors.0os     r   	<genexpr>zEListPoliciesQuotas.GetTotalIngressEgressAttributes.<locals>.<genexpr>m   s#      "<A A%%&<   !c              3   F   K   | ]  }t        |j                          y wr9   r:   r<   s     r   r?   zEListPoliciesQuotas.GetTotalIngressEgressAttributes.<locals>.<genexpr>u   s#      ":A A%%&:r@   )r   r   r    r"   r   ingressFromsources
identitiessum	ingressTo
operationsr!   r#   
egressFromegressTo)r$   r%   elements_countr,   r-   r.   ingress_policyegress_policys           r   r   z2ListPoliciesQuotas.GetTotalIngressEgressAttributes[   sk    N'g	v}}%	v{{#&!! & 6 6nc."<"<"D"DEENc."<"<"G"GHHNc "'11<<"  N c.":":"D"DEEN !7   %44mc-":":"E"EFFNc "&//::"  N c-"8"8"B"BCCN  5  (0 r   c                     t        j                  | d       t        j                  j	                  |        | j
                  j                  d       y )Nzto list the quota usageztable(title, usage))r	   AddResourceArgr   URI_FLAGRemoveFromParserdisplay_info	AddFormat)parsers    r   ArgszListPoliciesQuotas.Args|   s:    F$=>MM""6*
!!"78r   c                 \   t        j                  | j                        }t        j                  | j                        }|j                  j
                  j                         }|j                  |      }|j                  |      }| j                  |      }| j                  |      }||z   S )N)version)
perimeters_apiClient_API_VERSION
levels_apiCONCEPTSpolicyParseListr/   r6   )	r$   argsperimeters_clientlevels_client
policy_refr3   r%   primeters_quota_usagelevels_quota_usages	            r   RunzListPoliciesQuotas.Run   s    &--d6G6GH%%d.?.?@M%%++-J%**:6-22:> 778MN112CD #555r   N)r   r   r   __doc__rY   r/   r6   r   staticmethodrT   re   r   r   r   r   r   #   s6     ,#J
4B 9 9
6r   r   zAList the quota usage of a specific Access Context Manager policy.a  List quota usage of a specific Access Context Manager policy, also known as an access policy. Metrics include: Serivce perimeters, Protected resources, Ingress rules, Egress rules, Access rules and Total ingress/egress attributes. For access levels, this only counts basic access levels.a  
       To list the quota usage of a specific Access Context Manager policy:

       $ {command} POLICY

Sample output:

  ===
    TITLE                            USAGE
    Service primeters                1
    Protected resources              1
    Ingress rules                    1
    Egress rules                     1
    Total ingress/egress attributes  3
    Access levels                    1
)briefDESCRIPTIONEXAMPLES)rf   
__future__r   r   r   dataclasses+googlecloudsdk.api_lib.accesscontextmanagerr   rZ   r   rW   googlecloudsdk.callioper   /googlecloudsdk.command_lib.accesscontextmanagerr	   	dataclassr   HiddenReleaseTracksReleaseTrackALPHAListCommandr   detailed_helpr   r   r   <module>rw      s    D &  '  L O ( D   
 D%%++,i6)) i6 - i6\ 	L	 : $1   r   