
                             S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SS	K
Jr  SS
KJr  SSKJr  SSKJr  SSS.rS rS rS rS r\R.                  " \R0                  R2                  5      \R4                  \R6                   " S S\R8                  5      5       5       5       r\R.                  " \R0                  R<                  5      \R4                  \R6                   " S S\R8                  5      5       5       5       r\R.                  " \R0                  R@                  5      \R4                  \R6                   " S S\R8                  5      5       5       5       r!g)z4Updates a user's database roles in a given instance.    )absolute_import)division)unicode_literals)api_util)	instances)
operations)base)
exceptions)flags)users)
propertiesz{description}a            To grant database roles ``role1'' and ``role2'' for ``my-user'' in instance ``prod-instance'', run:

            $ {command} my-user --instance=prod-instance --database-roles=role1,role2 --type=BUILT_IN

          To revoke existing database roles and grant new database roles ``role3'' and ``role4'' for ``my-user'' in instance
          ``prod-instance'', run:

            $ {command} my-user --instance=prod-instance --revoke-existing-roles --database-roles=role3,role4 --type=BUILT_IN
          )DESCRIPTIONEXAMPLESc                 @   [         R                  " U 5        [         R                  " U 5        [         R                  " U 5        [         R                  " U SS9  [         R
                  " U 5        [         R                  " U 5        U R                  R                  S5        g)Args is called by calliope to gather arguments for this command.

Args:
  parser: An argparse parser that you can use it to add arguments that go on
    the command line after this command. Positional arguments are allowed.
T)requiredN)	r   AddInstanceAddUsernameAddHostAddTypeAddDatabaseRolesAddRevokeExistingRolesdisplay_infoAddCacheUpdaterparsers    %lib/surface/sql/users/assign_roles.pyAddBaseArgsr   0   sj     FF----& v&%%d+    c                     A g N r   s    r   AddBetaArgsr#   @       r   c                     A g r!   r"   r   s    r   AddAlphaArgsr&   E   r$   r   c                    [         R                  " [         R                  5      nUR                  nUR                  nUR
                  R                  U R                  S[        R                  R                  R                  R                  0SS9nUR                  R                  UR                  UR                  UR                  S95      n[         R"                  R%                  UR&                  5      nU R(                  nU R*                  n[,        R.                  " X05      n	XR0                  R2                  R4                  :X  aJ  U(       aC  SU;  a  [6        R8                  " SSS9eUR;                  S5      S	   nUR;                  S5      S
   nU(       aZ  U	UR0                  R2                  R<                  UR0                  R2                  R>                  4;   a  UR;                  S5      S
   nSnUR,                  R                  URA                  UR                  U R                  UUS95      n
U
RB                  n	U
RD                  nXR0                  R2                  R<                  :X  dH  U	UR0                  R2                  R>                  :X  d$  U	UR0                  R2                  R4                  :X  a  U
RF                  (       a  U
RF                  nSnUR,                  RI                  URK                  UR                  U R                  UUUR1                  UR                  U R                  UU
RB                  S9U RL                  U RN                  S95      nUR
                  RQ                  SURD                  UR                  S9nU RR                  (       a=  URT                  R                  URW                  UR                  URX                  S95      $ [T        RZ                  R]                  X,S5        g)zUpdates a user's database roles in a given instance.

Args:
  args: argparse.Namespace, The arguments that this command was invoked
    with.

Returns:
  SQL user resource iterator.
projectzsql.instances)params
collection)r(   instance@usernamezRCloud SQL IAM groups must be specified with the domain name in the username field.)message   r   %)r(   r+   namehost )r(   r+   r1   type)r(   r+   r1   r2   userdatabaseRolesrevokeExistingRoleszsql.operations)	operationr(   )r(   r8   zUpdating Cloud SQL userN)/r   	SqlClientAPI_VERSION_DEFAULT
sql_clientsql_messagesresource_parserParser+   r   VALUEScorer(   	GetOrFailr   GetSqlInstancesGetRequestinstances_api_utilInstancesV1Beta4IsMysqlDatabaseVersiondatabaseVersionr-   r2   r   ParseUserTypeUserTypeValueValuesEnumCLOUD_IAM_GROUPr
   InvalidArgumentExceptionsplitCLOUD_IAM_USERCLOUD_IAM_SERVICE_ACCOUNTSqlUsersGetRequestr4   r1   iamEmailUpdateSqlUsersUpdateRequestdatabase_rolesrevoke_existing_rolesCreateasync_r   SqlOperationsGetRequestr8   OperationsV1Beta4WaitForOperation)argsclientr;   r<   instance_refr+   is_mysqlr1   r2   	user_typer5   result_operationoperation_refs                r   RunBaseAssignRolesCommandrb   J   s    h::;&  *$$,''--
mm**//77AAB  . , !!%%))&&1F1F * (
  00GG( 
$	$!!,5)$$88HHH
 $//
%  ::c?1D::c?1D) ++::++EE	   ::c?1DD					%%&&==	 & 
$ ii)	$$$88GGG					.	.	H	H
I					.	.	>	>
? }}]]dD%%,,((&&==  "**}}99	 ! 
 ++"88 ) :; ((// %%"" 0 $- 
[[  $$,,!))]5L5L 	- 	NO O //
0IKr   c                   2    \ rS rSrSr\r\S 5       rS r	Sr
g)AssignRoles   Updates a user's database roles in a given instance.

Updates a user's database roles in a given instance with a specified
username and host.
c                 X    [        U 5        [        R                  R                  U 5        gr   N)r   r	   
ASYNC_FLAGAddToParserr   s    r   ArgsAssignRoles.Args   s     OO'r   c                     [        U5      $ r!   rb   selfr[   s     r   RunAssignRoles.Run       $T**r   r"   N__name__
__module____qualname____firstlineno____doc__DETAILED_HELPdetailed_helpstaticmethodrk   rq   __static_attributes__r"   r   r   rd   rd      s%      -( (+r   rd   c                   2    \ rS rSrSr\r\S 5       rS r	Sr
g)AssignRolesBeta   rf   c                 n    [        U 5        [        U 5        [        R                  R	                  U 5        grh   )r#   r   r	   ri   rj   r   s    r   rk   AssignRolesBeta.Args   s&     OO'r   c                     [        U5      $ r!   rn   ro   s     r   rq   AssignRolesBeta.Run   rs   r   r"   Nrt   r"   r   r   r   r      s%      -	( 	(+r   r   c                   2    \ rS rSrSr\r\S 5       rS r	Sr
g)AssignRolesAlpha   rf   c                     [        U 5        [        U 5        [        U 5        [        R                  R                  U 5        grh   )r&   r#   r   r	   ri   rj   r   s    r   rk   AssignRolesAlpha.Args   s.     OO'r   c                     [        U5      $ r!   rn   ro   s     r   rq   AssignRolesAlpha.Run  rs   r   r"   Nrt   r"   r   r   r   r      s%      -
( 
(+r   r   N)"ry   
__future__r   r   r   googlecloudsdk.api_lib.sqlr   r   rD   r   googlecloudsdk.callioper	   r
   googlecloudsdk.command_lib.sqlr   r   googlecloudsdk.corer   rz   r   r#   r&   rb   ReleaseTracksReleaseTrackGAUniverseCompatibleHiddenUpdateCommandrd   BETAr   ALPHAr   r"   r   r   <module>r      sI   ; &  ' / F 1 ( . 0 0 *
 				", 

iKX D%%(()+$$$ +   *+0 D%%**++d(( +   ,+2 D%%++,+t)) +   -+r   