
    9iRZ                     p   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
Jr  SSKJrJrJr  SSKrSSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r   SSK!J"r"J#r#J$r$  SSK%J&r&  SS	K'J(r(  SS
K)J*r*  SSK+J,r,  SSK-J.r.  SSK/J0r0  SSK1J2r2J3r3  SSK4J5r5  SSK4J6r6  SSK7J8r8  SS/r9     S:S\:S\:S\\:   S\\;   S\\:   S\\:   S\:S\\:   4S jjr<     S:S\:S\:S\\:   S\\;   S\\:   S\\:   S\:S\\:   4S jjr=S  r>SSSSSS!.S\:S\:S\:S\\:   S\\;   S\\:   S\:S\\:   4S" jjr?S\4S#\:S\:S\:4S$ jjr@S\:4S% jrAS\:4S& jrBS' rCS\:4S( jrDS) rES* rF  S;S+ jrG   S<S,\:S\:S-\:S.\\\:\:4      S/\HS0\;4S1 jjrIS2 rJS3 rK  S=S,\:S\:S-\:S/\HS.\\\:\:4      S0\;4S4 jjrLS5\HS\;4S6 jrMS7\:4S8 jrNS7\:4S9 jrOg)>u8   
本文件实现了星河社区git文件的下载功能
    N)quote)DictOptionalUnion   )REPO_TYPE_MODELREPO_TYPE_DATASETREPO_TYPE_SUPPORTMODEL_ID_SEPARATORDEFAULT_AISTUDIO_GROUPTEMPORARY_FOLDER_NAMESTUDIO_GIT_HOST_DEFAULTDEFAULT_DATASET_REVISION'AISTUDIO_PARALLEL_DOWNLOAD_THRESHOLD_MBAISTUDIO_DOWNLOAD_PARALLELSAPI_FILE_DOWNLOAD_RETRY_TIMESAPI_FILE_DOWNLOAD_TIMEOUTAPI_FILE_DOWNLOAD_CHUNK_SIZE	FILE_HASHDEFAULT_MODEL_REVISION)InvalidParameterNotExistErrorRequestError)Path)request_aistudio_git_file_info)ThreadPoolExecutor)Retry)tqdm)ModelFileSystemCache)file_integrity_validationheader_fill)log)switch_downoad)post_repo_statistic_asyncmodel_file_downloadfile_downloadmasterFrepo_id	file_pathrevisionlocal_files_only	local_dir	repo_typetokenreturnc           
           [        U UUUUUUS9$ )u   
