
                             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
 Zd Zd ZddZd ZddZ G d de	j&                        Zy)z'Spanner database operations API helper.    )absolute_import)division)unicode_literals)
list_pager)apis)waiter)
properties)	resourcesc                     t        j                  dd      }t        |j                        }t        j
                  j                  | j                  d      }t        j                  |||      S )z!Wait for the specified operation.spannerv1/spanner.projects.instances.databases.operations)
collection)
r   GetClientInstanceEmbeddedResponsePoller'projects_instances_databases_operationsr
   REGISTRYParseRelativeNamenamer   WaitFor)	operationmessageclientpollerrefs        9lib/googlecloudsdk/api_lib/spanner/database_operations.pyAwaitr      sb    !!)T2&!446&,,nnB 	- 	D# 
W	--    c                 t   t        j                  dd      }t        j                  dd      }t        j                  j                  |t        j                  j                  j                  j                  | |dd      }|j                  |j                               }|j                  j                  |      S )zCancel the specified operation.r   r   
projectsIdinstancesIddatabasesIdr   paramsr   r   )r   r   GetMessagesModuler
   r   Parser	   VALUEScoreproject	GetOrFail8SpannerProjectsInstancesDatabasesOperationsCancelRequestRelativeNamer   Cancelinstancedatabaser   r   msgsr   reqs          r   r/   r/   '   s    !!)T2&				4	0$  "))..66@@!!# C 	! 	D# 	EE 	F 	#		7	7	>	>s	CCr   c                 t   t        j                  dd      }t        j                  dd      }t        j                  j                  |t        j                  j                  j                  j                  | |dd      }|j                  |j                               }|j                  j                  |      S )zGet the specified operation.r   r   r    r   r$   r&   )r   r   r'   r
   r   r(   r	   r)   r*   r+   r,   5SpannerProjectsInstancesDatabasesOperationsGetRequestr.   r   Getr0   s          r   r7   r7   7   s    !!)T2&				4	0$  "))..66@@!!
 C 	! 	D# 	BB 	C 	#		7	7	;	;C	@@r   Nc                    t        j                  dd      }t        j                  dd      }t        j                  j                  |t        j                  j                  j                  j                  | dd      }|j                  |j                         dz   |      }t        j                  |j                  |dd	
      S )zEList operations on the database using the generic operation list API.r   r   )r!   r"   z$spanner.projects.instances.databasesr$   z/operations)r   filter
operationspageSizefieldbatch_size_attribute)r   r   r'   r
   r   r(   r	   r)   r*   r+   r,   6SpannerProjectsInstancesDatabasesOperationsListRequestr.   r   YieldFromListr   )r1   r2   type_filterr   r3   r   r4   s          r   ListrB   H   s    !!)T2&				4	0$  "))..66@@! 8 	! 	9# 	CCm+ 	D 	# 
	!	!44	%	
' 'r   c                 ~    | dk(  ryd}| dk(  rdj                  ||      S | dk(  r|dz   S | dk(  r|d	z   S | d
k(  r|dz   S y)zFBuilds the filter for the different database operation metadata types.DATABASE zDmetadata.@type:type.googleapis.com/google.spanner.admin.database.v1.DATABASE_RESTOREzC({}OptimizeRestoredDatabaseMetadata) OR ({}RestoreDatabaseMetadata)DATABASE_CREATECreateDatabaseMetadataDATABASE_UPDATE_DDLUpdateDatabaseDdlMetadataDATABASE_CHANGE_QUORUMChangeQuorumMetadataN)format)op_typebase_strings     r    BuildDatabaseOperationTypeFilterrP   ]   sy    
V+""PWW[" " !!111%%444((/// )r   c                    t        j                  dd      }t        j                  dd      }t        j                  j                  | dt        j                  j                  j                  j                  id      }|rt        | ||      S |j                  |j                         |      }t        j                  |j                   |dd	      S )
z>List database operations using the Cloud Spanner specific API.r   r   r!   zspanner.projects.instancesr$   )parentr9   r:   r;   r<   )r   r   r'   r
   r   r(   r	   r)   r*   r+   r,   rB   5SpannerProjectsInstancesDatabaseOperationsListRequestr.   r   r@   %projects_instances_databaseOperations)r1   r2   rA   r   r3   instance_refr4   s          r   ListDatabaseOperationsrV   q   s    !!)T2&				4	0$##))

))..66@@ . * /, (K00BB&&( 	C 	>#		!	!22	%	
' 'r   c                       e Zd ZdZd Zd Zy)r   zEAs CloudOperationPoller for polling, but uses the Operation.response.c                     || _         y N)operation_service)selfrZ   s     r   __init__zEmbeddedResponsePoller.__init__   s
    .Dr   c                     |j                   S rY   )response)r[   r   s     r   	GetResultz EmbeddedResponsePoller.GetResult   s    r   N)__name__
__module____qualname____doc__r\   r_    r   r   r   r      s    M/r   r   rY   )NN)rc   
__future__r   r   r   apitools.base.pyr   googlecloudsdk.api_lib.utilr   r   googlecloudsdk.corer	   r
   r   r/   r7   rB   rP   rV   CloudOperationPollerr   rd   r   r   <module>rj      sT    . &  ' ' , . * ).D A"'*0('2V88 r   