Ë
    ÂÓ^jØ  ã                   óZ  — U d Z ddlZddlZddlZddlZddlmZ ddlmZ  ej                  e
«      ZdZi Zeedf   ed<    ej"                  «       Z ed¬	«       G d
„ d«      «       Zdededefd„Zdedefd„Zdededeeef   dz  fd„Zdedeeef   dz  fd„Zdededeeef   ddfd„Zy)a5  On-disk cache for repository tree listings.

A tree listing is the set of files (with their download metadata) contained in a repo at a given commit. Because a
commit hash is immutable, its tree listing never changes and can be cached forever without any invalidation logic.

The listing is stored as a human-readable JSON file under `<tree_cache_folder>/trees/<commit_hash>.json`. The
folder depends on the download target: the per-repo `storage_folder` for `cache_dir` downloads, or
`local_dir/.cache/huggingface/` for `local_dir` downloads (see `tree_cache_folder_for_local_dir`).

```json
{
  "format_version": 1,
  "files": {
    "config.json": {"size": 519, "blob_id": "<git sha1>"},
    "model.safetensors": {"size": 1234, "blob_id": "...", "lfs_sha256": "<sha256>", "lfs_size": 1234, "xet_hash": "..."}
  }
}
```
é    N)Ú	dataclassé   )Úloggingzdict[str, TreeCacheEntry]Ú_IN_MEMORY_TREE_CACHET)Úfrozenc                   óˆ   — e Zd ZU dZeed<   eed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   de
fd	„Zed
e
dd fd„«       Zy)ÚTreeCacheEntryz^Raw metadata of a single file in a cached tree listing, mirroring the `/tree` endpoint fields.ÚsizeÚblob_idNÚ
lfs_sha256Úlfs_sizeÚxet_hashÚreturnc                 óÂ   — | j                   | j                  dœ}| j                  �| j                  |d<   | j                  |d<   | j                  �| j                  |d<   |S )N)r
   r   r   r   r   ©r
   r   r   r   r   )ÚselfÚinfos     úf/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/huggingface_hub/_tree_cache.pyÚto_jsonzTreeCacheEntry.to_json>   sW   € Ø"Ÿi™i°D·L±LÑAˆØ�?‰?Ð&Ø!%§¡ˆD�ÑØ#Ÿ}™}ˆD�ÑØ�=‰=Ð$Ø#Ÿ}™}ˆD�ÑØˆó    r   c           	      ó‚   —  | |d   |d   |j                  d«      |j                  d«      |j                  d«      ¬«      S )Nr
   r   r   r   r   r   )Úget)Úclsr   s     r   Ú	from_jsonzTreeCacheEntry.from_jsonG   sA   € áØ�f‘Ø˜‘OØ—x‘x Ó-Ø—X‘X˜jÓ)Ø—X‘X˜jÓ)ô
ð 	
r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__Ústrr   r   r   Údictr   Úclassmethodr   © r   r   r	   r	   4   sh   … áhà
ƒIØƒLØ!€J��d‘
Ó!Ø€Hˆc�D‰jÓØ€Hˆc�D‰jÓð˜ó ð ð
˜Tð 
Ð&6ò 
ó ñ
r   r	   Útree_cache_folderÚcommit_hashr   c                 óJ   — t         j                  j                  | d|› d�«      S )NÚtreesz.json©ÚosÚpathÚjoin)r%   r&   s     r   Ú_tree_cache_pathr-   R   s!   € Ü�7‰7�<‰<Ð)¨7°{°mÀ5Ð4IÓJÐJr   Ú	local_dirc                 óD   — t         j                  j                  | dd«      S )zGFolder under which the `trees/` cache lives for a `local_dir` download.z.cacheÚhuggingfacer)   )r.   s    r   Útree_cache_folder_for_local_dirr1   V   s   € ä�7‰7�<‰<˜	 8¨]Ó;Ð;r   c                 óò   — t        | |«      }t        5  |t        v rt        |   cddd«       S 	 ddd«       t        |«      }|�t        5  |t        |<   ddd«       |S |S # 1 sw Y   Œ2xY w# 1 sw Y   |S xY w)zZReturn the cached tree listing for a commit hash, or `None` if not cached (or unreadable).N)r-   Ú_IN_MEMORY_TREE_CACHE_LOCKr   Ú_read_tree_cache_from_disk)r%   r&   r+   Úentriess       r   Úread_tree_cacher6   [   sƒ   € äÐ-¨{Ó;€DÜ	#ñ /ØÔ(Ñ(Ü(¨Ñ.÷/ñ /Ø(÷/ô )¨Ó.€GØÐÜ'ñ 	2Ø*1Ô! $Ñ'÷	2à€Nˆ7€N÷/ð /ú÷
	2à€Nús   “A Á

