
                             d 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
 d Zd	 Zd
 Zd Z G d de      Zd Zd Z G d de      Zy)z%Utilities for Backup and DR commands.    N)tz)arg_parsers)
exceptions)iso_duration)timesc                  <    t        t        j                               S N)struuiduuid4     /lib/googlecloudsdk/command_lib/backupdr/util.pyGenerateRequestIdr      s    	TZZ\	r   c                     t        |       dz   S )Ns)r
   )durations    r   ConvertIntToStrr      s    	X	r   c                     | y| t        j                         k  r%t        j                  |dj	                  |             | j                  t        j                               } | j                  d      S )z&Verify that the date is in the future.NzDate must be in the future: {0}z%Y-%m-%dT%H:%M:%SZ)	r   Nowr   InvalidArgumentExceptionformat
astimezoner   tzutcstrftime)dateflags     r   VerifyDateInFuturer   #   sb    	\	EIIK

-
-)006  
	$$	+	,,r   c                       y)Nz0001-01-01T00:00:00.000Zr   r   r   r   ResetEnforcedRetentionr    0   s    	#r   c                       e Zd ZdZd Zd Zy)OptionsMapValidatorzYOption that are passed as key(alternative) value(actual) pairs are validated on the args.c                 \    |D ci c]  }|j                         ||    c}| _        y c c}w r	   )upperoptions)selfr%   opts      r   __init__zOptionsMapValidator.__init__7   s*    9@A#CIIK-ADLAs   )c                    |j                         | j                  j                         v r| j                  |j                            S || j                  j                         v r|S t	        j
                  dj                  |dj                  t        | j                  j                               t        | j                  j                               z                     Nz7Failed to parse the arg ({}). Value should be one of {}, )	r$   r%   keysvaluesr   ArgumentTypeErrorr   joinlistr&   r   s     r   ParsezOptionsMapValidator.Parse:   s    wwyDLL%%''\\!'')$$	
dll!!#	#h))
C
J
Jiit||((*+d4<<3F3F3H.II r   N__name__
__module____qualname____doc__r(   r2   r   r   r   r"   r"   4   s    aBr   r"   c                    t        | t              r| j                  di       }n| j                  }|syd}d}d}d}t	        j
                  |      j                  }t        j                  ||z        }||z  }t        j                  ||z        }	||z  }t        j                  ||z        }
||z  }t        j                  ||z        }t        j                  ||	|
|      }t	        j                  |d	      S )
zTransforms the backup vault enforced retention to a human readable format.

  Args:
    backup_vault: type of backup_vault can be either a Backup vault object or a
      dict.

  Returns:
    Human readable format of backup vault enforced retention.
  &backupMinimumEnforcedRetentionDuration i  iQ ip ( i>)yearsmonthsdayshours)parts)
isinstancedictgetr9   r   ParseDurationtotal_secondsmathfloorceilr   DurationFormatDuration)backup_vaultbackup_min_enforced_retentionseconds_in_hourseconds_in_dayseconds_in_monthseconds_in_yearsecondsyearremaining_secondsmonthdayhourr   s                r   TransformEnforcedRetentionrW   J   s    d#$0$4$40"%!
 	;; " 
'/./ =>LL'	Go-	.$/
**&)99
:%''

$~56#~%	$6	7$""S( 
		hb	11r   c                     t        j                  fddj                  |       dj                        z   t              }|S )Nc                     | v S r	   r   )argr%   s    r   <lambda>z#GetOneOfValidator.<locals>.<lambda>w   s	    #.r   z#{} should be one of the following: r+   )r   CustomFunctionValidatorr   r/   r
   )namer%   validtors    ` r   GetOneOfValidatorr_   u   s<    00 +2248499W;MM	(
 
/r   c                       e Zd ZdZd Zd Zy)
EnumMapperzMaps the args to Enum values.c                     || _         y r	   )enum_mapping)r&   rc   s     r   r(   zEnumMapper.__init__   s
    $Dr   c                     || j                   v r| j                   |   S t        j                  dj                  |dj	                  t        | j                   j                                                 r*   )rc   r   r.   r   r/   r0   r,   r1   s     r   r2   zEnumMapper.Parse   se    Dq!!))
C
J
JiiT..33567 r   Nr3   r   r   r   ra   ra   ~   s    %%	r   ra   )r7   rF   r   dateutilr   googlecloudsdk.callioper   r   googlecloudsdk.core.utilr   r   r   r   r   r    objectr"   rW   r_   ra   r   r   r   <module>ri      sV    ,    / . 1 *
-$& ,(2V r   