
                         h    d 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d
 Zd Zd Zd Zy)zUtility functions for advice.    )	arg_utils)
exceptions)
properties)timesc                 &   t        | |      }t        j                  j                  j                  j                         }| j                  xs2 t        j                  j                  j                  j                         }|j                  |||      S )z@Helper function to get the compute advice calendar mode request.)calendarModeAdviceRequestprojectregion)
GetCalendarModeAdviceRequestr   VALUEScorer	   	GetOrFailr
   computeGet ComputeAdviceCalendarModeRequest)argsmessagescalendar_mode_advice_requestr	   r
   s        5lib/googlecloudsdk/command_lib/compute/advice/util.py#GetComputeAdviceCalendarModeRequestr      s}     ">dH!M""**446' ;;@*++33::>>@&		2	2 < 
3 
     c                    |j                         }| j                  r9t        j                  | j                  |j                   j                        |_        | j                  rt        | |      |_        t        | |      |_
        t        | |      |_        |j                  j                  |j                  j                  j                  d|      g      }|j                  |      S )z8Helper function to get the calendar mode advice request.speckeyvalueadditionalProperties)futureResourcesSpecs)FutureResourcesSpecdeployment_typer   ChoiceToEnumDeploymentTypeValueValuesEnumdeploymentTypelocation_policyGetLocationPolicylocationPolicyGetTargetResourcestargetResourcesGetTimeRangeSpectimeRangeSpecCalendarModeAdviceRequestFutureResourcesSpecsValueAdditionalProperty)r   r   future_resources_specfuture_resources_specs_values       r   r   r   )   s     #668	+4+A+A$$BB,(
 
+<T8+L(*<T8*L'(8x(H%!)!C!C!]!]

,
,
F
F
Y
Y 5 Z  "^ " 
	+	+7 
, 
 r   c           	         | j                   syg }| j                   j                         D ]  \  }}t        j                  ||j                  j
                        }|j                  |j                  j                  j                  dj                  |      |j	                  |                    |j                  |j                  j                  |            S )z+Helper function to get the location policy.Nzzones/{})
preferencer   r   )	locations)r%   itemsr   r"   )FutureResourcesSpecLocationPolicyLocationPreferenceValueValuesEnumappend!FutureResourcesSpecLocationPolicyLocationsValuer.   format)r   r   r3   zonepolicyzone_policys         r   r&   r&   G   s     
		)**002ldF((::TTK 22AATT!!$'DD& E  	U 	
 3 
	3	3::II( J  
4 
 r   c                     |j                         }| j                  r| j                  |_        | j                  r| j                  |_        |S )z2Helper function to get the specific SKU resources.)'FutureResourcesSpecSpecificSKUResourcesvm_countinstanceCountmachine_typemachineType)r   r   specific_sku_resourcess      r   GetSkuResourcesrE   c   sE     $KKM	]]+/==(	)-):):&	r   c           	         |j                   j                  }|j                  |j                  |j                  d}| |vrBt        j                  ddj                  dj                  |j                                           ||    S )z%Helper function to get the VM family.)V5EV5PV6Ez--tpu-versionz%Must specify a valid TPU version ({})z, )
%FutureResourcesSpecAggregateResourcesVmFamilyValueValuesEnum(VM_FAMILY_CLOUD_TPU_LITE_POD_SLICE_CT5LP"VM_FAMILY_CLOUD_TPU_POD_SLICE_CT5P'VM_FAMILY_CLOUD_TPU_LITE_POD_SLICE_CT6Er   InvalidArgumentExceptionr:   joinkeys)tpu_versionr   	vm_familytpu_version_to_vm_familys       r   GetVmFamilyrU   q   s    
 44LL  ??99>> 00

-
-/66II.3356	
  
"+	..r   c                 8   |j                         }| j                  r| j                  |_        | j                  rt	        | j                  |      |_        | j                  r9t        j                  | j                  |j                   j                        |_
        |S )z/Helper function to get the aggregate resources.)rJ   
chip_countacceleratorCountrR   rU   vmFamilyworkload_typer   r"   WorkloadTypeValueValuesEnumworkloadType)r   r   aggregate_resourcess      r   GetAggregateResourcesr^      s     !FFH	__+/??(	#.t/?/?#J 	'0'='=66RR($
 
r   c                     |j                         }| j                  rt        | |      |_        | j                  rt        | |      |_        |S )z,Helper function to get the target resources.)"FutureResourcesSpecTargetResourcesrB   rE   specificSkuResourcesrR   r^   aggregateResources)r   r   &future_resources_spec_target_resourcess      r   r(   r(      sW     113 ) 
h' +?
 
dH- += 
0/r   c                    |j                         }| j                  rp| j                  j                  dd      }|t        j                  |      |_        | j                  j                  dd      }|t        j                  |      |_        | j                  rp| j                  j                  dd      }|t        j                  |      |_        | j                  j                  dd      }|t        j                  |      |_	        | j                  rP| j                  j                  dd      }|
| d|_        | j                  j                  dd      }|
| d|_        |S )z'Helper function to get the time ranges.fromNtomaxsmin)FlexibleTimeRangestart_time_rangegetr   FormatDateTimestartTimeNotEarlierThanstartTimeNotLaterThanend_time_rangeendTimeNotEarlierThanendTimeNotLaterThanduration_rangemaxDurationminDuration)	r   r   flexible_time_rangestart_time_fromstart_time_toend_time_fromend_time_tomax_durationmin_durations	            r   r*   r*      sl    224 
++//=O"494H4H
51 ))--dD9M 272F2F
3/
 
''++FD9M 272F2F
3/ %%))$5K050D0D
1-
 
&&**5$7L+7.(:%&&**5$7L+7.(:%	r   N)__doc__$googlecloudsdk.command_lib.util.apisr   googlecloudsdk.corer   r   googlecloudsdk.core.utilr   r   r   r&   rE   rU   r^   r(   r*    r   r   <module>r      s>    $ : * * *$<8 /4(00'r   