
    i'                     |    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
  G d d	e
      Z G d
 de      Zy)z%Public delegated prefixes api client.    )absolute_import)division)unicode_literals)poller)waiter)Errorc                       e Zd ZdZy)PublicDelegatedPrefixPatchErrorzDRaised when an invalid update to PublicDelegatedPrefix is attempted.N)__name__
__module____qualname____doc__     ?lib/googlecloudsdk/api_lib/compute/public_delegated_prefixes.pyr
   r
      s    Lr   r
   c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)PublicDelegatedPrefixesClientz<Client for public delegated prefixes service in the GCE API.c                     || _         || _        || _        | j                   j                  j                  | _        | j                   j                  j                  | _        y )N)clientmessages	resourcesapitools_clientglobalPublicDelegatedPrefixes_global_servicepublicDelegatedPrefixes_regional_service)selfr   r   r   s       r   __init__z&PublicDelegatedPrefixesClient.__init__!   sL    DKDMDN##AA 	 "[[88PPDr   c
                    t        |d      }
|r6| j                  j                  ||j                  |j                  dd      }n*| j                  j                  |d|j                  id      }|j                         }| j                  j                  |j                         ||||      }|||_	        |||_
        |	|	|_        |
r^| j                  j                  ||j                  |j                        }| j                  j                  | j                  d	|fg      d
   S | j                  j!                  ||j                        }| j                  j                  | j"                  d	|fg      d
   S )z"Creates a public delegated prefix.region)projectr    zcompute.publicDelegatedPrefixes
collectionr!   z compute.publicAdvertisedPrefixes)nameparentPrefixipCidrRangedescriptionisLiveMigrationpublicDelegatedPrefixr!   r    Insertr   r*   r!   )hasattrr   Parser!   r    SelfLinkr   PublicDelegatedPrefixNamemodeallocatablePrefixLengthpurpose+ComputePublicDelegatedPrefixesInsertRequestr   MakeRequestsr   1ComputeGlobalPublicDelegatedPrefixesInsertRequestr   )r   pdp_refparent_pap_prefixparent_pdp_prefixip_cidr_ranger'   enable_live_migrationr2   allocatable_prefix_lengthr4   is_regionalparent_prefix_refparent_prefix_uripublic_delegated_prefixrequests                  r   Createz$PublicDelegatedPrefixesClient.Create*   s    '8,K....
oo
@6 /  ....
goo
&7 /  *224"mmAA\\^&!- B  %)" ,
# 5 (/%II 7// J g [[%%""Hg6
7	  OO 7 P g [[%%  (G4
5	 r   c                    t        |d      }|ri| j                  j                  |j                         |j                  |j
                        }| j                  j                  | j                  d|fg      S | j                  j                  |j                         |j                        }| j                  j                  | j                  d|fg      S )z"Deletes a public delegated prefix.r    r)   Deleter,   )r-   r   +ComputePublicDelegatedPrefixesDeleteRequestr1   r!   r    r   r6   r   1ComputeGlobalPublicDelegatedPrefixesDeleteRequestr   r   r8   r>   rB   s       r   rE   z$PublicDelegatedPrefixesClient.Deleten   s     '8,KII '// J g [[%%""Hg6
7  OO ' P g [[%%  (G4
5 r   c                    t        |d      }|rl| j                  j                  |j                         |j                  |j
                        }| j                  j                  | j                  d|fg      d   S | j                  j                  |j                         |j                        }| j                  j                  | j                  d|fg      d   S )zGets a public delegated prefix.r    r)   Getr   r,   )r-   r   (ComputePublicDelegatedPrefixesGetRequestr1   r!   r    r   r6   r   .ComputeGlobalPublicDelegatedPrefixesGetRequestr   rH   s       r   rJ   z!PublicDelegatedPrefixesClient.Get   s     '8,KFF '// G g [[%%""E73
4	  LL ' M g [[%%(<(<eW'M&NO
 r   c                    | j                   j                  |j                  |j                        }g }|j                  s|j	                  d       t        |d      }|r| j                   j                  |j                         ||j                  |j                        }| j                  j                  j                  |      5  | j                  j                  |      }ddd       | j                  j!                  j"                  d      }t%        j&                  | j                        }n| j                   j)                  |j                         ||j                        }| j                  j                  j                  |      5  | j*                  j                  |      }ddd       | j                  j!                  j"                  d	      }t%        j&                  | j*                        }t-        j.                  ||d
