
    yj b                     (   d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlmZmZmZmZ ddlmZmZ dd	lmZmZ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# g dZ$d Z%d Z& G d d          Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/dS )u   
本文件实现了产线任务提交、查询、停止功能

Authors: xiangyiqing(xiangyiqing@baidu.com), suoyi@baidu.com
Date:    2024/3/2
    N)Path)PrettyTable)logconfig)	ErrorEnum)AUTH_DIRAUTH_TOKEN_FILELOG_DIRLOG_LEVEL_FILE)zip_direrr_resp)upload_super_fileMyBosClientupload_file)pipeline)dataset)BceClientConfiguration)BceCredentials)BceHttpClientError)	BosClient)
set_configcreatequerystopc                 &    t           j         d|  dS )u   拼接产线详情链接z
/pipeline/z/detail)r   #STUDIO_MODEL_API_URL_PREFIX_DEFAULT)pipeline_ids    i/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/aistudio_sdk/sdk/pipeline.pyget_detail_urlr   %   s    8XXKXXXX    c                     t                      }g d|_        | D ]}|                    |           t          j        |           dS )u   
    表格化打印
    tabled_log_info([
        ["pipeline_id", "args.summit_name", "status", "get_detail_url(pipeline_id)", "create_ime"], 
        [], 
        ...
    ])
    )pidnamestatusurl
createTimeN)r   field_namesadd_rowr   info)detail_listtabledetails      r   tabled_log_infor-   *   sP     MMEFFFE  fHUOOOOOr    c                   R    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )Pipelineu   
    pipeline类
    r   c                    t          j        d|            |j        }|r	 t          j                            t                    s)t          t                                        dd           t          t          d          5 }|                    |           ddd           n# 1 swxY w Y   t          j        dt                      n.# t          $ r!}t          j        d|            Y d}~nd}~ww xY w|j         }|r	 t          j                            t                    s)t          t                                        dd           t          t           d          5 }|                    |           ddd           n# 1 swxY w Y   t          j        dt                       dS # t          $ r"}t          j        d|            Y d}~dS d}~ww xY wdS )u*   
        配置: token, log_level
        u   鉴权配置，参数: T)parentsexist_okwNz[OK] Configuration saved to: z[Error] Configuration faild: )r   debugtokenospathexistsr   r   mkdiropenr	   writer)   	Exceptionerrorr
   r   )selfargsr5   filee	log_levels         r   r   zPipeline.set_config@   sq    		2D22333
 
	?	?w~~h// FNN(((EEE/3// &4JJu%%%& & & & & & & & & & & & & & &JJJKKKK ? ? ?	=!==>>>>>>>>? H	 
	?	?w~~g.. EMM''t'DDD.#.. *$JJy)))* * * * * * * * * * * * * * *IIIJJJJJ ? ? ?	=!==>>>>>>>>>?
	? 
	?sy   A"C B&C &B**C -B*.C 
C9C44C9A"F3 (F
>F3 
FF3 FF3 3
G=GGc                 X   t           j                            t                    sdS 	 t	          t          d          5 }|                                                                cddd           S # 1 swxY w Y   dS # t          $ r"}t          j	        d|            Y d}~dS d}~ww xY w)u#   
        获取鉴权token
        Nrz"[Error] Read configuration faild: )
