
    q                        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
r
 " S S	\	R                  5      r " S
 S\	R                  5      r " S S\	R                  5      r " S S\	R                  5      r " S S\	R                  5      r " S S\	R                  5      rS rS r " S S\	R                  5      rS rS rg)z Util functions for NAT commands.    )absolute_import)division)unicode_literals)flags)
exceptionsNc                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )ActiveIpsRequiredError   z;Raised when active ranges are not specified for Public NAT.c                 0   > Sn[         [        U ]  U5        g )Nz3--source-nat-active-ips is required for Public NAT.)superr	   __init__selfmsg	__class__s     Hlib/googlecloudsdk/command_lib/compute/routers/nats/rules/rules_utils.pyr   ActiveIpsRequiredError.__init__   s    
?C	
 $05     __name__
__module____qualname____firstlineno____doc__r   __static_attributes____classcell__r   s   @r   r	   r	      s    C6 6r   r	   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )ActiveIpsNotSupportedError"   z5Raised when active IPs are specified for Private NAT.c                 0   > Sn[         [        U ]  U5        g )Nz9--source-nat-active-ips is not supported for Private NAT.)r   r    r   r   s     r   r   #ActiveIpsNotSupportedError.__init__%   s    
EC	
$d4S9r   r   r   r   s   @r   r    r    "   s    =: :r   r    c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )ActiveRangesRequiredError*   z<Raised when active ranges are not specified for Private NAT.c                 0   > Sn[         [        U ]  U5        g )Nz7--source-nat-active-ranges is required for Private NAT.)r   r%   r   r   s     r   r   "ActiveRangesRequiredError.__init__-   s    
CC	
#T3C8r   r   r   r   s   @r   r%   r%   *   s    D9 9r   r%   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )ActiveRangesNotSupportedError2   z7Raised when active ranges are specified for Public NAT.c                 0   > Sn[         [        U ]  U5        g )Nz;--source-nat-active-ranges is not supported for Public NAT.)r   r*   r   r   s     r   r   &ActiveRangesNotSupportedError.__init__5   s    
GC	
'7<r   r   r   r   s   @r   r*   r*   2   s    ?= =r   r*   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )DrainIpsNotSupportedError:   z4Raised when drain IPs are specified for Private NAT.c                 0   > Sn[         [        U ]  U5        g )Nz8--source-nat-drain-ips is not supported for Private NAT.)r   r/   r   r   s     r   r   "DrainIpsNotSupportedError.__init__=   s    
DC	
#T3C8r   r   r   r   s   @r   r/   r/   :   s    <9 9r   r/   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )DrainRangesNotSupportedErrorB   z6Raised when drain ranges are specified for Public NAT.c                 0   > Sn[         [        U ]  U5        g )Nz:--source-nat-drain-ranges is not supported for Public NAT.)r   r4   r   r   s     r   r   %DrainRangesNotSupportedError.__init__E   s    
FC	
&6s;r   r   r   r   s   @r   r4   r4   B   s    >< <r   r4   c                     U R                   UR                  R                  R                  R                  R
                  :H  $ )N)typeclientmessages	RouterNatTypeValueValuesEnumPRIVATE)natcompute_holders     r   _IsPrivateNatrA   J   s6    	$$..BBJJ
L Lr   c                 ,   UR                   R                  R                  U R                  U R                  UR                   R                  R                  5       S9n[        X!5      nU R                  (       ao  U(       a
  [        5       e[        R                  R                  XR                  5       Vs/ s H  n[        R                  " U5      PM     snUR                  l        OU(       d
  [#        5       eU R$                  (       ap  U(       d
  ['        5       e[        R(                  R                  XR                  5       Vs/ s H  n[        R                  " U5      PM     snUR                  l        U$ U(       a
  [-        5       eU$ s  snf s  snf )z4Creates a Rule message from the specified arguments.)
ruleNumbermatchaction)r:   r;   RouterNatRulerule_numberrD   RouterNatRuleActionrA   source_nat_active_ipsr    r   ACTIVE_IPS_ARG_REQUIREDResolveAsResource	resourcessix	text_typerE   sourceNatActiveIpsr	   source_nat_active_rangesr*   ACTIVE_RANGES_ARGsourceNatActiveRangesr%   )argsr@   r?   ruleis_private_natipsubnets          r   CreateRuleMessagerX   O   sM   				'	'	5	5!!JJ""++??A 
6 
$
 !5.	&(( //AA**
&
B 	b
&DKK" 
 
""	"")++ --??**
)
F 	f
)DKK% 
+ 
#
%%	++&)s   4 F Fc                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )RuleNotFoundErrorr   z Raised when a Rule is not found.c                 N   > SR                  U5      n[        [        U ]  U5        g )NzRule `{0}` not found)formatr   rZ   r   )r   rG   r   r   s      r   r   RuleNotFoundError.__init__u   s#    
 
'
'
4C	
T+C0r   r   r   r   s   @r   rZ   rZ   r   s    (1 1r   rZ   c                 f    U R                    H  nUR                  U:X  d  M  Us  $    [        U5      e)z=Returns the Rule with the given rule_number in the given NAT.)rulesrC   rZ   )r?   rG   rT   s      r   FindRuleOrRaisera   z   s.    iid+%k  	+&&r   c                    UR                   (       a  UR                   U l         [        X25      nUR                  (       an  U(       a
  [        5       e[        R
                  R                  XR                  5       Vs/ s H  n[        R                  " U5      PM     snU R                  l        UR                  (       ao  U(       a
  [        5       e[        R                  R                  XR                  5       Vs/ s H  n[        R                  " U5      PM     snU R                  l        O"UR                   (       a  / U R                  l        UR"                  (       an  U(       d
  [%        5       e[        R&                  R                  XR                  5       Vs/ s H  n[        R                  " U5      PM     snU R                  l        UR*                  (       ao  U(       d
  [-        5       e[        R.                  R                  XR                  5       Vs/ s H  n[        R                  " U5      PM     snU R                  l        gUR2                  (       a  / U R                  l        ggs  snf s  snf s  snf s  snf )z4Updates a Rule message from the specified arguments.N)rD   rA   rI   r    r   ACTIVE_IPS_ARG_OPTIONALrK   rL   rM   rN   rE   rO   source_nat_drain_ipsr/   DRAIN_IPS_ARGsourceNatDrainIpsclear_source_nat_drain_ipsrP   r*   rQ   rR   source_nat_drain_rangesr4   DRAIN_RANGES_ARGsourceNatDrainRangesclear_source_nat_drain_ranges)rT   rS   r@   r?   rU   rV   rW   s          r   UpdateRuleMessagerl      s   	ZZDJ 5.	&(( //AA**,&,B 	b,&DKK"
 
%''$)$7$7$I$I**%,%%,bb %,%DKK! &&$&DKK!	"")++ --??**,),F 	f,)DKK%
 
!!(** ,,>>**,(,F 	f,(DKK$
 ))')DKK$ *?&%)(s   ; I2: I7 I< J)r   
__future__r   r   r   5googlecloudsdk.command_lib.compute.routers.nats.rulesr   googlecloudsdk.corer   core_exceptionsrM   Errorr	   r    r%   r*   r/   r4   rA   rX   rZ   ra   rl   r   r   r   <module>rr      s    ' &  ' G = 
6_22 6:!6!6 :9 5 5 9=O$9$9 =9 5 5 9<?#8#8 <L
 F1-- 1'(*r   