
    ,.                        d Z ddlmZ ddlmZ ddlm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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 Zd Z G d dej>                        Z ejB                   ejD                  ejF                  jH                         G d dejJ                                      Z&y)#Create a Flink job from a Java jar.    )absolute_import)division)unicode_literalsN)util)waiter)base)
exceptions)flags)flink_backend)common_args)log)
properties)	resources)yaml)encoding)files)	platformsc                     | dk(  rJd} |j                  d      rd} n'|j                  d      rd} n|j                  d      rd} | st        d	      | S )
z8Returns the job type based on the job_type and job_file.autoNz.pypythonz.sqlsqlz.jarjarzAUnable to determine type of job [{}]. Job input files must end in)endswithUnknownJobType)job_typejob_files     (lib/surface/managed_flink/jobs/create.py
GetJobTyper   (   sb    Hh			6	"h			6	"h
M  
/    c                 R    d}| j                  d      s| j                  d      rd}|S )z-Returns the input type based on the job_file.file://ar://zartifactregistry://)
startswith)r   
input_types     r   GetInputTyper&   9   s0    * !X%8%89N%OJ	r    c                       e Zd ZdZy)r   z.Raised when the job type cannot be determined.N)__name__
__module____qualname____doc__ r    r   r   r   C   s    6r    r   c                   4    e Zd ZdZddiZd Zed        Zd Zy)Creater   EXAMPLESz
      To create a Flink job from a Java jar, run:

      $ {command} my-job.jar --project=my-project --location=us-central1
      c                 
   |j                   r0|j                  s|dk(  rt        j                  |j                          |j                  r)t        j
                  j                  |j                         |j                  ryt        j                  j                  |d      }t        j                  j                  |      syt        j                  j                  |d      }t        j                  j                  |      syt        j                  |      5 }t        j                  |      }ddd       t               }	|	j!                  t        j                  j                  |d             d   d   D ](  }
|
j#                  d      s|	j!                  |
dd        * t%        j&                  |	t        j                  j                  |j(                  |d   d	               }t+        j,                  | j/                               }|j1                  d
j3                  |d   d         |t        j                  j                  |d         |d   d   D 
cg c]
  }
||
dd     c}
      }|j4                  r|j4                  |_        |j8                  r@|j;                  |j8                        }|j<                  r|j<                  |_        ||_        |jA                         }|jB                  dk(  r"|jE                  |jF                        |_$        n7|jK                  |jL                  |jL                  |jN                        |_(        ||_)        |jU                  |d   d	   |      }|jV                  r|jV                  |_,        |j[                  dj3                  t\        j^                  j`                  jb                  je                  d      |jf                        |d   d	   |      }|j                  rt        j                  |       |jh                  r|S t+        jj                  | j/                               }|jl                  jn                  jq                  |      }|j                  rt        j                  |       t        j                  dj3                  |jr                               |jt                  r|S tv        jx                  j{                  |j4                  d      }t}        j~                  t}        j                  |jl                  jn                  |jl                  j                        |dj3                  |j4                               |S # 1 sw Y   2xY wc c}
w )z-Process results of BinaryOperation Execution.r   Nzjobgraph.binzjobspec.yamljobjarszfile:   idz{0}name)jobNamejobGraphUrijarUris)vpcfixed)parallelism)r;   minParallelismmaxParallelism)r5   jobSpeczprojects/{0}/locations/{1}T)required)parentjobIdr1   zCreate request issued for [{0}]z*managedflink.projects.locations.operations)
collectionz+Waiting for operations [{0}] to complete...)Bstdoutshow_outputr   Printstderrstatusfailedospathjoinexistsr   
FileReaderr   loadlistappendr$   r   Uploadstaging_location
flink_utilGetMessagesModuleReleaseTrackJobSpecformatr5   displayNamenetworkNetworkConfig
subnetworknetworkConfigAutotuningConfigautotuning_modeFixedr;   r:   Elasticmin_parallelismmax_parallelismthroughputBasedautotuningConfigJob
deploymentdeploymentId.ManagedflinkProjectsLocationsJobsCreateRequestr   VALUEScoreprojectGetlocationdry_runFlinkClientclientprojects_locations_jobsr.   rA   async_submitr   REGISTRYParser   WaitForCloudOperationPollerprojects_locations_operations)selfresponser   temp_dirargsjobgraphjobspecfjobspec_jsonfiles_to_uploadr   destmsgconfigautotuning_configr1   createflink_client	create_opcreate_op_refs                       r   _JobSubmitResponseHandlerz Create._JobSubmitResponseHandlerT   sG   D,,E0A	ii 	jjx'ww||Hn5H77>>(#ggll8^4G77>>'"			'	"aYYq\l 
# fO277<<.ABE"6*		 s12w' + 
T**L,?,EFD 
&
&t'8'8':
;Ckk\%089h?@*6u*=f*EF*E3c!"g*EF  G yy IIg||  T\\ 2f	 OO$g ,,.w& #		d6F6F	 G*-++**---- +6 +'
  1G