r6   r7   r8   r	   r:   readstripr<   r   r=   )r>   r@   rA   s      r   get_authzPipeline.get_auth`   s     w~~o.. 	4	os++ +tyy{{((**+ + + + + + + + + + + + + + + + + + 	 	 	I>1>>???44444	s:   A= &A0#A= 0A44A= 7A48A= =
B)B$$B)c                    t          j        d|            |                                 }|sEt          j        t	          t
          j        j        t
          j        j        dz                        dS t          |j
                  t          j        k    rRt          j        t	          t
          j        j        t
          j        j         dt          j         d                     dS |j        }| d}t          j                            |          sBt          j        t	          t
          j        j        t
          j        j                             dS t          j                            |          sBt          j        t	          t
          j        j        t
          j        j                             dS 	 t          j        d|            t)          ||           t          j        d|            n]# t*          $ rP}t          j        t	          t
          j        j        t
          j        j         d	|                      Y d}~dS d}~ww xY wt          j        t          j        |          j        k     rXt          j        t	          t
          j        j        t
          j        j         d
t          j        dz  dz   d                     dS 	 t          j        d           g }|j
        D ]}|                    d|i           t9          j        ||j        |j        |j         |j!        |j"        |j#        |          }nj# t8          j$        $ rX}t          j        t	          t
          j%        j        t
          j%        j         d|dd                               Y d}~dS d}~ww xY w|d         t
          j&        j        k    r[t          j        t	          t
          j%        j        t
          j%        j         d|d          |d         |d                              dS t          j        d           |d         d         }		 t          j        d           t9          j'        ||	          }nj# t8          j$        $ rX}t          j        t	          t
          j(        j        t
          j(        j         d|dd                               Y d}~dS d}~ww xY w|d         t
          j&        j        k    r[t          j        t	          t
          j(        j        t
          j(        j         d|d          |d         |d                              dS t          j        d           |d         }
|
d         }|
d         }|
d         }|
d         }|
d         }|
d         }	 t          j        d           t9          j)        |||||||           n{# t*          $ rn}t9          j*        ||	d            t          j        t	          t
          j+        j        t
          j+        j         d|dd                               Y d}~dS d}~ww xY wt          j        d!           	 t          j        d"           t9          j*        ||	d#|t          j        ,                    |                    }nj# t8          j$        $ rX}t          j        t	          t
          j-        j        t
          j-        j         d|dd                               Y d}~dS d}~ww xY w|d         t
          j&        j        k    r[t          j        t	          t
          j-        j        t
          j-        j         d|d          |d         |d                              dS t          j        d$           |d         }
|
d%         }|
d&         }t]          |	|j        |t_          |	          |gg           dS )'u$   
        创建产线任务
        u   创建产线，参数: /   , 请使用 aistudio config --token {yourToken}Nu   : 单个任务最多挂载u   个数据集z.zipu   step 1: 开始打包代码... u   代码打包完成! u   : 压缩出错
u!   : 代码包总体积不能超过 i   z MBu   step 2: 请求参数校验...	datasetId:   	errorCodeerrorMsglogIdu   参数校验成功!result
pipelineIdu   step 3: 请求申请ak/sk...   申请ak/sk成功!endpoint
bucketNamefileKeyaccessKeyIdsecretAccessKeysessionTokenu   step 4: 代码上传bos...Fu   代码上传成功!u#   step 5: 回调请求创建产线...Tu   创建成功!stager&   )0r   r4   rG   r=   r   r   TOKEN_IS_EMPTYcodemessagelenmount_datasetr   MOUNT_DATASET_LIMITPARAMS_INVALIDr7   r6   r8   FILE_NOT_FOUNDisdirNEED_FOLDERr   r<   INTERNAL_ERRORPIPELINE_CODE_SIZE_LIMITstatst_sizeFILE_TOO_LARGEappend
pp_requestr   summit_namecmdenvdevicegpuspaymentRequestPipelineExceptionREQUEST_CREATE_PIPELINE_FAILEDSUCCESSbosaclREQUEST_BOSACL_FAILED
bos_uploadcreate_callbackBOS_UPLOAD_FAILEDbasename'REQUEST_CREATE_PIPELINE_CALLBACK_FAILEDr-   r   )r>   r?   r5   
input_pathzip_filerA   dataset_list
dataset_idrespr   rP   rS   bucket_namefile_keyaccess_key_idsecret_access_keysession_tokenrY   
create_imes                      r   r   zPipeline.createn   sx    		2D22333  	Ih(-(03dd     Ft!""V%???Ih(-+3wwvOiwww     F Y
 &&&w~~j)) 	Ih(-(0     Fw}}Z(( 	Ih%*%-     F		ICzCCDDDJ)))I7X778888 	 	 	Ih(-+3HHQHH     FFFFF	 *RWX->->-FFFIh(-+3  I  IV\Vux|V|  @D  WD  I  I  I     F	I5666L"0  
##%     $ 		 	DD 2 	 	 	Ih8=;CPPq#wPP     FFFFF	 	 1 666Ih8=;CYYtJGWYY[!W	     F	'(((8n\2	I4555$UK88DD2 	 	 	Ih/42:GGagGG     FFFFF	 	 1 666Ih/42:PPd:>NPP[!W	     F	&'''h*%\*)$}-"#45~.	I2333!!     	 	 	&  
 Ih+0.6CC!DSD'CC     FFFFF	 		'(((	I;<<<-  ** DD 2 	 	 	IhAFDLYYPQRVSVRVPWYY     FFFFF	 	 1 666IhAFDLbbPTU_P`bb[!W	     F	/"""hwL)
 {++
 	 	 	 	 	s   6>G5 5
I?AI

IA0M N*AN%%N*)Q0 0S?ASS.W 
YA#X??YA	Z& &\5A\\c                    t          j        d|            |                                 }|sEt          j        t	          t
          j        j        t
          j        j        dz                        dS 	 t          j
        ||j        |j        |j                  }nj# t          j        $ rX}t          j        t	          t
          j        j        t
          j        j         d|dd                               Y d}~dS d}~ww xY w|d         t
          j        j        k    r[t          j        t	          t
          j        j        t
          j        j         d|d          |d         |d                              dS t#                      }|d	         D ]G}|                    |d
         |d         |d         t'          |d
                   |d         g           Ht)          |           dS )u   
        查询产线
        u   查询产线，参数: rI   NrK   rL   rM   rN   rO   rP   rQ   pipelineNamerY   r&   )r   r4   rG   r=   r   r   rZ   r[   r\   rj   r   query_pipeline_idr#   r$   rq   REQUEST_QUERY_PIPELINE_FAILEDrs   listri   r   r-   )r>   r?   r5   r   rA   dataress          r   r   zPipeline.query$  s    		2D22333  	Ih(-(03dd     F	#&		 DD 2 	 	 	Ih7<:BOOagOO     FFFFF	 	 1 666Ih7<:BXXd:FVXX[!W	     Fvv> 		 		CKK%'L"3|#455%    	s   4&B D*AC==Dc                 
   t          j        d|            |                                 }|sEt          j        t	          t
          j        j        t
          j        j        dz                        dS 	 t          j
        ||j                  }nj# t          j        $ rX}t          j        t	          t
          j        j        t
          j        j         d|dd                               Y d}~dS d}~ww xY w|d         t
          j        j        k    r[t          j        t	          t
          j        j        t
          j        j         d|d          |d         |d                              dS t          j        d	           dS )
u   
        停止产线
        u   停止产线，参数: rI   NrK   rL   rM   rN   rO   u   [OK] 停止成功.)r   r4   rG   r=   r   r   rZ   r[   r\   rj   r   stop_pipeline_idrq   REQUEST_STOP_PIPELINE_FAILEDrs   r)   )r>   r?   r5   r   rA   s        r   r   zPipeline.stopW  s    		2D22333  	Ih(-(03dd     F	?5$*?@@DD2 	 	 	Ih6;9ANNQttWNN     FFFFF	 	 1 666Ih6;9AWWT*EUWW[!W	     F%&&&&&s   4B C6AC11C6c                    t          j        d|            |                                 }|sEt          j        t	          t
          j        j        t
          j        j        dz                        dS 	 t          j        d           t          j
        ||j                  }nw# t          j        $ re}t          j        t	          t
          j        j        t
          j        j         dt          |          dd                               Y d}~dS d}~ww xY w|d         t
          j        j        k    r[t          j        t	          t
          j        j        t
          j        j         d|d          |d         |d	                              dS t          j        d
           |d         }|d         }|d         }|d         }|d         }	|d         }
|d         }|                    d          }|                    d          dz   }|j        r^|j                            d          |_        |j                            d          |_        |j        r|j        dz   |_        ||j        z   }t'          t)          ||	          ||
          }t+          |          }	 t          j        d| d           |                    ||d          }t          j        d           |j        D ]3}|j                            |d          }|rt          j        |           4|j        D ]/}t          j        |j                            |d                     0dS # t:          $ r]}t          j        t	          t
          j        j        t
          j        j         dt          |                                Y d}~dS d}~ww xY w)u@   
        列出某个 job 的 output 目录下的文件
        u"   列出 job 输出文件，参数: rI   N   请求申请ak/sk...rK   rL   rM   rN   rO   rR   rP   rS   rT   rV   rW   rX   rU   /credentialsrS   security_tokenu0   列出 output 目录下的文件和文件夹...[])prefix	delimiteru   文件和文件夹列表: )r   r4   rG   r=   r   r   rZ   r[   r\   rj   bosacl_ls_cpjob_idrq   ru   strrs   lstriprstrip	directoryr   r   r   list_objectsr)   contentskeyreplacecommon_prefixesr   r   BOS_LIST_FILES_FAILED)r>   r?   r5   r   rA   rP   rS   r   r   r   r   r   bos_conf
bos_clientresposer@   r   ds                     r   list_output_fileszPipeline.list_output_filesy  s    		=t==>>>  	Ih(-(03dd     F	I,---*5$+>>DD2 	 	 	Ih/42:LLc!ffTcTlLL     FFFFF	 	 1 666Ih/42:PPd:>NPP[!W	     F	&'''h*%\*}-"#45~.)$??3''??3''#-> 	5!^22377DN!^22377DN~ 5!%#!5#dn4)&}6GHH(
 
 

 x((
	ITTTTUUU --k(VY-ZZGH1222( " "h&&x44 "HSMMM, 9 9))(B7788889 9 " 	 	 	Ih/42:FFc!ffFF     FFFFF	s3   4.B# #D2ADDB6M 
N= AN88N=c                    t          j        d|            |                                 }|sEt          j        t	          t
          j        j        t
          j        j        dz                        dS 	 t          j        d           t          j
        ||j                  }nw# t          j        $ re}t          j        t	          t
          j        j        t
          j        j         dt          |          dd                               Y d}~dS d}~ww xY w|d         t
          j        j        k    r[t          j        t	          t
          j        j        t
          j        j         d|d          |d         |d	                              dS t          j        d
           |d         }|d         }|d         }|d         }|d         }	|d         }
|d         }|                    d          }|                    d          dz   }t%          t'          ||	          ||
          }t)          |          }||j        z   }t,          j                            |j                  }|j        dk    r6t,          j                            t-          j                    |          |_        t,          j                            |j                  r*t,          j                            |j        |          |_        t          j        d| d|j                    	 |                    |||j        z   |j                   t          j        d|j                    dS # t>          $ r}t          j        d|j                    t          j        t	          t
          j         j        t
          j         j         dt          |          dd                               Y d}~dS d}~ww xY w)uI   
        下载某个 job 的 output 目录下的文件到本地
        u"   下载 job 输出文件，参数: rI   Nr   rK   rL   rM   rN   rO   rR   rP   rS   rT   rV   rW   rX   rU   r   r   .u!   下载 output 目录下的文件[u   ] 到 u   文件下载成功: u-   下载失败：请检查文件是否存在：)!r   r4   rG   r=   r   r   rZ   r[   r\   rj   r   r   rq   ru   r   rs   r   r   r   r   r   result_filer6   r7   ry   
local_pathjoingetcwdrb   get_object_to_filer)   r   BOS_DOWNLOAD_FAILED)r>   r?   r5   r   rA   rP   rS   r   r   r   r   r   r   r   bos_filelocal_file_names                   r   download_output_filezPipeline.download_output_file  s    		=t==>>>  	Ih(-(03dd     F	I,---*5$+>>DD2 	 	 	Ih/42:LLc!ffTcTlLL     FFFFF	 	 1 666Ih/42:PPd:>NPP[!W	     F	&'''h*%\*}-"#45~.)$??3''??3''#- *&}6GHH(
 
 

 x((
d..'**4+;<<?c!! gll29;;HHDO7==)) 	M gll4?OLLDO	WhWWdoWWXXX
	))+x$BR7RTXTcdddH=DO==>>>>>! 	 	 	IXdFVXXYYYIh-208JJCFF4C4LJJ     FFFFF	s3   4.B# #D2ADDA M 
O"!A6OO"c                 t   g }|}d}|D ]}	 t          j        d           t          j        |          }n# t          j        $ rr}t          j        t          t          j        j	        d         t          j        j	        d          dt          |          dd                               Y d}~ dS d}~ww xY w|d         t          j        j	        d         k    rht          j        t          t          j        j	        d         t          j        j	        d          d|d          |d         |d	                               dS t          j        d
           |d         }	|	d         }
|	d         }|	d         }|	d         }|	d         }|	d         }t          t          ||          |
|          }t          |          }|                    d          rt           j                            |          }t          j        d| d| d           |dz  }t           j                            |          sjt          j        t          t          j        j	        d         t          j        j	        d          d|                      t          j        d|            	 t-          ||||           t          j        d           n# t.          $ r}t          j        t          t          j        j	        d         t          j        j	        d          dt          |          dd                               t          j        d|            Y d}~Gd}~ww xY wt          j        |t           j                            |          ||          }|r.|                    |           t          j        d|            t          j        t          t          j        j	        d         t          j        j	        d          d                     t          j        d           t          j        d|            |S )u   
        上传文件
           r   r   rK   NrL   rM   rN   rO   rR   rP   rS   rT   rV   rW   rX   rU   r   r   u	   上传第u
   个文件[u   ]到BOS路径u$   上传失败（文件不存在）：u   BOS文件上传成功u   BOS文件上传失败：z
add file: u   : 上传文件失败   add file 失败u   所有文件上传结束: )r   r4   
ds_requestbos_acl_dataset_fileRequestDatasetExceptionr=   r   r   ru   valuer   rs   r   r   r   
startswithr6   r7   abspathr8   UPLOAD_FILE_NOT_FOUNDr)   r   r   rx   add_filery   ri   )r>   r5   filesfile_idslocal_filesilocal_file_pathr   rA   rP   rS   r   r   r   r   r   r   r   file_ids                      r   _upload_fileszPipeline._upload_files  sd    * D	, D	,O	0111!6u==5   	(39!< 6<Q?QQ3q66$3$<QQ     tttttt K I$5$;A$>>>	(39!< 6<Q?UU4
CSUU%M	     ttI+,,,(^Fj)H .K"=1M &'8 9">2Mi(H .*=:KLL!,  H
 %X..J))#.. C"$'///"B"BIM!MMMMMNNNFA7>>/22 	(39!< 6<Q?TT?TT     QQQRRR
!*k?HUUU	23333%   	(/5a8 28;MMs1vvdsd|MM     	F_FFGGG !)%1A1A/1R1RT\^ijjG ,(((	0w001111	(/5a8 28;QQQ     *++++	9x99:::s/   (6B7A&B22B7&K
MA=MMc                    t          j        d|            t          |j                  dk    rQt          j        t          t          j        j        d         t          j        j        d          d                     dS | 	                                }|sQt          j        t          t          j
        j        d         t          j
        j        d         dz                        dS |                     ||j                  }|rt          j        d           |j        rd	nd}t          j        ||j        |||j        |j        
          }|r!t          j        d|j         d|            dS t          j        d           dS t          j        t          t          j        j        d         t          j        j        d          d                     dS )u!   
        创建数据集
        u   创建数据集，参数: (   r   r   u.   : 数据集名称长度不能超过40个字符NrI   u   创建数据集...   )dataset_typedataset_absdataset_licenseu   数据集创建成功: z id: u   数据集创建失败   : 本地文件上传失败)r   r4   r]   r#   r=   r   r   r`   r   rG   rZ   r   r   publicr   create_datasetdescriptionlicenser)   DATASET_CREATION_FAILED)r>   r?   r5   r   r   r~   s         r   r   zPipeline.create_datasetb  s    		5t55666ty>>BIh(.q1+1!4ddd     F  	Ih(.q1(.q14ee     F%%eTZ88 	I*+++ $211L#25$)X@L?C?OCG<Q Q QJ  3O49OO:OOPPPPP	122222Ih17:4:1=YYY      r    c                 j   t          j        d|            |                                 }|sQt          j        t	          t
          j        j        d         t
          j        j        d         dz                        dS |                     ||j	                  }|r4t          j        d|            t          j        ||j        |          }dS t          j        d           t          j        t	          t
          j        j        d         t
          j        j        d          d                     dS )	u'   
        上传数据集文件
        u    上传数据集文件，参数: r   r   rI   Nu   add file 成功 r   r   )r   r4   rG   r=   r   r   rZ   r   r   r   r   add_files_to_datasetidr   )r>   r?   r5   r   r   s        r   r   zPipeline.add_file  s/    		;T;;<<< 	Ih(.q1(.q14ee     F%%eTZ88 		I3334441%(KKCCC I()))Ih17:4:1=YYY      r    N)__name__
__module____qualname____doc__OBJECT_NAMEr   rG   r   r   r   r   r   r   r   r    r    r   r/   r/   :   s          K? ? ?@  s s sl1 1 1f '  '  'DM M M^G G GRO O Ob& & &R    r    r/   c                  .     t                      j        |  S )r   )r/   r   r?   s    r   r   r     s     8:: $''r    c                  .     t                      j        |  S )r   )r/   r   r   s    r   r   r     s    8::d##r    c                  .     t                      j        |  S )r   )r/   r   r   s    r   r   r     s    8::T""r    c                  .     t                      j        |  S r   )r/   r   r   s    r   r   r     s    8::?D!!r    c                  .     t                      j        |  S r   )r/   r   r   s    r   r   r     s    '8::'..r    c                  .     t                      j        |  S r   )r/   r   r   s    r   r   r     s    *8::*D11r    c                  .     t                      j        |  S r   )r/   r   r   s    r   r   r     s    $8::$d++r    c                  .     t                      j        |  S r   )r/   r   r   s    r   r   r     s    8::%%r    )0r   r6   pathlibr   prettytabler   aistudio_sdkr   r   aistudio_sdk.constant.err_coder   aistudio_sdk.constant.constr   r	   r
   r   aistudio_sdk.utils.utilr   r   aistudio_sdk.utils.bos_sdkr   r   r   aistudio_sdk.requestsr   rj   r   r   !baidubce.bce_client_configurationr   baidubce.auth.bce_credentialsr   baidubce.exceptionr    baidubce.services.bos.bos_clientr   __all__r   r-   r/   r   r   r   r   r   r   r   r   r   r    r   <module>r      s    
			       # # # # # # $ $ $ $ $ $ $ $ 4 4 4 4 4 4 Z Z Z Z Z Z Z Z Z Z Z Z 5 5 5 5 5 5 5 5 R R R R R R R R R R 8 8 8 8 8 8 7 7 7 7 7 7 D D D D D D 8 8 8 8 8 8 1 1 1 1 1 1 6 6 6 6 6 6  Y Y Y
   g	 g	 g	 g	 g	 g	 g	 g	R( ( ($ $ $# # #" " "/ / /2 2 2, , ,& & & & &r    