A,Á A)Á,A6r+   c                 óº  — 	 t        | d¬«      5 }t        j                  |«      }d d d «       j                  d«      t        k7  ry |d   j                  «       D ��ci c]  \  }}|t        j                  |«      “Œ c}}S # 1 sw Y   Œ\xY wc c}}w # t        $ r Y y t        t        t        t        f$ r%}t        j                  d| › d|› �«       Y d }~y d }~ww xY w)Núutf-8©ÚencodingÚformat_versionÚfilesz#Ignoring corrupted tree cache file ú: )ÚopenÚjsonÚloadr   ÚTREE_CACHE_FORMAT_VERSIONÚitemsr	   r   ÚFileNotFoundErrorÚOSErrorÚ
ValueErrorÚKeyErrorÚ	TypeErrorÚloggerÚwarning)r+   ÚfÚdataÚ	file_pathr   Úes         r   r4   r4   h   sÅ   € ðÜ�$ Ô)ð 	 ¨QÜ—9‘9˜Q“<ˆD÷	 à�8‰8Ð$Ó%Ô)BÒBàØQUÐV]ÑQ^×QdÑQdÓQf×g¹o¸iÈ�	œ>×3Ñ3°DÓ9Ñ9ÓgÐg÷	 ð 	 üó
 høÜò ÙÜ”Z¤¬9Ð5ò Ü�‰Ð<¸T¸FÀ"ÀQÀCÐHÔIÜûðúsE   ‚B �B ¥ B ÁB Á BÁ<B Â B	ÂB Â	CÂCÂ5CÃCr5   c                 óÔ  — t        | |«      }t        t        |«      D �ci c]  }|||   j                  «       “Œ c}dœ}	 t	        j
                  t        j                  j                  |«      d¬«       t        j                  t        j                  j                  |«      d¬«      \  }}t	        j                  |dd¬«      5 }t        j                  ||d	¬
«       ddd«       t	        j                  ||«       t"        5  t%        |«      t&        |<   ddd«       yc c}w # 1 sw Y   ŒFxY w# t        $ r%}	t        j!                  d|› d|	› �«       Y d}	~	yd}	~	ww xY w# 1 sw Y   yxY w)zMWrite the tree listing of a commit hash to the cache (ignoring any failures).)r;   r<   T)Úexist_okz.tmp)ÚdirÚsuffixÚwr8   r9   r   )ÚindentNz,Ignored error while writing tree cache file r=   )r-   rA   Úsortedr   r*   Úmakedirsr+   ÚdirnameÚtempfileÚmkstempÚfdopenr?   ÚdumpÚreplacerD   rH   rI   r3   r"   r   )
r%   r&   r5   r+   rL   rK   Útmp_fdÚtmp_pathrJ   rM   s
             r   Úwrite_tree_cacher^   w   s*  € äÐ-¨{Ó;€Dä3ÜKQÐRYË?Ö[¸i�)˜W YÑ/×7Ñ7Ó9Ñ9Ò[ñ€DðÜ
�‰”B—G‘G—O‘O DÓ)°DÕ9Ü#×+Ñ+´·±·±ÀÓ0EÈfÔUÑˆ�Ü�Y‰Y�v˜s¨WÔ5ð 	)¸Ü�I‰I�d˜A aÕ(÷	)ä
�
‰
�8˜TÔ"ô 
$ñ 4Ü&*¨7£mÔ˜dÑ#÷4ð 4ùò \÷
	)ð 	)ûô ò Ü�‰ÐEÀdÀVÈ2ÈaÈSÐQÔRÜûðú÷
4ð 4úsB   ŸDÁ BD- ÃD!ÃD- Ä EÄ!D*Ä&D- Ä-	EÄ6EÅEÅE')r   r?   r*   rW   Ú	threadingÚdataclassesr   Úutilsr   Ú
get_loggerr   rH   rA   r   r"   r!   r    ÚLockr3   r	   r-   r1   r6   r4   r^   r$   r   r   ú<module>rd      s)  ðòó( Û 	Û Û Ý !å ð 
ˆ×	Ñ	˜HÓ	%€àÐ ð ACÐ �t˜CÐ!<Ð<Ñ=Ó BØ+˜YŸ^™^Ó-Ð ñ �$Ô÷
ð 
ó ð
ð:K¨ð K¸#ð KÀ#ó Kð<¨sð <°só <ð

 sð 
¸ð 
ÀÀcÈ>ÐFYÑAZÐ]aÑAaó 
ð Sð ¨T°#°~Ð2EÑ-FÈÑ-Mó ð4¨ð 4¸#ð 4ÈÈSÐR`ÐM`ÑHað 4Ðfjô 4r   