''|E*40''
BCc??+22""**...=t}}
 5!$' @ F 	ii||o))$*;*;*=>L##;;BB6JI	ii	II/66v||DEo&&,,#O - M NN##77==	
 	5<<Y^^L O[ 
#	"$ Gs   UU'U$c                 p   t        j                  d      j                  |        t        j                  | d       t        j
                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                   |        t        j"                  |        t        j$                  |        t        j&                  |        t        j(                  |        t        j*                  |        t        j,                  |        y )NzProject to run the job in.)help_text_to_overwritezDeployment to run the job in.)r   ProjectArgumentAddToParserr   AddDeploymentArgumentAddShowOutputArgumentAddDryRunArgumentAddAsyncArgumentAddMainClassArgumentAddExtraJarsArgumentAddLocationArgumentAddStagingLocationArgumentAddAutotuningModeArgumentAddJobJarArgumentAddJobTypeArgumentAddNameArgumentAddFixedParallelismArgsAddElasticParallelismArgsAddNetworkConfigArgsAddWorkloadIdentityArgumentAddJobArgsCollectorAddPythonVirtualEnvArgumentAddExtraArchivesArgument)parsers    r   ArgszCreate.Args   s1    ;k&	'F 
'	F#	6"	v&	v&	f%	$$V,	##F+	F#	V$	&!	!!&)	##F+	v&	%%f-	f%	%%f-	""6*r    c           	      f
   t         j                  j                         }|t         j                  j                  u rt	        j
                  d      t        |j                        }|dk(  rXt        j                  j                  |j                        s/t	        j                  ddj                  |j                              t        |j                  |j                        }|j                  r"|j                   sDt	        j                  dd      |j                   r"|j                  st	        j                  dd      |j"                  r"|j$                  rt	        j                  d	d
      t'        j(                  |j*                  |j,                  |j.                  |j0                         |j2                  j5                  d      st	        j                  dd      t'        j6                  |j2                         |dk(  rS|j8                  st	        j                  dd      |j8                  j5                  d      st	        j                  dd      t;               }||d<   |dk(  r+|j<                  rNdj?                  |j<                        |d<   n/|dk(  r*|j<                  rdj?                  |j<                        |d<   |jA                  d      rktC        jD                  t        jF                  d      rGdj?                  |jA                  d      tC        jD                  t        jF                  d      g      |d<   |jH                  r
d|d<   d|d<   tK        jL                         5 }|j                  }|dk(  rt'        jN                  |j                        \  }}	tQ        jR                  dj                  |             t        j                  j?                  ||jU                  d      d         }t'        jV                  ||	jY                                tQ        jZ                  d|z          t'        j\                         }
 |
d2i dd d!|d|d"d#d$|j$                  d%|j2                  d&|j*                  d'|d(|j                  d)|j                   d*|j^                  d+|j`                  d,|jb                  d-|j<                  d.|jd                  d/|jf                  d0|j8                  d1t'        jh                  |      }| jk                  ||||      cd d d        S # 1 sw Y   y xY w)3Nz&Job creation not supported on Windows.r"   z
JAR|PY|SQLz$Job definition [{0}] does not exist.znetwork-config-subnetworkzG--network-config-subnetwork must be set if --network-config-vpc is set.znetwork-config-vpczG--network-config-vpc must be set if --network-config-subnetwork is set.zworkload-identityz9--workload-identity cannot be set if --deployment is set.zgs://zstaging-locationz:Staging location must be of the form gs://<bucket>/<path>.r   zpython-venvz4Python virtualenv must be set if job type is python.zDPython Virtualenv location must be of the form gs://<bucket>/<path>.CLOUDSDK_MANAGEDFLINK_JOB_TYPE:HADOOP_CLASSPATHr   trueCLOUDSDK_MANAGEDFLINK_DRY_RUNCLOUDSDK_MANAGEDFLINK_ECHO_CMDr#   z.Downloading {0} file from Artifact Registry.../)	dest_pathartifact_jar_pathz$Successfully downloaded the file to commandrunr   targetgcloudrf   rR   r^   rz   rY   r[   r5   rm   
main_class
extra_jars
extra_argsextra_archivespython_venvenvr,   )6r   OperatingSystemCurrentWINDOWSr
   ToolExceptionr&   r1   rI   rJ   rL   InvalidArgumentExceptionrW   r   r   rY   r[   workload_identityrf   r   ValidateAutotuningr^   ra   rb   r;   rR   r$   CheckStagingLocationr   dictr   rK   getr   GetEncodedValueenvironrn   r   TemporaryDirectoryCreateRegistryFromArtifactUrir   rE   splitDownloadJarFromArtifactRegistryRelativeNamedebugFlinkClientWrapperr5   rm   r   job_argsarchivesGetEnvArgsForCommandr   )rx   r{   
current_osr%   r   r   rz   jar_pathjar_nameregistrycommand_executorry   s               r   Runz
Create.Run   s   **224JY..666$$%MNNdhh'JYrww~~dhh'?//

0
7
7
A  $--2H ||__11'
 	

 
\\11 
 	
 $////

E  $$	   ++G4//

F  &&t'<'<= 811B
 	

 ((111%
 	
 &C,4C()8	"%((4??";	U		"%((4??"; ww!"x'?'?


&( !$
''$
%

"
"2::/A
B* !	c
 ||-3c
)*.4c
*+		!	!	#xh	w	*HHHH
( 			<CCHM	
 77<<(..*=b*AB55(2G2G2I	
 			88CD&99;!   	
 __  00 ..  ,, __ yy == __ __ ]]  !" &&#$ 005%h( ++Hh$OI 
$	#	#s   (F5T''T0N)	r(   r)   r*   r+   detailed_helpr   staticmethodr   r   r,   r    r   r.   r.   G   s:     ,  
-^@ + +8APr    r.   )'r+   
__future__r   r   r   rI   $googlecloudsdk.api_lib.managed_flinkr   rS   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper	   r
   (googlecloudsdk.command_lib.managed_flinkr   r   $googlecloudsdk.command_lib.util.argsr   googlecloudsdk.corecore_exceptionsr   r   r   r   googlecloudsdk.core.utilr   r   r   r   r&   Errorr   DefaultUniverseOnlyReleaseTracksrU   ALPHABinaryBackedCommandr.   r,   r    r   <module>r      s    * &  ' 	 C . ( . : B < = # * ) $ - * ."7_** 7 D%%++,IPT%% IP - IPr    