
    qiP                        d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 ddl
mZ ddlmZ dd	lmZmZ erdd
lmZ  e j&                  d      Z G d de	      Zed   Z ed       G d d             Zdedeeef   fdZdedee   defdZdededefdZdeedf   deeef   dededef
d Zd!ed"edee   d#ee   d$ee   deeef   fd%Zy)&    N)	dataclass)Path)TYPE_CHECKINGLiteralOptional	TypedDict   )	constants)repo_folder_name   )git_hashsha_fileobj)RepoFilez^[0-9a-f]{40}$c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)Mismatchpathexpectedactual	algorithmN)__name__
__module____qualname__str__annotations__     U/opt/pipecat/venv/lib/python3.12/site-packages/huggingface_hub/utils/_verification.pyr   r      s    
IMKNr   r   )sha256git-sha1T)frozenc                   \    e Zd ZU eed<   eed<   ee   ed<   ee   ed<   ee   ed<   eed<   y)FolderVerificationrevisionchecked_count
mismatchesmissing_pathsextra_pathsverified_pathN)	r   r   r   r   r   intlistr   r   r   r   r   r"   r"      s1    MX9cr   r"   rootreturnc                     | j                  d      D ci c]3  }|j                         s|j                  |       j                         |5 c}S c c}w )z]
    Return a mapping of repo-relative path -> absolute path for all files under `root`.
    *)rglobis_filerelative_toas_posix)r+   ps     r   collect_local_filesr4   '   s?     8<zz#V!!))+AMM$((*A-VVVs
   A"Astorage_folderr#   c                 x   |rt         j                  |      r|S | dz  }| dz  }|rG||z  }|j                         r |j                  d      j	                         S t        d| d| d      |dz  }|j                         r |j                  d      j	                         S |j                         st        d	| d
      |j                         D cg c]?  }|j                         st         j                  |j                        s4|j                  A }}t        |      dk(  r|d   S t        d      c c}w )zR
    Resolve a commit hash from a cache repo folder and an optional revision.
    refs	snapshotszutf-8)encodingz
Revision 'z1' could not be resolved in cache (expected file 'z').mainz+Cache repo is missing snapshots directory: z . Provide --revision explicitly.r   r   zhAmbiguous cached revision: multiple snapshots found and no refs to disambiguate. Please pass --revision.)
_REGEX_COMMIT_HASH	fullmatchr0   	read_textstrip
ValueErroris_diriterdirnamelen)r5   r#   refs_dirsnapshots_dirref_pathmain_refr3   
candidatess           r   _resolve_commit_hash_from_cacherI   .   sB    &00:&H"[0Mh&%%w%7==??:hZ/`ai`jjmnoo & H!!7!399;;!F}oUuvww"/"7"7"9qQQXXZL^LhLhijioioLp!&&qJq
:!!}
r 	 rs   D7)D7	D7r   r   c                     | j                  d      5 }|dk(  r"t        |      j                         cddd       S |dk(  r"t        |j	                               cddd       S t        d|       # 1 sw Y   yxY w)zM
    Compute the checksum of a local file using the requested algorithm.
    rbr   Nr   zUnsupported hash algorithm: )openr   hexr   readr?   )r   r   streams      r   compute_file_hashrP   O   s    
 
4 EF v&**,E E 
"FKKM*	E E
 7	{CDDE Es   A/A/!A//A8remote_by_pathr   local_by_pathr(   c           	      H   t        |       }t        |      }t        ||z
        }t        ||z
        }t        ||z        }g }	|D ]  }
| |
   }||
   }t        |dd      }|t        |dd      nd}|!t        |t              r|j                  d      }|rd}t        |      j                         }n'|j                  }d}t        |      j                         }t        ||      }||k7  s|	j                  t        |
|||              t        |t        |      |	|||      S )zHCompare remote entries and local files and return a verification result.lfsNr   r   )r   r   r   r   )r#   r$   r%   r&   r'   r(   )setsortedgetattr
isinstancedictgetr   lowerblob_idrP   appendr   r"   rC   )rQ   rR   r#   r(   remote_pathslocal_pathsmissingextrabothr%   rel_pathremote_entry
local_pathrT   lfs_shar   r   r\   r   s                      r   verify_mapsrg   \   s=    ~&Lm$K\K/0G;-.E,,-D!#J n%h/"8,
lE4025/'#x.t?z#t4ggh'G"*I7|))+H"**G"I7|))+H":y9XhHxPVbklm'n* $i# r   repo_id	repo_type	cache_dir	local_dirc                     |[t        |      j                         j                         }|j                         st	        d|       ||xs t
        j                  fS t        |xs t
        j                        j                         j                         }|t        | |      z  }|j                         st	        d| d      t        ||      }|dz  |z  }	|	j                         st	        d| d|	 d      |	|fS )	zW
    Resolve the root directory to scan locally and the remote revision to verify.
    z6Local directory does not exist or is not a directory: )rh   ri   zRepo is not present in cache: z.. Use 'hf download' first or pass --local-dir.r8   z0Snapshot directory does not exist for revision 'z': .)r   
expanduserresolver@   r?   r
   DEFAULT_REVISIONHF_HUB_CACHEr   existsrI   )
rh   ri   r#   rj   rk   r+   
cache_rootr5   commitsnapshot_dirs
             r   resolve_local_rootrv      s    I))+335{{}UVZU[\]]h<)"<"<==i99#9#9:EEGOOQJ"27i"XXN  ",^,<<jk
 	
 -^XFF!K/&8L KF8SVWcVddefggr   ) redataclassesr   pathlibr   typingr   r   r   r    r
   file_downloadr   shar   r   hf_apir   compiler;   r   HashAlgor"   rY   r   r4   rI   rP   rg   tuplerv   r   r   r   <module>r      sg   	 !  > >  , & !  RZZ 12 y  '( $  Wd WtCI WD HSM VY B
ED 
EX 
E# 
E-j)- T	?- 	-
 - -`     sm	 
 ~  ~  49 r   