
    6pj1                     Z   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	J
r
  SSKJr  SSKJrJrJrJr  SSK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JrJrJ r   SSK!J"r"  SSK#J$r$J%r%  SSK&J'r'  SSK(J)r)J*r*  \"" 5       r+S r, S+SSSSSSSS.S\-S\-S\-S\-S\-S\.S\-S\-S\/S\-4S jjjrSSSSSSSSS.S\-S\-S\-S\-S\-S\.S\-S\-S\/S\-4S  jjr S+S\-S\-S\-S\\-   4S! jjr0   S,S"\-S\-S#\-S$\1S\S%\\\-\-4      S&\/S'\\\$      4S( jjr2 S+S"\-S\-S#\-S\S%\\\-\-4      4
S) jjr3/ S*Qr4g)-u?  File download — delegates to modelscope_hub for Hub downloads, retains http_get_file for direct HTTP.

Hub file downloads (model_file_download, dataset_file_download) are delegated
to modelscope_hub.compat. Direct HTTP file downloads (http_get_file,
http_get_model_file) are retained as they serve non-Hub use cases.
    N)partial)	CookieJar)DictListOptionalType)dataset_file_download)model_file_download)Retry)tqdm)API_FILE_DOWNLOAD_CHUNK_SIZEAPI_FILE_DOWNLOAD_RETRY_TIMESAPI_FILE_DOWNLOAD_TIMEOUTMODELSCOPE_SDK_DEBUG)
get_logger   )ProgressCallbackTqdmCallback)FileDownloadError)find_reusable_legacy_repo_dirget_endpointc                     [         R                  R                  [        5      (       a  g SSKJn   [        U SS5      nU(       d  g[        [        R                  " [        R                  " US5      5      5      $ ! [         a     gf = f)zrCompute the release timestamp for revision resolution.

Returns None (dev-mode) when MODELSCOPE_SDK_DEBUG is set.
Nr   )version__release_datetime__z%Y-%m-%d %H:%M:%S)osenvirongetr   
modelscoper   getattrinttimemktimestrptime	Exception)r   dts     X/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/modelscope/hub/file_download.py_get_release_timestampr'   (   sj    
 
zz~~*++&W4d;4;;t}}R1DEFGG s   A: 3A: :
BBF)	cache_dir	local_dircookiestokenendpointlocal_files_only
user_agentmodel_id	file_pathrevisionr(   r)   r*   r+   r,   r-   returnc                    Uc:   SSK Jn
  U
" 5       n[        5       nUR                  U SUS9nUR	                  S5      nUc  [        U SUS9n[        U UUUUUUUUU	S9
$ ! [
         a     N,f = f)	zCDownload a single model file with release-mode revision resolution.Nr   )HubApi)r1   release_timestampRevisionmodel	repo_typer(   )r1   r(   r)   r*   r+   r,   r-   r.   )modelscope.hub.apir4   r'   get_valid_revision_detailr   r$   r   _compat_model_file_download)r/   r0   r1   r(   r)   r*   r+   r,   r-   r.   r4   api
release_tsdetails                 r&   r
   r
   9   s     	1(C/1J224: 3 GFzz*-H 19>	&)   		s   9A 