j1                  |j                                     S # 1 sw Y   JxY w# 1 sw Y   xY w)zPatches a public delegated prefix resource.

    Args:
      pdp_ref: resource reference.
      resource: PublicDelegatedPrefix resource.

    Returns:
      Operation result from the poller.
    )fingerprintpublicDelegatedSubPrefixsrO   r    )r*   publicDelegatedPrefixResourcer!   r    Nzcompute.regionOperationsr"   )r*   rP   r!   zcompute.globalOperationsz&Updating public delegated prefix [{}].)r   r0   rN   rO   appendr-   *ComputePublicDelegatedPrefixesPatchRequestr1   r!   r    r   r   IncludeFieldsr   Patchr   r.   selfLinkr   Poller0ComputeGlobalPublicDelegatedPrefixesPatchRequestr   r   WaitForformat)	r   r8   resourceinclude_fieldsr>   rB   	operationoperation_refoperation_pollers	            r   _Patchz$PublicDelegatedPrefixesClient._Patch   s    }}22(("*"D"D 3 H N--78'8,KHH '(0//	 I g ;;&&44^D**009	 Enn**


)C + m  t'='=>NN '(0// O g ;;&&44^D((..w7	 Enn**


)C + m  t';';<>>077G ) ED EDs   H)H6)H36H?c	                 P   | j                  |      }	|	j                  D ]:  }
|
j                  |k(  st        dj	                  ||j                                      |	j                  j                  | j                  j                  |||||||             | j                  ||	      S )a  Adds a delegated sub prefix to public delegated prefix using PATCH.

    Args:
      pdp_ref: resource reference.
      name: sub prefix name.
      ip_cidr_range: sub prefix IP address range.
      description: sub prefix description.
      delegatee_project: sub prefix target project.
      is_addresses: sub prefix isAddress parameter.
      mode: sub prefix mode.
      allocatable_prefix_length: sub prefix allocatable prefix length for IPv6
        NetLb

    Returns:
      Operation result from the poller.

    Raises:
      PublicDelegatedPrefixPatchError:
        when delegated prefix already has a sub prefix with specified name.
    zHDelegated sub prefix [{}] already exists in public delegated prefix [{}])r$   r'   r&   delegateeProject	isAddressr2   r3   )
rJ   rO   r$   r
   rY   r1   rQ   r   -PublicDelegatedPrefixPublicDelegatedSubPrefixr_   )r   r8   r$   r;   r'   delegatee_projectis_addressesr2   r=   rZ   
sub_prefixs              r   AddSubPrefixz*PublicDelegatedPrefixesClient.AddSubPrefix   s    @ xx H88
	D	 - &w||~6
 	
 9 &&--CC#%."$= 	D 	

 ;;w))r   c                 6   | j                  |      }d}t        |j                        D ]  \  }}|j                  |k(  s|} |)t	        dj                  ||j                                     |j                  j                  |       | j                  ||      S )a]  Removes a delegated sub prefix from public delegated prefix using PATCH.

    Args:
      pdp_ref: resource reference.
      name: name of sub prefix to remove.

    Returns:
      Operation result from the poller.

    Raises:
      PublicDelegatedPrefixPatchError:
        when delegated prefix does not have a sub prefix with specified name.
    NzHDelegated sub prefix [{}] does not exist in public delegated prefix [{}])	rJ   	enumeraterO   r$   r
   rY   r1   popr_   )r   r8   r$   rZ   index_to_removeirf   s          r   RemoveSubPrefixz-PublicDelegatedPrefixesClient.RemoveSubPrefix  s     xx HO"8#E#EF:	D	  G +tW\\^4 
 &&**?;;;w))r   c                     | j                   j                  |j                         |j                  |j                        }| j
                  j                  | j                  d|fg      S )z#Announce a public delegated prefix.r)   Announce)r   -ComputePublicDelegatedPrefixesAnnounceRequestr1   r!   r    r   r6   r   r   r8   rB   s      r   ro   z&PublicDelegatedPrefixesClient.Announce,  a     mmII%lln~~ J G ;;##

 
 *g	67 r   c                     | j                   j                  |j                         |j                  |j                        }| j
                  j                  | j                  d|fg      S )z#Withdraw a public delegated prefix.r)   Withdraw)r   -ComputePublicDelegatedPrefixesWithdrawRequestr1   r!   r    r   r6   r   rq   s      r   rt   z&PublicDelegatedPrefixesClient.Withdraw9  rr   r   N)r   r   r   r   r   rC   rE   rJ   r_   rg   rm   ro   rt   r   r   r   r   r      s8    DQBH005n5*n*@r   r   N)r   
__future__r   r   r   )googlecloudsdk.api_lib.compute.operationsr   googlecloudsdk.api_lib.utilr   googlecloudsdk.core.exceptionsr   r
   objectr   r   r   r   <module>r{      s8    , &  ' < . 0Me MfF fr   