
                            d Z ddlmZ ddlmZ ddlmZ ddl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 ej                  j                   dej                  j"                  diZej                  j"                  dfdZej                  j"                  fdZej                  j"                  fdZd Zd Zd Zd Zd Zy)z5Utility functions for Distributed Cloud Edge Network.    )absolute_import)division)unicode_literalsN)apis)waiter)arg_parsers)base)	resourcesv1alpha1v1Fc                 \    t         j                  |       }t        j                  d||      S )Nedgenetwork)no_http)VERSION_MAPgetr   GetClientInstance)release_trackr   api_versions      9lib/googlecloudsdk/api_lib/edge_cloud/networking/utils.pyr   r   $   s%    .+			{G	LL    c                 X    t         j                  |       }t        j                  d|      S Nr   )r   r   r   GetMessagesModule)r   r   s     r   r   r   )   s#    .+			{	;;r   c                 |    t        j                         }t        j                  |       }|j	                  d|       |S r   )r
   Registryr   r   RegisterApiByName)r   resource_parserr   s      r   GetResourceParserr   .   s4    &&(/.+##M;?	r   c                    t         j                  j                  |j                  d      }t	        j
                  || j                        }t	        j                  ||dj                  |j                                      y)z=Waits for the given google.longrunning.Operation to complete.z)edgenetwork.projects.locations.operations)
collectionzWaiting for [{0}] to finishN)
r
   REGISTRYParsenamer   CloudOperationPollerprojects_locations_operationsWaitForformatRelativeName)client	operationresourceoperation_refpollers        r   WaitForOperationr.   5   sm    $$**nn!L + N-&&x'-'K'KM&..m#**=+E+E+GHJr   c                     t        j                  d|       }|sy|j                         D cg c]  }t        |       }}|d   dk(  ry|D ]  }|dk  s|dkD  s y yc c}w )zAAccepts an ipv4 address in string form and returns True if valid.z,^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$Fr      T)rematchgroupsint)ipr2   xoctetsns        r   IsValidIPV4r9   @   sk    
((BB
G%	!LLN+NqCFN&+ AY!^a1uC  
 ,s   Ac                 N    	 t        j                  |       }y# t        $ r Y yw xY w)z0Validates a given ip address to be IPv6 address.FT)	ipaddressIPv6Address
ValueError)r5   _s     r   IsValidIPV6r?   S   s0    b!A 
 
 s    	$$c                 z    t        |       s/t        |       s$t        j                  dj	                  |             | S )<Argparse argument type that checks for a valid ipv4 address.z#invalid IPv4 or IPv6 address: '{0}')r9   r?   r   ArgumentTypeErrorr'   values    r   
IPArgumentrE   \   s9    	U	K$6

'
'-44U;  
,r   c                 d    t        |       s$t        j                  dj                  |             | S )rA   zinvalid ipv4 value: '{0}')r9   r   rB   r'   rC   s    r   IPV4ArgumentrG   e   s2    	U	

'
'#**513 3 
,r   )__doc__
__future__r   r   r   r;   r1   googlecloudsdk.api_lib.utilr   r   googlecloudsdk.callioper   r	   googlecloudsdk.corer
   ReleaseTrackALPHAGAr   r   r   r   r.   r9   r?   rE   rG    r   r   <module>rQ      s    < &  '  	 , . / ( ) 	Z$ %)$5$5$8$8% M
 %)$5$5$8$8 <
 %)$5$5$8$8 J&r   