增加入口
r-   r*   r+   r,   r.   )r%   )r(   r)   r*   r+   r,   r-   r.   s          Z/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/aistudio_sdk/file_download.pyr&   r&   1   s&     )     c           
          [        5         Uc  [        nSU0n [        XU5        [        U UUUUUUS9$ ! [         a#  n[        R
                  " SU 35         SnAN7SnAff = f)
download repo
Npathzrequest.dot.fail: r1   )initr   r$   	Exceptionr"   debug_repo_file_download)	r(   r)   r*   r+   r,   r-   r.   actiones	            r2   r%   r%   H   sz     	F)i F,!'V< )   ,		&qc*++,s   4 
A!AA!c                     [         R                  " SSS9(       d  [         R                  " S[         R                  " S5      S9n U  S3n[         R                  R                  U5      (       aE  [	        US5       nUR                  5       R                  5       [         R                  S'   SSS5        ggg! , (       d  f       g= f)	uv   初始化函数，从本地磁盘加载AI Studio认证令牌。

Args:
    无参数。

Returns:
    无返回值。
AISTUDIO_ACCESS_TOKEN defaultAISTUDIO_CACHE_HOMEHOMEz/.cache/aistudio/.auth/tokenrN)osgetenvr6   existsopenreadstripenviron)
cache_hometoken_file_pathfiles      r2   r7   r7   g   s     99,b9YY4bii>OP
'L(DE77>>/**os+t6:iik6G6G6I

23 ,+ + : ,+s   90B44
Cr1   c                   U(       d  [         nU[        ;  a  [        SU< S[        < 35      e[        XUS9u  pxU(       a7  UR	                  U5      n	U	b  [
        R                  " S5        U	$ [        S5      eSn
U[         :X  d
  U[        :X  am  [        XX65      nSU;  a  [        SU< S	U < 35      eUR                  U5      (       a0  US
   n[
        R                  " SU S35        UR                  U5      $ Un
U
c  [        SU< S	U < 35      eU[         :X  d
  U[        :X  a  U
S   nU
S   nUc  [        SU< S	U < 35      eU R                  S5      u  pUR                  5       nUR                  5       n[         R"                  " S[$        S9nU S['        USS9 S['        USS9 S['        USS9 3nUS:w  a  US['        USS9 3-  nO[        SU 35      e[)        UU
XxUS9$ )r5   zInvalid repo type: z, only support: )r,   r-   Nz>File exists in local cache, but we're not sure it's up to datezCannot find the requested files in the cached path and outgoing traffic has been disabled. To enable look-ups and downloads online, set 'local_files_only' to False.r6   zThe file path: z not exist in: namezFile z8 already in cache with identical hash, skip downloading!sha/STUDIO_GIT_HOSTr@   z/api/v1/repos/r?   )safez/media/r'   z?ref=zInvalid repo type r.   )r   r
   r   $create_temporary_directory_and_cacheget_file_by_pathr"   warn
ValueErrorr	   get_git_infor   rG   r9   get_file_by_infosplitrJ   rE   rF   r   r   download_file)r(   r)   r-   r*   r+   r,   r.   temporary_cache_dircachecached_file_pathfile_to_download_meta	repo_file	file_namefile_sha	user_name	repo_namegit_hosturl_to_downloads                     r2   r:   r:   {   s=    #	)) )+< > ? 	? "F	";
  11)<'HHP $#<= = !O#y4E'E XE	"&!1 2 2<<	""!&)III	{"Z[ )))44 )$&1 2 	2 O#y4E'E(/)&1	!*G!5 6 6&}}S1	OO%	OO%	99.8OP*N,-Q,-W,-/ 	 xuXB'?&@AAO-i[9::*?,5B Br3   model_idc                    U[         :X  a  [        5       nO#U[        :X  a  [        5       nO[	        SU 35      e[        U 5      u  pEUb0  [        R                  R                  U[        5      n[        U5      nOeUn[        U[        5      (       a  [        U5      n[        R                  R                  U[        XE5      nUR                  SS5      n[        XU5      n[        R                  " USS9  Xg4$ )z

temp dir
z7repo_type only support model and dataset, but now is : .___Texist_ok)r   get_model_cache_rootr	   get_dataset_cache_rootrY   model_id_to_group_owner_namerE   r6   joinr   r   
isinstancer   strreplacemakedirs)	ri   r,   r-   default_cache_rootgroup_or_ownerrP   r^   r_   	cache_dirs	            r2   rV   rV      s     O#13	'	'35Ei[Q
 	
 8AN ggll96KL$Y/&	i&&II ggll96K+9A||C'$YEKK#d3%%r3   c                  R    [         R                  R                  [        5       S5      $ )zMGet model cache root path.

Returns:
    str: the aistudio model cache root.
modelsrE   r6   rr   get_aistudio_cache_dir r3   r2   ro   ro      s     77<<.0(;;r3   c                  z    [         R                  R                  [         R                  " S[	        5       5      5      $ )z|Get aistudio cache dir, default location or
   setting with AISTUDIO_CACHE_HOME

Returns:
    str: the aistudio cache root.
rB   )rE   r6   
expanduserrF   get_default_aistudio_cache_dirr~   r3   r2   r}   r}      s0     77
		')G)IJL Lr3   c                      [         R                  R                  [        R                  " 5       R                  SSS5      5      n U $ )z&
default base dir: '~/.cache/aistudio
z.cacheaistudiohub)rE   r6   r   r   homejoinpath)default_cache_dirs    r2   r   r     s9     **499;+?+?*e,% &r3   c                  R    [         R                  R                  [        5       S5      $ )zGet dataset raw file cache root path.
if `AISTUDIO_CACHE_HOME` is set, return `AISTUDIO_CACHE_HOME/datasets`,
else return `~/.cache/aistudio/hub/datasets`

Returns:
    str: the aistudio dataset raw file cache root.
datasetsr|   r~   r3   r2   rp   rp     s     77<<.0*==r3   c                     [         U ;   a3  U R                  [         5      S   nU R                  [         5      S   nX4$ [        nU nX4$ )z

get name
r   r   )r   r\   r   )ri   rx   rP   s      r2   rq   rq     sT     X%!(:;A>~~01!4  0r3   c                     U R                  S5      u  pEUR                  5       nUR                  5       n[        R                  " S[        S9nU(       d  [        R                  " SSS9n[        XdXQX#5      $ )z

get meta
rR   rS   r@   r>   r?   )r\   rJ   rE   rF   r   r   )r(   r)   r*   r.   re   rf   rg   s          r2   rZ   rZ   $  si     #==-I!I!Iyy*4KLH		12>)(y2:C Cr3   c           	         [         R                  R                  X!S   5      n[         R                  " [         R                  R	                  U5      SS9  US-   n [        U5      (       a  Om[         R                  R                  S5      (       a4  [        R                  " SUS    S35        [        R                  " S5        O[        S	US    S35        g
M~   [        US9n[        S-  S-  US   :  a  [        S:  a  [!        U UUS   UUS   US9n	O[#        U UUS   US   UUS9n	U	(       d   [%        U5        g
[         R                  R                  X!S   5      n
[&        U;   a3  U[&           nU	b  X:w  a  [        S5        [)        X5        O[)        X5        UR+                  X5      [%        U5        $ ! [,         a  n[        SU SU 35         S
nAOS
nAff = f [%        U5        g
! [%        U5        f = f)z

download
r6   Trm   z.lockWAIT_UNTIL_DONEz[Download] WAITING 'z' due to active lock.
   z[Download] Skipping 'NrU      sizer   )	file_sizedisable_tqdm)r   headersr   zLMismatched real-time digest found, falling back to lump-sum hash computationz[Download] Error downloading z: )rE   r6   rr   rv   dirnameacquire_pid_lockrK   getr"   rX   timesleepprintr!   r   r   parallel_downloadhttp_get_model_filerelease_pid_lockr   r    put_filer8   )url	file_metar^   r_   r   r.   r)   	lock_pathr   file_digest	temp_fileexpected_hashr<   s                r2   r]   r]   2  s    0F2CDIKK	*T:G#I
I&&zz~~/00/	&0A/BBWXY

2-i.?-@@UVW +$E*2T9D@9D 3a7+#&!#F+)K .#&!#F+)K & 	#% GGLL!46GH		!%i0M&/f .iG))C~~i3 	#  @-i[1#>??@?##s2   AF8 =A/F8 8
GGG- GG- -G:r   rc   r   r   r   c                    [         R                  R                  X5      n[         R                  " [         R                  R	                  U5      SS9  [        SSSUSSU-   S-   SUS9 n[        S-  S-  n/ n	[        SXH5       H,  n
[        X-   S	-
  US	-
  5      nU	R                  XgXXU45        M.     [        n[        US
S9 n[        UR                  [        U	5      5        SSS5        SSS5        [        R                   " 5       n[#        XW	U5        UR%                  5       $ ! , (       d  f       NH= f! , (       d  f       NQ= f)z
large file downlooad
Trm   Br   r   Downloading []unit
unit_scaleunit_divisortotalinitialdescleavedisabler   download)max_workersthread_name_prefixN)rE   r6   rr   rv   r   r   r   rangeminappendr   r   listmapdownload_part_with_retryhashlibsha256merge_parts_to_file	hexdigest)r   r,   rc   r   r   r   r)   progress	PART_SIZEtasksstartend	parallelsexecutorhash_sha256s                  r2   r   r   y  s'    Y2IKK	*T:	 9,s2 	
 
;dBTI	1i3Ee'!+Y];CLL)u37ST 4 0	%#-/2:6>?/%	
0 .."K	e[A  ""/ /%	
 	
s%   (AD6 D%#D6%
D3	/D66
Ec                    [         R                  R                  X5      nUn[         R                  R                  U5      nU(       a_  SU S3n[         R                  R                  X5      n[         R                  R                  U5      (       a  [         R                  " U5        [        US5       nU H  n	U	S   SU	S   < SU	S   < 3-   n
[        U
S5       n UR                  S	[        -  5      nU(       d  O$UR                  U5        UR                  U5        MD  S
S
S
5        [         R                  " U
5        M     S
S
S
5        U(       a  [        R                  " XT5        g
g
! , (       d  f       NO= f! , (       d  f       N>= f)z
merge
rk   z.tmpwbr   _      rb   N)rE   r6   rr   rG   removerH   rI   r   writeupdateshutilmove)r,   rc   r   r   target_path
write_pathuse_temptemp_file_nameoutput_filetaskpart_file_name	part_filechunks                r2   r   r     s.    '',,y4K Jww~~k*HYKt,WW\\)<
77>>*%%IIj! 
j$	;D!!W47DG'DDNnd+y%NN20L+LME %%e,&&u-  , IIn%  
  J,  ,+ 
 	s%   3(E;AE*!"E;*
E84E;;
F	c                 H   U u  pp4pVnUc  0 O[         R                  " U5      n[        [        SS/S9n	USU< SU< 3-   n
  Sn[        R
                  R                  U
5      (       aF  [        U
S5       nUR                  S[        R                  5      nUR                  U5        SSS5        X;-   nX:  a  gS	U< S
U< 3US'   [        U
S5       n[        R                  " XWU5      n[        R                  " USU[         S9nUR"                  (       d;  [$        R&                  " SUR(                   35        [+        SUR,                   35      eUR/                  [0        S9 H7  nU(       d  M  UR3                  U5        UR                  [5        U5      5        M9     SSS5        g! , (       d  f       GN= f! , (       d  f       N!= f! [6         aJ  nU	R9                  SUUS9n	[$        R&                  " SU< SU< S35        U	R;                  5          SnAOSnAff = fGM  )z
download part
Nr   GETr   backoff_factorallowed_methodsr   Tr   r   bytes=-Rangeab+streamr   timeoutzdownload res:zdownload.fail:
chunk_sizeerrorzDownloading: z failed, reason: z will retry)copydeepcopyr   r   rE   r6   rG   rH   seekioSEEK_ENDr   r#   
switch_cdnrequestsr   r   okr"   r9   contentr   status_codeiter_contentr   r   lenr8   	incrementr   )paramsmodel_file_pathr   r   r   r   rc   r   get_headersretryr   partial_lengthfdownload_startrD   r   r<   s                    r2   r   r     s   
 FLBOu37"T]]7-CK+!E %5#'>>N
 	Nww~~"$ $.$/1%&VVAr{{%;NOON3 0 #3N# $4BC#HK ne,$//kJLL'5	7
 ttIIaii[9:&'GHH^^#? , AEu E
3	A -  / 0/ -,"  	OOE3aO8EII+Q0 1KKMM		; sV   2G
 42F'&G
 8G
 BF9//F9G
 '
F61G
 9
GG
 

HA HHc                    [         R                  R                  X5      n[         R                  " [         R                  R	                  U5      SS9  Uc  0 O[
        R                  " U5      n[        [        R                  " 5       R                  5      US'   [         R                  R                  X5      n[         R                  " [         R                  R	                  U5      SS9  [        R                  " SU  SU 35        Sn	[        R                  " 5       n
[        [         SS	/S
9n  [#        SSSUS:  a  UOSSSU-   S-   SUS9 nUS:X  a1  [%        US5         UR'                  S5        SSS5         SSS5        GOUSn[         R                  R)                  U5      (       aH  Sn	[%        US5       nUR+                  S[,        R.                  5      nUR'                  U5        SSS5        X:  a
   SSS5        OSU< SUS-
  < 3US'   [%        US5       n[0        R2                  " XU5      n [4        R6                  " U SU[8        S9nUR;                  5         UR=                  [>        S9 HQ  nU(       d  M  UR'                  [A        U5      5        URC                  U5        U	(       a  M@  U
R'                  U5        MS     SSS5        SSS5         U	(       a  S$ U
RK                  5       $ ! , (       d  f       GN= f! , (       d  f       GN!= f! , (       d  f       NT= f! , (       d  f       N]= f! [D         a-  nSn	URG                  S	U US9nURI                  5          SnAOSnAff = fGMH  )a  Download remote file, will retry 5 times before giving up on errors.

Args:
    url(str):
        actual download url of the file
    local_dir(str):
        local directory where the downloaded file stores
    file_name(str):
        name of the file stored in `local_dir`
    file_size(int):
        The file size.
    cookies(CookieJar):
        cookies used to authentication the user, which is used for downloading private repos
    headers(Dict[str, str], optional):
        http headers to carry necessary info when requesting the remote file
    disable_tqdm(bool, optional): Disable the progress bar with tqdm.

Raises:
    FileDownloadError: File download failed.

Trm   NzX-Request-IDzdownloading z to Fr   r   r   r   r   r   r   r   r   zw+r   r   r   r   r   r   r   r   )&rE   r6   rr   rv   r   r   r   rt   uuiduuid4hexr"   r9   r   r   r   r   r   rH   r   rG   r   r   r   r#   r   r   r   r   raise_for_statusr   r   r   r   r8   r   r   r   )r   r,   rc   r   r   r   r)   r   temp_file_path	has_retryr   r   r   r   r   rD   r   r<   s                     r2   r   r     s   : Y2IKK	*T:"T]]7-CK"%djjl&6&6"7KWW\\)7NKK/$?IISEn%567I.."K+!E 4	#!%'01})!(94s:(	 >nd3 * 4	 	  "#77>>.11 $Ind3q)*2;;)? 7 4
 ".7	 	4 / 9G8AA(GG$.%0A(33C+NC # + 9	;A
 &&(!"'C "0 "E 5$OOCJ7GGEN#,9 + 2 25 9"E 1?	^  49+"7"7"99S 43 43 10?	 	`  	IOOE3aO8EKKMM	e s   .L8 L'K21	L':L8 4L'82L*L'8L8 L'AL?0L3LL'L8 2
L	<L'
L	L'
L$	 L''
L51L8 8
M/#M**M/pidc                      [         R                  " U 5      nUR                  5       [         R                  :g  $ ! [         R                   a     gf = f)u-   判断进程是否存在且不是僵尸进程F)psutilProcessstatusSTATUS_ZOMBIENoSuchProcess)r  ps     r2   is_process_aliver  ]  sD    NN3xxzV1111 s   69 AAr   c                 >   [        [        R                  " 5       5      n [        R                  " U [        R                  [        R
                  -  [        R                  -  5      n[        R                  " US5       nUR                  U5        SSS5        g! , (       d  f       g= f! [         a     [        U S5       n[        UR                  5       R                  5       5      nSSS5        O! , (       d  f       O= f[        W5      (       a  [        SU 35         g[        SU S35        [        R                  " U 5        [!        U 5      s $ ! ["         a  n[        S	U 35         SnA gSnAff = f["         a  n[        S
U 35         SnAgSnAff = f)z/Use atomic file creation to acquire a PID lock.wNTrD   z[Lock] File is locked by PID Fz[Lock] Stale lock from PID z, removing.z+[Lock] Error checking/removing stale lock: z [Lock] Cannot create lock file: )rt   rE   getpidrH   O_CREATO_EXCLO_WRONLYfdopenr   FileExistsErrorintrI   rJ   r  r   r   r   r8   )r   r  fdr   existing_pidr<   s         r2   r   r   g  s6   
biik
CWWY

RYY 6 DEYYr31GGCL     	i%"1668>>#34 &%%--5l^DE3L>MN		)$'	22 	?sCD	  045s~   AB* >BB* 
B'#B* 'B* *
F5E(C2)	E2
D 	<%E#/EF
E8E3-F3E88FFFc                     [         R                  R                  U 5      (       a  [        U S5       n[	        UR                  5       R                  5       5      nSSS5        W[         R                  " 5       :X  a0  [         R                  " U 5        [        R                  " SU  35        ggg! , (       d  f       NY= f! [         a  n[        SU 35         SnAgSnAff = f)z<Release the lock if it is still held by the current process.rD   Nz[Lock] Released lock z[Lock] Error releasing lock: )rE   r6   rG   rH   r  rI   rJ   r  r   r"   r9   r8   r   )r   r   r  r<   s       r2   r   r     s    377>>)$$i%!&&(..*+ &biik!		)$		1)=> " %%%
  3-aS1223s/   0B> (B-AB> -
B;7B> >
C CC )r'   FNmodelN)FN)NNF)NF)P__doc__r  r   r   r   errnor   r   r   r   urllib.parser   typingr   r   r   rE   configr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   errorsr   r   r   pathlibr   aistudio_sdk.requests.hubr   concurrent.futuresr   requests.adaptersr   	tqdm.autor   utils.cachingr   
utils.utilr    r!   aistudio_sdkr"   r#   aistudio_sdk.dotr$   __all__rt   boolr&   r%   r7   r:   rV   ro   r}   r   rp   rq   rZ   r]   r  r   r   r   r   r  r   r   r~   r3   r2   <module>r-     sL     	        ( ( 	` ` ` ` ` B A  D 1 #  / >  ' 6  '',#& sm tn	
 } }  c]4 '',#& sm tn	
 } }  c]>J0 &',#PBPBPB 	PB
 smPB tnPB }PB PB c]PBh ;?:I&3 &47&47&B<c <L L> >
 C& 
D$T ;?'++0%#3 %#!$%#!$%#  (S#X7%# "%	%#
 %)%#R -H.l )-c:	c:c: c: 	c:
 d38n%c: c:L# $  6
3 
3r3   