
    8$                         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Z G d	 d
ej                        Z G d dej                        Zy)zXSpanner migration library functions and utilities for the spanner-migration-tool binary.    )absolute_import)division)unicode_literalsN)binary_operations)
exceptionsc                     t        j                  t        j                        }| r|j	                  |        |r|D ]  }|j                  |        |S )z6Return an env dict to be passed on command invocation.)copydeepcopyosenvironupdatepop)
extra_varsexclude_varsenvks       ;lib/googlecloudsdk/command_lib/spanner/migration_backend.pyGetEnvArgsForCommandr      s@    bjj!#JJz	ggaj 	*    c                       e Zd ZdZy)SpannerMigrationExceptionzIBase Exception for any errors raised by gcloud spanner migration surface.N)__name__
__module____qualname____doc__ r   r   r   r   &   s    Qr   r   c                        e Zd ZdZ fdZ	 	 	 	 	 	 	 d
dZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 ddZ	 	 	 	 	 	 	 ddZ		 	 	 	 	 	 ddZ
d	 Z xZS )SpannerMigrationWrapperz=Binary operation wrapper for spanner-migration-tool commands.c                 2    t        t        | 
  dddd| y )Nzspanner-migration-toolT)binaryinstall_if_missingr   )superr   __init__)selfkwargs	__class__s     r   r#   z SpannerMigrationWrapper.__init__-   s(    	
!41 L'DLDJLr   c	                 Z   ~	dg}
|r|
j                  d|g       |r|
j                  d|g       |r|
j                  d|g       |r|
j                  d|g       |r|
j                  d|g       |r|
j                  d       |r|
j                  d|g       |r|
j                  d	|g       |
S )
z#"Parse args for the schema command.schema--source--prefix--source-profile--target--target-profile	--dry-run--log-level	--projectextendappend)r$   sourceprefixsource_profiletargettarget_profiledry_run	log_levelprojectr%   	exec_argss              r   _ParseSchemaArgsz(SpannerMigrationWrapper._ParseSchemaArgs1   s     	
I
F+,
F+,*N;<
F+,*N;<{#y12W-.r   c                    ~dg}|r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |r|j                  d       |r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |r|j                  d	|g       |	r|j                  d
       |
r|j                  d|
g       |r|j                  d|g       |r|j                  d|g       |S )z!"Parse args for the data command.datar)   z	--sessionr*   --skip-foreign-keysr+   r,   r-   --write-limitr.   r/   r0   --dataflow-templater1   )r$   r4   sessionr5   skip_foreign_keysr6   r7   r8   write_limitr9   r:   r;   dataflow_templater%   r<   s                  r   _ParseDataArgsz&SpannerMigrationWrapper._ParseDataArgsP   s    	I
F+,W-.
F+,,-*N;<
F+,*N;<56{#y12W-.-/@ABr   c                    ~dg}|r|j                  d|g       |r|j                  d|g       |r|j                  d       |r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |r|j                  d	       |	r|j                  d
|	g       |
r|j                  d|
g       |r|j                  d|g       |S )z,"Parse args for the schema-and-data command.schema-and-datar)   r*   r@   r+   r,   r-   rA   r.   r/   r0   rB   r1   )r$   r4   r5   rD   r6   r7   r8   rE   r9   r:   r;   rF   r%   r<   s                 r   _ParseSchemaAndDataArgsz/SpannerMigrationWrapper._ParseSchemaAndDataArgs{   s    	"#I
F+,
F+,,-*N;<
F+,*N;<56{#y12W-.-/@ABr   c                     ~dg}|r|j                  d       |r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |S )zParse args for the web command.webz--openz--portr/   rB   )r3   r2   )r$   	open_flagportr:   rF   r%   r<   s          r   _ParseWebArgsz%SpannerMigrationWrapper._ParseWebArgs   si     	Ix $'(y12-/@ABr   c	                 J   ~	dg}
|r|
j                  d|g       |r|
j                  d|g       |r|
j                  d|g       |r|
j                  d       |r|
j                  d       |r|
j                  d       |r|
j                  d       |r|
j                  d	       |
S )
z$"Parse args for the cleanup command.cleanupz--jobIdz--dataShardIdsr-   z--datastreamz
--dataflowz--pubsubz--monitoringr/   r1   )r$   job_iddata_shard_idsr8   
datastreamdataflowpub_sub
monitoringr:   r%   r<   s              r   ParseCleanupArgsz(SpannerMigrationWrapper.ParseCleanupArgs   s     	I	6*+(.9:*N;<~&|$z"~&}%r   c                    ~dg}|r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |r|j                  d|g       |	r|j                  d	|	g       |r|j                  d
|g       |
r|j                  d|
g       |S )z#"Parse args for the import command.importz
--instancez
--databasez--table-namez--source-uriz--source-formatz--schema-uriz--csv-line-delimiterz--csv-field-delimiterr0   z--database-dialect)r2   )r$   instancedatabase
source_urisource_format
table_namer;   
schema_uricsv_line_delimitercsv_field_delimiterdatabase_dialectr%   r<   s                r   ParseImportArgsz'SpannerMigrationWrapper.ParseImportArgs   s     	
Ih/0h/0
34
34)=9:
34.0BCD/1DEFW-.,.>?@r   c                 ^   |dk(  r | j                   di |S |dk(  r | j                  di |S |dk(  r | j                  di |S |dk(  r | j                  di |S |dk(  r | j                  di |S |dk(  r | j
                  di |S t        j                  dj                  |            )	z-Call the parser corresponding to the command.r(   r?   rI   rL   rQ   rZ   z1Invalid Operation [{}] for spanner-migration-toolr   )	r=   rG   rJ   rO   rX   rd   r   InvalidOperationForBinaryformat)r$   commandr%   s      r   _ParseArgsForCommandz,SpannerMigrationWrapper._ParseArgsForCommand   s    ("T"",V,,	F	 T  *6**	%	%)T))3F33	E	T)&))	I	"T"",V,,	H	!T!!+F++77
=
D
DW
MO Or   )NNNNFNN)
NFNNNNFNNN)FNNN)NNFFFFN)NNNNNN)r   r   r   r   r#   r=   rG   rJ   rO   rX   rd   ri   __classcell__)r&   s   @r   r   r   *   s    EL #&*"&*$!%#D !',$( $(!%"#!'+)Z &*05-1%)-1*.&+(,&*04&R $"&*	* '+&*"' %$"'!%H "&"!%)-*.'+#JOr   r   )NN)r   
__future__r   r   r   r	   r   &googlecloudsdk.command_lib.util.anthosr   googlecloudsdk.corer   c_exceptr   Errorr   StreamingBinaryBackedOperationr   r   r   r   <module>rq      sN    _ &  '  	 D 6R R`O/NN `Or   