
    $                     V   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dlmZ dd	lmZ  ej                  ej                   j"                  ej                   j$                  ej                   j&                        ej(                   G d
 dej*                                      Zy)z&Command for updating network peerings.    )absolute_import)division)unicode_literals)base_classes)base)
exceptions)flags)
propertiesc                   6    e Zd ZdZdZed        Zd Zd Zd Z	y)Updatea  Update a Compute Engine network peering.

  ## EXAMPLES

  To update the peering named peering-name to both export and import custom
  routes, run:

    $ {command} peering-name \
      --export-custom-routes \
      --import-custom-routes


  To update the peering named peering-name to both export and import subnet
  routes with public ip, run:

    $ {command} peering-name \
      --export-subnet-routes-with-public-ip \
      --import-subnet-routes-with-public-ip
  Fc                 N   |j                  dd       |j                  ddd       t        j                  |       t        j                  |       t        j                  |       t        j
                  |       t        j                  |       t        j                  |       y )NnamezThe name of the peering.)helpz	--networkTzRThe name of the network in the current project to be peered with the peer network.)requiredr   )add_argumentr	   AddImportCustomRoutesFlagAddExportCustomRoutesFlag%AddImportSubnetRoutesWithPublicIpFlag%AddExportSubnetRoutesWithPublicIpFlagAddStackTypeAddUpdateStrategy)clsparsers     /lib/surface/compute/networks/peerings/update.pyArgszUpdate.Args7   s    
%?@
%	   
##F+	##F+	//7	//7	v	F#    c                    | j                  |       t        j                  | j                               }|j                  }| j                  ||      }|j                  j                  |j                  |j                  j                  |      t        j                  j                  j                  j                               }|j                  |j                   j"                  d|fg      S )z6Issues the request necessary for updating the peering.)networkPeering)networknetworksUpdatePeeringRequestprojectUpdatePeering)ValidateArgsr   ComputeApiHolderReleaseTrackclient_CreateNetworkPeeringForRequestmessages#ComputeNetworksUpdatePeeringRequestr   NetworksUpdatePeeringRequestr
   VALUEScorer!   	GetOrFailMakeRequestsapitools_clientnetworks)selfargsholderr&   network_peeringrequests         r   Runz
Update.RunL   s    d**4+<+<+>?F]]F::64HOooAA%+__%Q%Q* &R &
 !!&&..88: B G 

 
 
)
)?G	DE r   c                    |j                   j                  |j                  |j                  |j                  |j
                  |j                        }t        |d      r4|j                   j                  j                  |j                        |_
        t        |d      r4|j                   j                  j                  |j                        |_        |S )N)r   exportCustomRoutesimportCustomRoutesexportSubnetRoutesWithPublicIpimportSubnetRoutesWithPublicIp
stack_typeupdate_strategy)r(   NetworkPeeringr   export_custom_routesimport_custom_routes#export_subnet_routes_with_public_ip#import_subnet_routes_with_public_ipgetattrStackTypeValueValuesEnumr<   	stackTypeUpdateStrategyValueValuesEnumr=   updateStrategy)r1   r&   r2   r4   s       r   r'   z&Update._CreateNetworkPeeringForRequest_   s    oo44YY4444'+'O'O'+'O'O 5 O t\"
//
(
(
A
Aoo  t&'
//
(
(
F
F"" $ r   c                 F   |j                   du |j                  du g}|j                  |j                  du |j                  du g       |j                  |j                  du        |j                  |j                  du        t        |      rt        j                  d      y)zValidate arguments.Nz'At least one property must be modified.)r?   r@   extendrA   rB   appendr<   r=   allr   UpdatePropertyError)r1   r2   
check_argss      r   r#   zUpdate.ValidateArgsx   s     	!!T)!!T)J
 00D800D8 
 doo-.d**d23
:**
3  r   N)
__name__
__module____qualname____doc___support_stack_typeclassmethodr   r6   r'   r#    r   r   r   r      s0    
( $ $(&2r   r   N)rQ   
__future__r   r   r   googlecloudsdk.api_lib.computer   googlecloudsdk.callioper   "googlecloudsdk.command_lib.computer   4googlecloudsdk.command_lib.compute.networks.peeringsr	   googlecloudsdk.corer
   ReleaseTracksr%   GAALPHABETADefaultUniverseOnlyCommandr   rT   r   r   <module>ra      s    - &  ' 7 ( 9 F * $++1143D3D3I3I kT\\ k kr   