A+*A+r(   r)   r1   r*   r+   r,   r-   r.   
dataset_idc                B    Uc  [        U SUS9n[        U UUUUUUUUU	S9
$ )zLDownload a single dataset file, reusing flat/hub legacy caches when present.datasetr8   r@   )r   _compat_dataset_file_download)
rA   r0   r(   r)   r1   r*   r+   r,   r-   r.   s
             r&   r	   r	   b   sG     1)yB	()     c                     [         R                  R                  U5      n[         R                  R                  U5      nSnU(       d
  [        5       nUR	                  UU UUS9$ )a  Format file download url according to `model_id`, `revision` and `file_path`.
e.g., Given `model_id=john/bert`, `revision=master`, `file_path=README.md`,
the resulted download url is: https://modelscope.cn/api/v1/models/john/bert/repo?Revision=master&FilePath=README.md

Args:
    model_id (str): The model_id.
    file_path (str): File path
    revision (str): File revision.
    endpoint (str): The remote endpoint

Returns:
    str: The file url.
zQ{endpoint}/api/v1/models/{model_id}/repo?Revision={revision}&FilePath={file_path})r,   r/   r1   r0   )urllibparse
quote_plusr   format)r/   r0   r1   r,   download_url_templates        r&   get_file_download_urlrL      s`    " ''	2I||&&x0Ho> ''	 (  rE   url	file_name	file_sizeheadersdisable_tqdmprogress_callbacksc           	      ~   Uc  / OUR                  5       nU(       d  UR                  [        5        U Vs/ s H
  o" X#5      PM     nn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X
5        Sn[        R                   " 5       n[#        [$        SS/S	9n  US
:X  a1  ['        U
S5         U H  nUR)                  S5        M     SSS5        GO@S
n[        R                  R+                  U
5      (       aQ  Sn['        U
S5       nUR-                  S
[.        R0                  5      nU H  nUR)                  U5        M     SSS5        X:  a  OSU< SUS-
  < 3U	S'   ['        U
S5       n[2        R4                  " U SU	U[6        S9nUR9                  5         UR;                  [<        S9 HZ  nU(       d  M  U H  nUR)                  [?        U5      5        M     URA                  U5        U(       a  MI  UR)                  U5        M\     SSS5         U H  nURI                  5         M     U(       a  S$ URK                  5       $ s  snf ! , (       d  f       GN= f! , (       d  f       GN!= f! , (       d  f       Nj= f! [B         a-  nSnURE                  SU US9nURG                  5          SnAOSnAff = fGM!  )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.
    progress_callbacks(List[Type[ProgressCallback]], optional):
        progress callbacks to track the download progress.

Raises:
    FileDownloadError: File download failed.

NX-Request-IDT)exist_okdownloading %s to %sFr   GETtotalbackoff_factorallowed_methodsr   zw+rbzbytes=-Rangezab+streamrP   r*   timeout
chunk_sizeerror)&copyappendr   deepcopystruuiduuid4hexr   pathjoinmakedirsdirnameloggerdebughashlibsha256r   r   openupdateexistsseekioSEEK_ENDrequestsr   r   raise_for_statusiter_contentr   lenwriter$   	incrementsleepend	hexdigest)rM   r)   rN   rO   r*   rP   rQ   rR   callbackget_headerstemp_file_path	has_retryhash_sha256retrypartial_lengthfrchunkes                      r&   http_get_model_filer      s   B  29?Q?V?V @!!,/7I7I8&7I    "T]]7-CK"%djjl&6&6"7KWW\\)7NKK/$?
LL'=I.."K+!E
 -	A~.$/$6 * %7 0 Nww~~n-- 	.$/1%&VVAr{{%;N$6 7 %7 0 * + 5C4=M$CK ne,LL'#57 ""$^^#? , AEu(:H$OOCJ7 );(y'..u5A -" 
 ' ' 49+"7"7"99E( 0/ 0/ -,$  	IOOE3aO8EKKMM	W s~   KL 1KL 4L 
;KL L /AK1;9K18K1L 
KL 
K.)L 1
K?;L 
L9#L44L9c           
      L   Sn[        [        R                  SUSS9nUc  0 O[        R                  " U5      n[        [        R                  " 5       R                  5      US'   U" 5        n[        R                  SXR                  5        [        [        SS	/S
9n	  UR                  5       n
SU
-  US'   [        R                   " U SUU["        S9nUR%                  5         UR&                  R!                  S5      nUb  [)        U5      OSn[+        SSSUU
SU-   S-   S9nUR-                  [.        S9 H7  nU(       d  M  UR1                  [3        U5      5        UR5                  U5        M9     UR7                  5          SSS5        [        R                  SX5        [>        R@                  RC                  WR                  5      nUU:w  aO  [>        RD                  " UR                  5        SU< SU< SU< S3n[        RG                  U5        [I        U5      e[>        RJ                  " UR                  [>        R@                  RM                  X5      5        g! [8         a*  nU	R;                  S	XS9n	U	R=                  5          SnAOSnAff = fGM  ! , (       d  f       GN= f)a2  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`
    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

Raises:
    FileDownloadError: File download failed.

wbF)modedirdeleteNrT   rV   r   rW   rX   Tz	bytes=%d-r^   r_   zContent-LengthBi   zDownloading [])unit
unit_scaleunit_divisorrY   initialdescrb   rd   zstoring %s in cache at %szFile z& download incomplete, content_length: z5 but the                     file downloaded length: z, please download again)'r   tempfileNamedTemporaryFilerf   rh   ri   rj   rk   rl   rq   rr   namer   r   tellr{   r   r   r|   rP   r    r   r}   r   rv   r~   r   closer$   r   r   r   rm   getsizeremovere   r   replacern   )rM   r)   rN   r*   rP   rY   temp_file_managerr   	temp_filer   downloaded_sizer   content_lengthprogressr   r   downloaded_lengthmsgs                     r&   http_get_filer     sD   2 E##$IeM"T]]7-CK"%djjl&6&6"7K			+S..A/"G% "+.."2'2_'DG$LL'#57 ""$!"/?!@'5'A "$GK #!%+(94s: ^^#? , AEu E
3!.	A
  G 
P LL,c=	7!!
		)..! u/1 	S$$JJy~~rww||IAB  s<;  
	s=   *2JBI??I>J
J$ J	J	JJ
J#)r
   r	   r   r   rL   )N)NFN)5__doc__rf   rs   ry   r   r   r!   rG   rj   	functoolsr   http.cookiejarr   typingr   r   r   r   r{   #modelscope_hub.compat.file_downloadr	   rD   r
   r<   requests.adaptersr   	tqdm.autor   modelscope.hub.constantsr   r   r   r   modelscope.utils.loggerr   r   r   r   errorsr   utils.utilsr   r   rq   r'   ri   dictboolrL   r    r   r   __all__ rE   r&   <module>r      su     	 	      $ - - ;7 # < < / 4 % D	( &
 "&&& &
 & & & & & & 	&Z " 	
       	J 59C %($' %-SMH )-7;g:	g:g: g: 	g:
 g: d38n%g: g: T"234g:^ )-OC	OCOC OC 	OC
 d38n%OCdrE   