
                            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 command.    )absolute_import)division)unicode_literalsN)
exceptions)api)base)endpoint_group_flags)labels_utilz
          Update a intercept endpoint groups. Check the progress of endpoint
          group update by using `gcloud network-security intercept-endpoint-groups list`.

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

            $ {command} my-endpoint-group --project=my-project --location=us-central1-a --update-labels=k1=v1,k2=v2

            To remove labels k3 and k4, run:

            $ {command} my-endpoint-group --project=my-project --location=us-central1-a --remove-labels=k3,k4

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

            $ {command} my-endpoint-group --project=my-project --location=us-central1-a --clear-labels

            To update description to 'new description', run:

            $ {command} my-endpoint-group --project=my-project --location=us-central1-a --description='new description'
        )DESCRIPTIONEXAMPLESc                   :    e Zd ZdZg dZed        Zd Zd Zd Z	y)Updatez"Update a Intercept Endpoint Group.)z--clear-labelsz--remove-labelsz--update-labelsc                 J   t        j                  | j                         |       t        j                  |d       t        j                  |       t
        j                  j                  |       t
        j                  j                  |d       t        j                  |       y )N20mT)r	   AddEndpointGroupResourceReleaseTrack
AddMaxWaitAddDescriptionArgr   
ASYNC_FLAGAddToParser
SetDefaultr
   AddUpdateLabelsFlags)clsparsers     @lib/surface/network_security/intercept_endpoint_groups/update.pyArgszUpdate.ArgsI   ss    11#2B2B2DfM## **62OO'OOvt,$$V,    c                    t        j                  | j                               }|j                  j                  j                         }	 |j                  |j                               }i }| j                  |||      }|r||d<   |st        j                  | j                        |j                  |j                         t!        |dd      |      }|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-groupz(Intercept endpoint group does not exist.labelsdescription )namer    update_fieldsformatdefault)seconds)r   Clientr   CONCEPTSintercept_endpoint_groupParseDescribeEndpointGroupRelativeNameapitools_exceptionsHttpNotFoundErrorr   InvalidArgumentException_process_label_updatesMinimumArgumentException_valid_argumentsUpdateEndpointGroupgetattrasync_IsSpecifiedr$   _wait_for_operationdatetime	timedeltamax_wait)selfargsclientegoriginalr#   r   	operations           r   Runz
Update.RunU   sA   ZZ))+,F		/	/	5	5	7B--boo.?@h M((x@F &mH//0E0EFF**__D-4# + I {{ h'##
4==1	 9 00 //
$
4 s   	D* **Ec                    t         j                  j                  |      }|j                         sy|j                  }|j                  |j                  j                  j                  |      }|j                  r|j                  }|S )a@  Processes the label update request.

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

    Returns:
      the labels we would like to update if there is any update. Otherwise,
      it returns None.
    N)
r
   DiffFromUpdateArgsMayHaveUpdatesr   ApplymessagesInterceptEndpointGroupLabelsValueneeds_update)r;   r=   r<   original_eglabels_diffr   labels_updates          r   r0   zUpdate._process_label_updates~   su     ""11$7K%%'F%%..::M !!##fMr   c                     |j                  |j                  |      dj                  |j                               d|      S )Nz7waiting for intercept endpoint group [{}] to be updatedF)operation_refmessage
has_resultr:   )WaitForOperationGetOperationRefr$   r,   )r;   r=   r@   r>   r:   s        r   r7   zUpdate._wait_for_operation   sH    "",,Y7ELL!  # 	 	r   N)
__name__
__module____qualname____doc__r2   classmethodr   rA   r0   r7    r   r   r   r   <   s3    
 + 	- 	-'R4
r   r   )rW   
__future__r   r   r   r8   apitools.base.pyr   r-   Agooglecloudsdk.api_lib.network_security.intercept_endpoint_groupsr   googlecloudsdk.callioper   5googlecloudsdk.command_lib.network_security.interceptr	   $googlecloudsdk.command_lib.util.argsr
   DETAILED_HELPDefaultUniverseOnlyReleaseTracksr   ALPHABETAGAUpdateCommandr   detailed_helprY   r   r   <module>rh      s    % &  '  > Q ( . V <6 T..33T5F5F5I5IbT b bJ % r   