
    Q"                         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
 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Z G d dej*                        Zd Zd ZddZd Z	 	 ddZ	 ddZd Zd Zd Zy)z#Spanner instanceConfigs API helper.    )absolute_import)division)unicode_literals)
list_pager)apis)errors)	arg_utils)labels_util)
exceptions)
properties)	resourcesNc                   "     e Zd ZdZ fdZ xZS )MissingReplicaErrorz;Indicates that the replica is missing in the source config.c                 L    t         t        |   dj                  ||             y )NzBThe replica {0} of type {1} is not in the source config's replicas)superr   __init__format)selfreplica_locationreplica_type	__class__s      6lib/googlecloudsdk/api_lib/spanner/instance_configs.pyr   zMissingReplicaError.__init__#   s#    	
t-M	 ,	/1    )__name__
__module____qualname____doc__r   __classcell__)r   s   @r   r   r       s    C1 1r   r   c                 p   t        j                  dd      }t        j                  dd      }t        j                  j                  | dt        j                  j                  j                  j                  id      }|j                  |j                               }|j                  j                  |      S )z"Get the specified instance config.spannerv1
projectsId spanner.projects.instanceConfigsparams
collectionname)r   GetClientInstanceGetMessagesModuler   REGISTRYParser   VALUEScoreproject	GetOrFail(SpannerProjectsInstanceConfigsGetRequestRelativeNameprojects_instanceConfigsGet)configclientmsgsrefreqs        r   r4   r4   )   s    !!)T2&				4	0$  J--22::DDE3 	! 	5# 	55 	6 	#		(	(	,	,S	11r   c                  *   t        j                  dd      } t        j                  dd      }|j                  dt        j
                  j                  j                  j                         z         }t        j                  | j                  |dd      S )z%List instance configs in the project.r    r!   z	projects/)parentinstanceConfigspageSize)fieldbatch_size_attribute)r   r)   r*   )SpannerProjectsInstanceConfigsListRequestr   r-   r.   r/   r0   r   YieldFromListr3   )r6   r7   r9   s      r   ListrB   6   s    !!)T2&				4	0$66**//77AACC 	7 	E#		!	!%%	%	
' 'r   c                 t   t        j                  dd      }t        j                  dd      }t        j                  j                  | dt        j                  j                  j                  j                  id      }|j                  |j                         ||      }|j                  j                  |      S )zDelete an instance config.r    r!   r"   r#   r$   )r(   etagvalidateOnly)r   r)   r*   r   r+   r,   r   r-   r.   r/   r0   +SpannerProjectsInstanceConfigsDeleteRequestr2   r3   Delete)r5   rD   validate_onlyr6   r7   r8   r9   s          r   rG   rG   C   s    !!)T2&				4	0$  J--22::DDE3 	! 	5# 	88D} 	9 	F#		(	(	/	/	44r   c           
      
   t        j                  dd      }| j                  r| j                  n|j                  }| j                  r| j                  n|j                  }|j
                  r|j
                  n|j                  }|j                  }| j                  rt        || j                  |       | j                  rt        || j                  |       t        || j                  ||||| j                  | j                        S )zHCreate a new CMMR instance config based on an existing GMMR/CMMR config.r    r!   )r   r*   display_namedisplayNamelabels
baseConfigr(   replicasskip_replicas_SkipReplicasadd_replicas_AppendReplicas_Creater5   rH   rD   )argsr5   r7   rJ   rL   base_configreplica_info_lists          r   CreateUsingExistingConfigrW   P   s    				4	0$ '+&7&7""V=O=O,++4;;6==& &,%6%6!!FKK+oo	$**,=>	D$++->?	t{{L+"FD,>,>		
K Kr   c           
         t        j                  dd      }t        j                  j	                  |dt
        j                  j                  j                  j                  id      }g }	t        |||	       i }
|g|j                  j                  t        j                  |      D cg c],  \  }}|j                  j                  j                  ||      . c}}      }
t!        || ||j#                         |	|
||      S c c}}w )zACreate a new instance configs based on provided list of replicas.r    r!   r"   r#   r$   )keyvalue)additionalProperties)r   r*   r   r+   r,   r   r-   r.   r/   r0   rR   InstanceConfigLabelsValuesix	iteritemsAdditionalPropertyrS   r2   )r5   rJ   rU   replicas_argrH   rL   rD   r7   
config_refrV   labels_messagerY   rZ   s                r   CreateUsingReplicasrd   g   s    
			4	0$!!''J--22::DDE3 ( 5*
 $&78.((4447MM&4IK4Ijc5 	''::5 	; 	"4IK4 N
 
v|Z-D-D-F"NM4
I IKs   '1D
c                 ^   t        j                  dd      }t        j                  j	                  dt
        j                  j                  j                  j                        }	t        j                  j                  |dt
        j                  j                  j                  j                  id      }
