
    9i                        S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	J
r
  SSKJr  SSKJr  \" \R                   R#                  S	S
5      5      r " S S\	5      rS\4S jrSS\S\S\\   4S jjrS\S\4S jrS\S\4S jrg)uo   
本文件实现了对bos的封装, 首先安装 bce-python-sdk

Authors: suoyi@baidu.com
Date:    2024/01/03

    )logN)BceClientConfiguration)BceCredentials)	BosClientBceClientError)utils)ListAISTUDIO_BOS_RETRY_TIMES
   c                   T   ^  \ rS rSrSr SS jr         SU 4S jjrS rSrU =r	$ )	MyBosClient   u6   
重写BosClient的_upload方法，增加重试功能
c                    U	R                  5       (       a  [        R                  " SU S35        g Sn[        [        5       H\  n U R                  XUXEXgU
US9	nUR                  UUR                  R                  S.5        [        R                  " SU S35        Sn  O   U(       d9  U	R                  5         [        R                  " SU S35        [        SU S35      eg ! [         aX  n[        R                  " SU S35        [        R                  " U5        [        R                  " S	US
-    S35         S nAM  S nAff = f)Nz%upload task canceled with partNumber=!F)progress_callbacktraffic_limit)
partNumbereTagz$upload task success with partNumber=Tz#upload task failed with partNumber=u	   重试第   u   次u   !已取消上传)	is_cancelr   debugrangeRETRY_TIMESupload_part_from_fileappendmetadataetag	Exceptionerrorcancelr   )selfbucket_name
object_key	upload_idpart_number	part_size	file_nameoffset	part_listuploadTaskHandler   r   successiresponsees                   Z/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/aistudio_sdk/utils/bos_sdk.py_upload_taskMyBosClient._upload_task   sC    %%''II=k]!LM{#A255ky6AiHYDQ 6 S   "-$--22"  		@QOP $$ ##%II;K=HXYZ #F{mST!UVV   2		?}ANO		!		Ia!eWC0112s   AC##
E-AE  Ec                 ,   > [         TU ]  XX4XVXxXX5      $ )u[   调用原始的 put_super_obejct_from_file，但这里会使用上面定义的 _upload_task)superput_super_obejct_from_file)r!   r"   keyr'   
chunk_size
thread_numr*   content_typestorage_classuser_headersr   r   config	__class__s                r/   r4   &MyBosClient.put_super_obejct_from_file<   s)     w1+I2<2>2>2?	I 	I    c                     g)u-   需要覆盖父类的方法，否则会报错bos )r!   s    r/   _compute_service_idMyBosClient._compute_service_idL   s    r>   rA   )NN)	   NNNNNNNN)
__name__
__module____qualname____firstlineno____doc__r0   r4   rB   __static_attributes____classcell__)r<   s   @r/   r   r      sC     <@W> RS.2480415045915*.I  r>   r   returnc                 @    [        [        [        X5      U US95      nU$ )u   
获取sts client
)credentialsendpointsecurity_token)r   r   r   )bos_hoststs_aksts_sksession_token
bos_clients        r/   
sts_clientrV   P   s,    
 3,:6,J)1/<> ?J r>   rU   bucketfilesc           	      @    U H  nU R                  XU-   USSS9  M     g)u0   
上传文件
key_prefix: 上传文件的前缀
rD   N)r6   r7   )r4   )rU   rW   rX   
key_prefixfiles        r/   upload_filesr\   \   s,    
 --f46GZ[hl-m r>   c                 8    U R                  X[        U5      5      $ )    
上传文件
key: 存储路径
)put_object_from_filestr)rU   rW   r[   r5   s       r/   upload_filera   d   s     **6D	BBr>   c           	      .   [        [        R                  R                  SS5      5      n[        R                  R                  SS5      nU(       a  [        U5      nU R	                  X[        U5      UUSS9nU(       d  [        R                  " S5        U$ )r^   AISTUDIO_UPLOAD_CHUNK_SIZE_MBrD   AISTUDIO_UPLOAD_THREAD_NUMN)r6   r7   r   u  upload file failed: 已经取消或者上传失败，如果上传失败，请配置环境变量 AISTUDIO_UPLOAD_CHUNK_SIZE_MB (int类型，默认为5，单位MB)，减小分块大小后重试，例如：export AISTUDIO_UPLOAD_CHUNK_SIZE_MB=3 后重新执行如果带宽过小，需要配置环境变量 AISTUDIO_UPLOAD_THREAD_NUM 减少线程数，防止部分分块上传超时，例如：export AISTUDIO_UPLOAD_THREAD_NUM=1 后重新执行)intosenvirongetr4   r`   r   r   )rU   rW   r[   r5   r6   r7   ress          r/   upload_super_filerj   m   s    
 RZZ^^$CQGHJ <dCJ_


/
/SY<F<FCG 0 IC 		 U 	V
 Jr>   ) )rI   aistudio_sdkr   rf   !baidubce.bce_client_configurationr   baidubce.auth.bce_credentialsr    baidubce.services.bos.bos_clientr   r   baidubcer   typingr	   re   rg   rh   r   r   rV   r`   r\   ra   rj   rA   r>   r/   <module>rr      s     	 D 8 F  "**..!;R@A6) 6p	; 	n[ n# nd3i nCK C C+ s r>   