
    5pj-                       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	  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  \" S5      r\	R,                  \	R.                  \	R0                  \	R2                  /rSSS jjr   S       SS jjrSSSS.             SS jjr            SS jrSS jrSS jr SS jr!g)zCache management utilities.

Provides scanning and cleanup of the local blob/snapshot cache produced
by :class:`~._download.DownloadManager`.
    )annotationsN)Path   )get_default_config)RepoType)
CacheError)CachedRepoInfo	CacheInfoCacheVerificationVerificationMismatch)compute_hash)
get_loggercachec                   [        5       nU (       a  [        U 5      OUR                  nUR                  5       (       d  [	        / S[        U5      S9$ / nSn[         GHn  nU S3nX&-  nUR                  5       (       d  M$  UR                  5        GH5  nUR                  5       (       d  M  [        U5      n	XI-  n[        S UR                  S5       5       5      n
US-  nSnUR                  5       (       ah  UR                  5        Vs/ s H%  oR                  5       (       d  M  UR                  PM'     nn[        U5      S:X  a  US   OS	R                  USS
 5      n UR                  5       R                  nUR                  R#                  SS5      nUR%                  ['        UUUU	U
US:  a  UOS[        U5      S95        GM8     GMq     U Vs1 s H  nUR(                  iM     nnSU4SUS-  44 GH  u  nnUR                  5       (       d  M  UR                  5        H  nUR                  5       (       d  M  UR                  S;   a  M,  UR                  5        H  nUR                  5       (       d  M  [        U5      U;   a  M+  [        U5      n	XI-  n[        S UR                  S5       5       5      n
UR                   SUR                   3nUR%                  ['        U[*        R,                  SU	U
S[        U5      S95        M     M     GM      [	        UU[        U5      S9$ s  snf ! [          a    Sn GNf = fs  snf )a  Scan the local cache and return metadata about cached repositories.

Parameters
----------
cache_dir:
    Override for the cache directory. Defaults to the SDK config default.

Returns
-------
CacheInfo
    Summary of all cached repositories, total size, etc.
r   )repos
total_size	cache_dirsc              3  R   #    U  H  oR                  5       (       d  M  S v   M     g7fr   Nis_file).0_s     Y/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/modelscope_hub/_cache_manager.py	<genexpr>scan_cache.<locals>.<genexpr>>   s     I&9YY[11&9   '	'*	snapshotsNr   ,   --/)repo_id	repo_typerevisionsize_on_disknb_fileslast_accessed
local_path hub)r-   modelsdatasetsstudiosmcpsskillsc              3  R   #    U  H  oR                  5       (       d  M  S v   M     g7fr   r   )r   fs     r   r   r   q   s     M*=Qqq*=r   )r   r   r   is_dirr
   str_DEFAULT_SCAN_TYPESiterdir	_dir_sizesumrglobnamelenjoinstatst_atimeOSErrorreplaceappendr	   r+   r   MODEL)r   configrootr   r   r&   segmenttype_dirrepo_dirsizer)   snapshots_dirr'   d	revisionslast_accessed_tsr%   r_scanned_pathsprefixprefix_path	owner_dirname_dirs                          r   
scan_cacherU      s     !F'4	?V-=-=D;;==ra3t9EE"$EJ((	Kq/>   ((*H??$$ X&DJ IhnnS&9IIH %{2MH##%%-:-B-B-DS-D
VQVV-D	S+.y>Q+>9Q<CHHYWYXY]D[%#+==?#;#; 
 mm++D#6GLL#'%!%%6F6J"2PT"8}
7 + )^ -22EqallEN2!#T
UD5L,AB!!##$,,.I##%%~~![[%--/((x=N2 *"
M(..*=MM&^^,Ahmm_=" '"*..!%%)!)&*#&x=
 0 /  C@ d) y T  %#$ %( 3s$   	L,%L, L1M1M Mc                   [        5       nU (       a  [        U 5      OUR                  nU(       a  U(       d  [        S5      eUR	                  5       (       d  [
        R                  SU5        gSnU(       aN  U(       aG  [        XBU5      nU H3  n[        U5      nXX-  n[        U5        [
        R                  SXx5        M5     U$ U(       a  UR                  S5      (       d  U S3OUn	XI-  n
U
R	                  5       (       a0  [        U
5      nXX-  n[        U
5        [
        R                  SX5        US-  nUR	                  5       (       a0  [        U5      nXX-  n[        U5        [
        R                  SU5        U$ [         H<  nU S3n	XI-  n
U
R	                  5       (       d  M#  U[        U
5      -  n[        U
5        M>     US-  nUR	                  5       (       a  U[        U5      -  n[        U5        [
        R                  S	U5        U$ )
a  Remove cached data from disk.

Parameters
----------
cache_dir:
    Override for the cache directory. Defaults to the SDK config default.
repo_type:
    If given, only clear caches of this repo type.
repo_id:
    If given, only clear the cache for this specific repository.
    Must be used with ``repo_type``.

Returns
-------
int
    Number of bytes freed.

Raises
------
CacheError
    On filesystem errors.
z/repo_type is required when repo_id is specifiedz"Cache directory does not exist: %sr   zCleared cache at %s (%d bytes)r   z$Cleared %s standard cache (%d bytes)r-   z#Cleared legacy hub cache (%d bytes)zCleared all caches (%d bytes))r   r   r   r   r5   loggerinfo_resolve_cache_targetsr9   _safe_rmtreeendswithr7   )r   r&   r%   rE   rF   freedtargetstargetrJ   rG   rH   hub_dirrepo_ts                r   clear_cachera      s   6  !F'4	?V-=-=D yJKK;;==8$?E9(	BFV$DME KK8&G	 H L? 
)2););C)@)@YKq/i>??X&DME"KK>	P,>>W%DME!KK=tD  L *FlG~H  8,,X& * ,>>Yw''E!3U;L    r'   r   	local_dirc                   [        U UUUUS9u  pgUR                  S5       VV	s0 s H_  nUR                  U5      n	UR                  5       (       d  M+  [	        S U	R
                   5       5      (       a  MN  U	R                  5       U_Ma     n
nn	[        U5      n[        U
5      n/ n/ nSn[        X-  5       H  nUU   nU(       d  UR                  U5        M"  US-  n[        U
U   S5      nUR                  5       UR                  5       :w  d  MZ  UR                  [        UUR                  5       UR                  5       5      5        M     [        U[        U5      UU[        X-
  5      [        X-
  5      US9$ s  sn	nf )zHCompare a cached snapshot or local directory with remote SHA-256 values.rc   r   c              3  B   #    U  H  oR                  S 5      v   M     g7f).N)
startswith)r   parts     r   r   verify_cache.<locals>.<genexpr>   s     %V~tooc&:&:~s   r   r   sha256)r'   verified_pathchecked_count
mismatchesmissing_pathsextra_pathsunverified_paths)_resolve_verification_rootr;   relative_tor   anypartsas_posixsetsortedrC   r   lowerr   r   r6   )r%   r&   expected_by_pathr'   r   rd   rF   resolved_revisionpathrelativelocal_by_pathremote_pathslocal_pathsrn   
unverifiedcheckedrel_pathexpectedactuals                      r   verify_cacher      sv    9D JJsO#D))$/H<<> 	 #&%Vx~~%V"V 	T!#   '(Lm$K-/JJG<56#H-h'1mH5x@<<>X^^--28X^^=Mv||~^_ 7 "$i\78;56# -s   *E:E:5E:c               l   UbV  [        U5      R                  5       R                  5       nUR                  5       (       d  [	        SU 35      eXR=(       d    S4$ [        U=(       d    [        5       R                  5      R                  5       R                  5       nUR                  S5      (       d  U S3OUnXg-  U R                  SS5      -  nUS-  n	U	R                  5       (       d  [	        SU 35      eU(       a-  X-  n
U
R                  5       (       d  [	        SU S	U
 35      eX4$ S
 H!  nX-  nUR                  5       (       d  M  X4s  $    [        S U	R                  5        5       5      nU(       d  [	        SU	 35      e[        U5      S:X  a  US   US   R                  4$ [	        S5      e)Nz Local directory does not exist: masterr   r$   r#   r    z$Repository is not present in cache: z
Revision 'z' is not present in cache: )r   mainc              3  R   #    U  H  oR                  5       (       d  M  Uv   M     g 7fN)r5   )r   r|   s     r   r   -_resolve_verification_root.<locals>.<genexpr>.  s     N)<)<r   zNo cached revisions found in: r   r   z8Cached revision is ambiguous; pass --revision explicitly)r   
expanduserresolver5   r   r   r   r[   rB   rx   r8   r=   r<   )r%   r&   r'   r   rd   rF   
cache_rootrG   	repo_rootr    snapshotdefault_namedefault_snapshot
candidatess                 r   rr   rr     s    I))+335{{}}?vFGG)))iA#5#7#A#ABMMOWWYJ%.%7%7%<%<1o)G$wsD'AAIK'I?	{KLL'  z(3NxjYZZ!!*$3""$$#11 + N):):)<NNJ9)EFF
:!!}jm0000
O
PPrb   c                    UR                  SS5      nUR                  S5      (       d  U S3OUnX-  U-  X-  U S-  U-  /nU Vs/ s H  ofR                  5       (       d  M  UPM     sn$ s  snf )zResolve all possible cache locations for a repo across layout formats.

Checks three path layouts:
- Standard:  {root}/{type}s/{owner}--{name}/
- Flat:      {root}/{owner}/{name}/
- Legacy:    {root}/hub/{owner}/{name}/
r$   r#   r   r-   )rB   r[   r5   )rF   r%   r&   safe_idrG   r   ps          r   rY   rY   6  su     ooc4(G%.%7%7%<%<1o)G 	 uwJ
 "0z!XXZAz000s   A+"A+c                    Sn U R                  S5       H7  nUR                  5       (       d  M   XR                  5       R                  -  nM9     U$ ! [         a     MJ  f = f! [         a     U$ f = f)z;Compute total size of all files under ``path`` recursively.r   r   )r;   r   r?   st_sizerA   )r|   totalr4   s      r   r9   r9   I  ss    ECAyy{{VVX---E ! L	   Ls4   'A# AA# 
A A# A  A# #
A10A1c                z     [         R                  " U 5        g! [         a  n[        SU  SU 35      UeSnAff = f)z7Remove a directory tree, raising CacheError on failure.zFailed to remove z: N)shutilrmtreerA   r   )r|   excs     r   rZ   rZ   X  sA    Ed E,TF"SE:;DEs    
:5:r   )r   Path | Nonereturnr
   )NNN)r   r   r&   
str | Noner%   r   r   int)r%   r6   r&   r6   rz   zdict[str, str | None]r'   r   r   str | Path | Nonerd   r   r   r   )r%   r6   r&   r6   r'   r   r   r   rd   r   r   ztuple[Path, str])rF   r   r%   r6   r&   r6   r   z
list[Path])r|   r   r   r   )r|   r   r   None)"__doc__
__future__r   r   pathlibr   rE   r   	constantsr   errorsr   typesr	   r
   r   r   utils.file_utilsr   utils.loggerr   rW   rD   DATASETSTUDIOMCPr7   rU   ra   r   rr   rY   r9   rZ    rb   r   <module>r      s@   #   &   U U * $	G	  ~~x'7'7(,,W k^ " PPP P 		Pp  #'#'/// ,/
 / !/ !/ /j$Q$Q$Q 	$Q
 !$Q !$Q $QN1&Erb   