| j                  |
j                         ||||      }|r||_        | j                  |	j                         | j                  |||	      
      }|j                   j	                  |      S )z'Create instance configs in the project.r    r!   zspanner.projects)r"   r"   r#   r$   )r(   rK   rM   rL   rN   )instanceConfigIdinstanceConfigrE   )r;   createInstanceConfigRequest)r   r)   r   r+   Creater   r-   r.   r/   r0   r,   r\   r2   rD   +SpannerProjectsInstanceConfigsCreateRequestCreateInstanceConfigRequestr3   )r7   r5   rJ   rU   rV   rL   rH   rD   r6   project_refrb   instance_configr9   s                r   rS   rS      s#    !!)T2&""))Z%6%6%;%;%C%C%M%M * O+!!''J--22::DDE3 ( 5* ''""$  ( "/ 
O88%%'"&"B"B!($ #C #& 	9 	'# 
	(	(	/	/	44r   c                     |D ]T  }t        j                  |d   | j                  j                        }|j	                  | j                  |d   |             V y)z?Appends each in add_replicas_arg to the given ReplicaInfo list.typelocation)rp   ro   N)r	   ChoiceToEnumReplicaInfoTypeValueValuesEnumappend)r7   add_replicas_argrV   replicar   s        r   rR   rR      sY    !g))'&/*.*:*:*N*NPL'*"5LIK "r   c                 $   |D ]  }d}t        j                  |d   | j                  j                        }t	        |      D ]*  \  }}|j
                  |d   k(  s|j                  |k(  s)|}, |t        |d   |      |j                  |        y)z@Skips each in skip_replicas_arg from the given ReplicaInfo list.Nro   rp   )	r	   rq   rr   rs   	enumeraterp   ro   r   pop)r7   skip_replicas_argrV   replica_to_skipindex_to_deleter   indexrv   s           r   rP   rP      s    *oO))/&*A*.*:*:*N*NPL#$56w


oj9
9
,,,
& 7 
 ;\JJ/* +r   c           	         t        j                  dd      t        j                  dd      t        j                  j                  | j                  dt        j                  j                  j                  j                  id      j                  j                               }g }| j                  "| j                  |_        |j!                  d       | j"                  | j"                  |_        fd}t%        j&                  | j                  j(                  |      }|j*                  r"|j,                  |_        |j!                  d	       |st/        j0                  d
      j3                  j                         j5                  |dj7                  |      | j8                              }j:                  j=                  |      S )zUpdate an instance config.r    r!   r"   r#   r$   r'   rJ   c                      j                  j                               } j                  j                  |       j                  S )Nr'   )r1   r2   r3   r4   rL   )r9   r6   r7   r8   s    r   	GetLabelszPatch.<locals>.GetLabels   s<    

7
7S=M=M=O
7
PC**..s3:::r   rL   zNo updates requested.,)rg   
updateMaskrE   )r(   updateInstanceConfigRequest)r   r)   r*   r   r+   r,   r5   r   r-   r.   r/   r0   r\   r2   rJ   rK   rt   rD   r
   ProcessUpdateArgsLazyr]   needs_updaterL   r   NoFieldsSpecifiedError*SpannerProjectsInstanceConfigsPatchRequestUpdateInstanceConfigRequestjoinrH   r3   Patch)	rT   rm   update_maskr   labels_updater9   r6   r7   r8   s	         @@@r   r   r      s   !!)T2&				4	0$  
kkJ--22::DDE3 	! 	5# ''S-=-=-?'@/+	""&"3"3O~&	YY99O; 33
D++Y8-*11Ox 	

'
'(?
@@77"&"B"B(XXk*)) #C #+ 	8 	,# 
	(	(	.	.s	33r   )NF)NN)N) r   
__future__r   r   r   apitools.base.pyr   googlecloudsdk.api_lib.utilr   googlecloudsdk.command_lib.air   $googlecloudsdk.command_lib.util.apisr	   $googlecloudsdk.command_lib.util.argsr
   googlecloudsdk.corer   core_exceptionsr   r   r^   Errorr   r4   rB   rG   rW   rd   rS   rR   rP   r    r   r   <module>r      s    * &  ' ' , 0 : < = * ) 
1/// 1
2
'
5K8  $!IF 5DK+&&4r   