
                         x    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 Zd	 Zd
 Z G d de      Zy)z,Utilities for IAM commands to call IAM APIs.    )absolute_import)division)unicode_literals)
list_pager)apis)iam_utilc                  J    t        j                  dd      } | | j                  fS )Niamv1r   GetClientInstanceMESSAGES_MODULEclients    &lib/googlecloudsdk/api_lib/iam/util.pyGetClientAndMessagesr      s%    !!%.&	''	''    c                  J    t        j                  dd      } | | j                  fS )Niamcredentialsr   r   r   s    r   "GetIamCredentialsClientAndMessagesr       s&    !!"2D9&	''	''r   c                     t        j                  | j                  |j                  t	        j
                  |      d      dddd      S )zReturns the testable permissions for a resource.

  Args:
    iam_client: The iam client.
    messages: The iam messages.
    resource: Resource reference.

  Returns:
    List of permissions.
  i  )fullResourceNamepageSizeQueryTestablePermissionspermissionsr   )
batch_sizemethodfieldbatch_size_attribute)r   YieldFromListr   QueryTestablePermissionsRequestr   GetFullResourceName)
iam_clientmessagesresources      r   GetTestablePermissionsr&   %   sR     
	!	!..#77A /  '%
' 'r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	PermissionsHelpera(  Get different kinds of permissions list from permissions provided.

  Attributes:
    messages: The iam messages.
    source_permissions: A list of permissions to inspect.
    testable_permissions_map: A dict maps from permissions name string to
        Permission message provided by the API.
  c                     || _         || _        i | _        |r,t        |||      D ]  }|| j                  |j                  <    yy)ai  Create a PermissionsHelper object.

    To get the testable permissions for the given resource and store as a dict.

    Args:
      iam_client: The iam client.
      messages: The iam messages.
      resource: Resource reference for the project/organization whose
      permissions are being inspected.
      permissions: A list of permissions to inspect.
    N)r$   source_permissionstestable_permissions_mapr&   name)selfr#   r$   r%   r   
permissions         r   __init__zPermissionsHelper.__init__E   sK     DM)D$&D!.z8XN*9C%%joo6 O r   c                     g }| j                   D ]g  }|| j                  v s| j                  |   j                  | j                  j                  j
                  j                  k(  sW|j                  |       i |S )z?Returns the TESTING permissions among the permissions provided.)r*   r+   customRolesSupportLevelr$   
Permission&CustomRolesSupportLevelValueValuesEnumTESTINGappend)r-   testing_permissionsr.   s      r   GetTestingPermissionsz'PermissionsHelper.GetTestingPermissionsY   so    --

55
5((4LL==##JJ7 	"":. . r   c                     g }| j                   D ]g  }|| j                  v s| j                  |   j                  | j                  j                  j
                  j                  k7  sW|j                  |       i |S )z=Returns the valid permissions among the permissions provided.r*   r+   r1   r$   r2   r3   NOT_SUPPORTEDr5   )r-   valid_permissionsr.   s      r   GetValidPermissionsz%PermissionsHelper.GetValidPermissionsd   so    --

55
5((4LL==##JJ= 	  , . r   c                     g }| j                   D ]g  }|| j                  v s| j                  |   j                  | j                  j                  j
                  j                  k(  sW|j                  |       i |S )zEReturns the not supported permissions among the permissions provided.r9   )r-   not_supported_permissionsr.   s      r   GetNotSupportedPermissionsz,PermissionsHelper.GetNotSupportedPermissionso   so     "--

55
5((4LL==##JJ= 	"((4 . %$r   c                 *   g }| j                   D ]  }|| j                  v s| j                  |   j                  | j                  j                  j
                  j                  k7  sW| j                  |   j                  sq|j                  |        |S )zDReturns the API disabled permissions among the permissions provided.)	r*   r+   r1   r$   r2   r3   r:   apiDisabledr5   )r-   api_disabled_permissionsr.   s      r   GetApiDisabledPermissonsz*PermissionsHelper.GetApiDisabledPermissonsz   s    !--

55
5((4LL==##JJ= 
'
'

3
?
? ''
3 . $#r   c                 l    g }| j                   D ]"  }|| j                  vs|j                  |       $ |S )zFReturns the not applicable permissions among the permissions provided.)r*   r+   r5   )r-   not_applicable_permissionsr.   s      r   GetNotApplicablePermissionsz-PermissionsHelper.GetNotApplicablePermissions   s<    !#--
	488	8"))*5 . &%r   N)
__name__
__module____qualname____doc__r/   r7   r<   r?   rC   rF    r   r   r(   r(   ;   s&    D(			%
$&r   r(   N)rJ   
__future__r   r   r   apitools.base.pyr   googlecloudsdk.api_lib.utilr   googlecloudsdk.command_lib.iamr   r   r   r&   objectr(   rK   r   r   <module>rQ      s9     3 &  ' ' , 3(
(
',Q& Q&r   