
                            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 dd	lmZ dd
lmZ dddZej$                   ej&                  ej(                  j*                  ej(                  j,                  ej(                  j.                         G d dej0                                      Zee_        y)z*Update endpoint group association command.    )absolute_import)division)unicode_literalsN)
exceptions)api)base) endpoint_group_association_flags)labels_utila  
          Update an intercept endpoint group association. Check the progress of association update
          by using `gcloud network-security intercept-endpoint-group-associations list`.

          For examples refer to the EXAMPLES section below.
        a  
            To update labels k1 and k2, run:

            $ {command} my-association --project=my-project --location=global --update-labels=k1=v1,k2=v2

            To remove labels k3 and k4, run:

            $ {command} my-association --project=my-project --location=global --remove-labels=k3,k4

            To clear all labels from the intercept endpoint group association, run:

            $ {command} my-association --project=my-project --location=global --clear-labels
        )DESCRIPTIONEXAMPLESc                   :    e Zd ZdZg dZed        Zd Zd Zd Z	y)Updatez/Update an Intercept Endpoint Group Association.)z--clear-labelsz--remove-labelsz--update-labelsc                     t        j                  | j                         |       t        j                  |d       t        j
                  j                  |       t        j
                  j                  |d       t        j                  |       y )N20mT)
r	   #AddEndpointGroupAssociationResourceReleaseTrack
AddMaxWaitr   
ASYNC_FLAGAddToParser
SetDefaultr
   AddUpdateLabelsFlags)clsparsers     Llib/surface/network_security/intercept_endpoint_group_associations/update.pyArgszUpdate.ArgsD   sj    $HHF %// 	OO'OOvt,$$V,    c                    t        j                  | j                               }|j                  j                  j                         }	 |j                  |j                               }i }| j                  |||      }|r||d<   |st        j                  | j                        |j                  |j                         |      }|j                   r|j#                  d      sd|_        |S | j'                  |||t)        j*                  |j,                              S # t        j                  $ r t        j                  dd      w xY w)Nz$intercept-endpoint-group-associationz4Intercept endpoint group association does not exist.labels)nameupdate_fieldsformatdefault)seconds)r   Clientr   CONCEPTS$intercept_endpoint_group_associationParse DescribeEndpointGroupAssociationRelativeNameapitools_exceptionsHttpNotFoundErrorr   InvalidArgumentException_process_label_updatesMinimumArgumentException_valid_argumentsUpdateEndpointGroupAssociationasync_IsSpecifiedr!   _wait_for_operationdatetime	timedeltamax_wait)selfargsclientassociationoriginalr    r   	operations           r   Runz
Update.RunQ   s<   ZZ))+,F--DDJJLK88

"
"
$h M((x@F &mH//0E0EFF55%%'# 6 I {{ h'##4==1	 7 00 //
0
@ s   	D *Ec                    t         j                  j                  |      }|j                         sy|j                  }|j                  |j                  j                  j                  |      }|j                  r|j                  S |S )aU  Processes the label update request.

    Args:
      client: the client to use to make the API call.
      args: the args from the command line.
      original_association: the original intercept endpoint group association.

    Returns:
      the labels we would like to update if there is any update. Otherwise,
      it returns None.
    N)
r
   DiffFromUpdateArgsMayHaveUpdatesr   Applymessages!InterceptEndpointGroupAssociationLabelsValueneeds_update)r7   r9   r8   original_associationlabels_diffr   labels_updates          r   r-   zUpdate._process_label_updates{   sv     ""11$7K%%'!((F%%99EEM !!!!!Mr   c                     |j                  |j                  |      dj                  |j                               d|      S )NzCwaiting for intercept endpoint group association [{}] to be updatedF)operation_refmessage
has_resultr6   )WaitForOperationGetOperationRefr!   r)   )r7   r9   r<   r:   r6   s        r   r3   zUpdate._wait_for_operation   sF    "",,Y7vk6689 #  r   N)
__name__
__module____qualname____doc__r/   classmethodr   r=   r-   r3    r   r   r   r   7   s3    
 8 
- 
-(T4	r   r   )rS   
__future__r   r   r   r4   apitools.base.pyr   r*   Mgooglecloudsdk.api_lib.network_security.intercept_endpoint_group_associationsr   googlecloudsdk.callioper   5googlecloudsdk.command_lib.network_security.interceptr	   $googlecloudsdk.command_lib.util.argsr
   DETAILED_HELPDefaultUniverseOnlyReleaseTracksr   ALPHABETAGAUpdateCommandr   detailed_helprU   r   r   <module>rd      s    1 &  '  > ] ( . b <. T..33T5F5F5I5IcT c cL % r   