Ë
    (täiu…  ã            &       ó  — d Z ddlZddlZddlZddlmZ ddlmZ ddlZddlm	Z	 ddl
mZmZmZmZmZmZmZ ddlmZmZmZmZmZ dd	lmZmZmZmZmZmZmZm Z  dd
l!m"Z"  e	jF                  e$«      Z% e d¬«      Z&de'de(fd„Z)de'de*e'e'f   fd„Z+dŽde,e-z  de(de'fd„Z.dŽdedz  de(de'fd„Z/	 	 d�de0eez     de(de(de0e'   fd„Z1	 	 	 d�de2de0e'   de'de,de,de(ddfd „Z3e&ji                  d!g d"¢¬#«      	 	 	 	 d‘d$ee' ejj                  d%¬«      f   d&ee( ejl                  d'd(¬«      f   d)ee( ejl                  d*d+¬«      f   ded,eddfd-„«       Z7de'de(fd.„Z8e&ji                  d/g d0¢¬#«      ddddejr                  ddfdee'dz   ejj                  d1¬«      f   dee( ejl                  d2d3d4¬«      f   d5ee( ejl                  d6d7¬«      f   d8ee( ejl                  d9d:d;¬«      f   d<eded,eddfd=„«       Z:d>e'dz  de(d5e(d8e(d<ede(d,e'dz  ddfd?„Z;de'de(d5e(d8e(d<ede(d,e'dz  ddfd@„Z<e&ji                  dAdBdCg¬#«      	 	 d’d$ee' ejj                  dD¬«      f   ded,eddfdE„«       Z=e&ji                  dFg dG¢¬#«      	 	 	 	 d‘d$ee' ejj                  dD¬«      f   dHee( ejl                  dIdJdK¬«      f   dLee( ejl                  dMdN¬«      f   ded,eddfdO„«       Z>e&ji                  dPg dQ¢¬#«      	 	 	 	 	 	 	 d“dee' ejj                  dR¬«      f   d8ee( ejl                  d9d:dS¬«      f   dHee( ejl                  dIdJdK¬«      f   dTee( ejl                  dUdV¬«      f   dWee0e'   dz   ejl                  dX¬«      f   dYee0e'   dz   ejl                  dZ¬«      f   ded,eddfd[„«       Z?e&ji                  d\g d]¢¬#«      	 d”d^ee' ejj                  d_¬«      f   d`ee' ejj                  da¬«      f   d,eddfdb„«       Z@e&ji                  dcg dd¢¬#«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d•deee'dz   ejj                  df¬«      f   dgee'dz   ejj                  dh¬«      f   dFee( ejl                  di¬«      f   djee( ejl                  dkdl¬«      f   dmee( ejl                  dndo¬«      f   dpee'dz   ejl                  dq¬«      f   dree'dz   ejl                  ds¬«      f   dTee( ejl                  dUdt¬«      f   dWee0e'   dz   ejl                  du¬«      f   dYee0e'   dz   ejl                  dv¬«      f   dwee'dz   ejl                  dx¬«      f   dyee( ejl                  dzd{¬«      f   d|ee( ejl                  d}d~¬«      f   dee( ejl                  d€d�d‚¬«      f   dee( ejl                  dƒd„d…¬«      f   d,eddf"d†„«       ZAe&ji                  d‡g dˆ¢¬#«      	 	 	 d–d‰ee' ejj                  dŠ¬«      f   d‹ee'dz   ejj                  dŒ¬«      f   ded,eddf
d�„«       ZBy)—z7Contains commands to interact with buckets via the CLI.é    N)Údatetime)Ú	Annotated)Úlogging)ÚBUCKET_PREFIXÚ
BucketFileÚBucketFolderÚFilterMatcherÚ_is_bucket_pathÚ_parse_bucket_pathÚ_split_bucket_id_and_prefix)ÚSoftTemporaryDirectoryÚ
StatusLineÚare_progress_bars_disabledÚdisable_progress_barsÚenable_progress_barsé   )Ú	FormatOptÚOutputFormatÚQuietOptÚTokenOptÚapi_object_to_dictÚ
get_hf_apiÚprint_list_outputÚtyper_factory)Úoutz"Commands to interact with buckets.)ÚhelpÚpathÚreturnc                 ó$   — | j                  d«      S )Nzhf://)Ú
startswith)r   s    új/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/huggingface_hub/cli/buckets.pyÚ_is_hf_handler"   =   s   € Ø�?‰?˜7Ó#Ð#ó    Úargumentc                 ó    — | j                  t        «      rt        | «      S 	 t        | «      S # t        $ r t	        d| › dt        › d�«      ‚w xY w)zíParse a bucket argument accepting both 'namespace/name(/prefix)' and 'hf://buckets/namespace/name(/prefix)'.

    Returns:
        tuple: (bucket_id, prefix) where bucket_id is "namespace/bucket_name" and prefix may be empty string.
    zInvalid bucket argument: ú-. Must be in format namespace/bucket_name or znamespace/bucket_name)r    r   r   r   Ú
ValueError)r$   s    r!   Ú_parse_bucket_argumentr(   A   sb   € ð ×Ñœ=Ô)Ü! (Ó+Ð+ð
Ü*¨8Ó4Ð4øÜò 
ÜØ'¨ zð 2Ü �/Ð!6ð8ó
ð 	
ð
ús	   ¢
- ­ AFÚsizeÚhuman_readablec                 óz   — |st        | «      S dD ]$  }| dk  r|dk(  r	| › d|› �c S | d›d|› �c S | dz  } Œ& | d›d�S )zFormat a size in bytes.)ÚBÚKBÚMBÚGBÚTBiè  r,   Ú z.1fz PB)Ústr)r)   r*   Úunits      r!   Ú_format_sizer4   R   se   € áÜ�4‹yÐã-ˆØ�$Š;Ø�sŠ{Ø˜˜q  Ð'Ò'Ø˜3�Z˜q  Ð'Ò'Ø�‰‰ð .ð �3ˆZ�sÐÐr#   Úmtimec                 óP   — | €y|r| j                  d«      S | j                  d«      S )z0Format mtime datetime to a readable date string.Ú z%b %d %H:%Mz%Y-%m-%d %H:%M:%S)Ústrftime)r5   r*   s     r!   Ú_format_mtimer9   `   s,   € à€}ØÙØ�~‰~˜mÓ,Ð,Ø�>‰>Ð-Ó.Ð.r#   ÚitemsÚquietc                 ó
  — i }| D ]e  }|j                   j                  d«      }|}|dd D ]  }||vrdi i||<   ||   d   }Œ |d   }t        |t        «      r||vsŒWdi i||<   Œ_d|i||<   Œg d}	d}
d}|s{| D ]i  }t        |t        «      sŒt        |j                  |«      }t        |
t        |«      «      }
t        |j                  |«      }t        |t        |«      «      }Œk |
dkD  r|
dz   |z   }	g }t        ||d|	|
|¬	«       |S )
aØ  Build a tree representation of files and directories.

    Produces ASCII tree with size and date columns before the tree connector.
    When quiet=True, only the tree structure is shown (no size/date).

    Args:
        items: List of BucketFile/BucketFolder items
        human_readable: Whether to show human-readable sizes and short dates
        quiet: If True, show only the tree structure without sizes/dates

    Returns:
        List of formatted tree lines
    Ú/NéÿÿÿÿÚ__children__Ú__item__r   é   r7   ©Úprefix_widthÚmax_size_widthr*   )r   ÚsplitÚ
isinstancer   r   r4   r)   ÚmaxÚlenr9   r5   Ú_render_tree)r:   r*   r;   ÚtreeÚitemÚpartsÚcurrentÚpartÚ
final_partrC   rD   Úmax_date_widthÚsize_strÚdate_strÚliness                  r!   Ú_build_treerT   i   sB  € ð& €DãˆØ—	‘	—‘ Ó$ˆØˆØ˜#˜2“JˆDØ˜7Ñ"Ø!/°Ð 4�˜‘Ø˜d‘m NÑ3‰Gð ð
 ˜2‘Yˆ
Ü�dœLÔ)Ø Ò(Ø'5°rÐ&:�˜
Ò#à#-¨tÐ"4ˆG�JÒð ð  €LØ€NØ€NÙÛˆDÜ˜$¤
Õ+Ü'¨¯	©	°>ÓB�Ü!$ ^´S¸³]Ó!C�Ü(¨¯©°^ÓD�Ü!$ ^´S¸³]Ó!C‘ð ð ˜AÒØ)¨AÑ-°Ñ>ˆLð €EÜØØØ
Ø!Ø%Ø%õð €Lr#   ÚnoderS   ÚindentrC   rD   c           	      ó,  — t        | j                  «       «      }t        |«      D ]í  \  }\  }}	|t        |«      dz
  k(  }
|
rdnd}d|	v }|	j	                  di «      }|dkD  ry|rd|z  }nP|	j	                  d«      }|�8t        |j                  |«      }t        |j                  |«      }|d	|› �›d
|› �}nd|z  }|j                  |› d
|› |› |› |rdnd› �«       n|j                  |› |› |› |rdnd› �«       |sŒÔ||
rdndz   }t        ||||||¬«       Œï y)z:Recursively render a tree structure with size+date prefix.r   u
   â””â”€â”€ u
   â”œâ”€â”€ r?   r   r1   r@   NÚ>ú  r=   r7   z    u   â”‚   rB   )Úsortedr:   Ú	enumeraterH   Úgetr4   r)   r9   r5   ÚappendrI   )rU   rS   rV   rC   rD   r*   r:   ÚiÚnameÚvalueÚis_lastÚ	connectorÚis_dirÚchildrenÚprefixrK   rQ   rR   Úchild_indents                      r!   rI   rI   ¨   sE  € ô �4—:‘:“<Ó €EÜ% eÖ,Ñˆ‰=ˆD�%Ø”s˜5“z A‘~Ñ%ˆÙ$+‘L°ˆ	à 5Ð(ˆØ—9‘9˜^¨RÓ0ˆà˜!ÒÙØ˜|Ñ+‘à—y‘y Ó,�ØÐ#Ü+¨D¯I©I°~ÓF�HÜ,¨T¯Z©Z¸ÓH�HØ (¨¨>Ð*:Ð(:Ð;¸2¸h¸ZÐH‘Fà  <Ñ/�FØ�L‰L˜F˜8 2 f X¨i¨[¸¸Áf¹sÐRTÐ>UÐVÕWà�L‰L˜F˜8 I ;¨t¨f¹F±SÈÐ4KÐLÔMâØ!©w¡V¸HÑEˆLÜØØØØ)Ø-Ø-öñ1 -r#   Úcreate)zhf buckets create my-bucketz hf buckets create user/my-bucketz-hf buckets create hf://buckets/user/my-bucketz*hf buckets create user/my-bucket --privatez+hf buckets create user/my-bucket --exist-ok)r_   ÚexamplesÚ	bucket_idzTBucket ID: bucket_name, namespace/bucket_name, or hf://buckets/namespace/bucket_nameÚprivatez	--privatezCreate a private bucket.Úexist_okz
--exist-okz3Do not raise an error if the bucket already exists.Útokenc                 ó¶  — t        |¬«      }| j                  t        «      r3	 t        | «      \  }}|r t        j                  d| › dt        › d�«      ‚|} |j                  | |r|nd|¬«      }	|rt        |	j                  «       yt        d|	j                  › d|	j                  › d	�«       y# t        $ r#}t        j                  t        |«      «      ‚d}~ww xY w)
zCreate a new bucket.©rl   Nz-Cannot specify a prefix for bucket creation: ú. Use namespace/bucket_name or únamespace/bucket_name.)rj   rk   zBucket created: z
 (handle: Ú))r   r    r   r(   r'   ÚtyperÚBadParameterr2   Úcreate_bucketÚprintÚhandleÚurl)
ri   rj   rk   r;   rl   ÚapiÚ	parsed_idre   ÚeÚ
bucket_urls
             r!   rg   rg   Ô   së   € ôF ˜5Ô
!€Cà×ÑœMÔ*ð	-Ü 6°yÓ AÑˆI�vñ Ü×$Ñ$Ø?À	¸{ð K1Ü1>°Ð?UðWóð ð ˆ	à×"Ñ"ØÙ"‘¨Øð #ó €Jñ
 Üˆj×ÑÕ äÐ  §¡Ð 0°
¸:×;LÑ;LÐ:MÈQÐOÕPøô# ò 	-Ü×$Ñ$¤S¨£VÓ,Ð,ûð	-ús   £B, Â,	CÂ5CÃCc                 ód   — | j                  t        «      r| t        t        «      d }d|v S | }d|v S )zFCheck if argument is a bucket ID (namespace/name) vs just a namespace.Nr=   )r    r   rH   )r$   r   s     r!   Ú_is_bucket_idr}     s?   € à×Ñœ=Ô)ØœœMÓ*Ð,Ð-ˆð �$ˆ;Ðð ˆØ�$ˆ;Ðr#   z	list | ls)	zhf buckets listzhf buckets list huggingfacezhf buckets list user/my-bucketz!hf buckets list user/my-bucket -Rz!hf buckets list user/my-bucket -hz%hf buckets list user/my-bucket --treez(hf buckets list user/my-bucket --tree -hz+hf buckets list hf://buckets/user/my-bucketz%hf buckets list user/my-bucket/sub -RzyNamespace (user or org) to list buckets, or bucket ID (namespace/bucket_name(/prefix) or hf://buckets/...) to list files.z--human-readablez-hz$Show sizes in human readable format.Úas_treez--treez3List files in tree format (only for listing files).Ú	recursivez--recursivez-Rz0List files recursively (only for listing files).Úformatc           	      ót   — | duxr t        | «      }|rt        | ||||||¬«       yt        | ||||||¬«       y)z½List buckets or files in a bucket.

    When called with no argument or a namespace, lists buckets.
    When called with a bucket ID (namespace/bucket_name), lists files in the bucket.
    N)r$   r*   r~   r   r€   r;   rl   )Ú	namespacer*   r~   r   r€   r;   rl   )r}   Ú_list_filesÚ_list_buckets)r$   r*   r~   r   r€   r;   rl   Úis_file_modes           r!   Úlist_cmdr†     sX   € ðr  4Ð'ÒC¬M¸(Ó,C€LáÜØØ)ØØØØØö	
ô 	ØØ)ØØØØØö	
r#   r‚   c                 ó*  ‡— |rt        j                  d«      ‚|rt        j                  d«      ‚| �8| j                  t        «      r#| t	        t        «      d } | j                  d«      } t        |¬«      }|j                  | ¬«      D �cg c]  }t        |«      ‘Œ }	}|	s<|s:|t        j                  k7  r'| �| n|j                  «       d   }
t        d|
› d	�«       yg d
¢}dt        dt        t           fˆfd„}dddœ}t!        |	|||||¬«       yc c}w )zList buckets in a namespace.z'Cannot use --tree when listing buckets.z,Cannot use --recursive when listing buckets.Nr=   rn   )r‚   r_   z"No buckets found under namespace 'ú'.)Úidrj   r)   Útotal_filesÚ
created_atrK   r   c           	      óü   •— ddl m}  || j                  d«      «       || j                  d«      «      t        | j                  dd«      ‰¬«       || j                  d«      «       || j                  d	«      «      gS )
Nr   )Ú_format_cellr‰   rj   r)   r   ©r*   rŠ   r‹   )Ú
_cli_utilsr�   r\   r4   )rK   r�   r*   s     €r!   Úrow_fnz_list_buckets.<locals>.row_fn‹  sj   ø€ Ý,ñ ˜Ÿ™ $›Ó(Ù˜Ÿ™ )Ó,Ó-Ü˜Ÿ™ &¨!Ó,¸^ÔLÙ˜Ÿ™ -Ó0Ó1Ù˜Ÿ™ ,Ó/Ó0ð
ð 	
r#   Úright)r)   rŠ   )r€   r;   Úheadersr�   Ú
alignments)rr   rs   r    r   rH   Úrstripr   Úlist_bucketsr   r   ÚjsonÚwhoamiru   ÚdictÚlistr2   r   )r‚   r*   r~   r   r€   r;   rl   rx   ÚbucketÚresultsÚresolved_namespacer’   r�   r“   s    `            r!   r„   r„   j  s   ø€ ñ Ü× Ñ Ð!JÓKÐKÙÜ× Ñ Ð!OÓPÐPð Ð ×!5Ñ!5´mÔ!DØœc¤-Ó0Ð2Ð3ˆ	à×$Ñ$ SÓ)ˆ	ä
˜5Ô
!€CØ8;×8HÑ8HÐS\Ð8HÔ8]Ó^Ñ8]¨fÔ! &Õ)Ð8]€GÐ^áÙ˜¤<×#4Ñ#4Ò4Ø.7Ð.C¡ÈÏÉËÐV\ÑI]ÐÜÐ6Ð7IÐ6JÈ"ÐMÔNØâD€Gð	
”Tð 	
œd¤3™iõ 	
ð "°'Ñ:€JÜ�g f°EÀ7ÐSYÐfpÖqùò- _s   Â
Dc           	      óX  — |r(|t         j                  k(  rt        j                  d«      ‚t	        |¬«      }	 t        | «      \  }}	t        |j                  ||	xs d|¬«      «      }|st        d«       yt        d„ |D «       «      }|t         j                  k(  r:|D �cg c]  }t        |«      ‘Œ }}t        t        j                  |d¬«      «       �n|r!t        |||¬	«      }|D ]  }t        |«       Œ ná|rF|D ]@  }t        |t         «      rt        |j"                  › d
�«       Œ,t        |j"                  «       ŒB n™|D ]”  }t        |t         «      r7t%        |j&                  |«      }t        dd›d|d›d|j"                  › d
�«       ŒJt)        |j*                  |«      }t%        |j,                  |«      }t        |d›d|d›d|j"                  › �«       Œ– |s|rt/        «       j1                  d«       yyy# t        $ r#}
t        j                  t        |
«      «      ‚d}
~
ww xY wc c}w )zList files in a bucket.z%Cannot use --tree with --format json.rn   N©re   r   z(empty)c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)rF   r   )Ú.0rK   s     r!   Ú	<genexpr>z_list_files.<locals>.<genexpr>¼  s   è ø€ ÐKÁU¸Tœ* T¬<×8ÁUùs   ‚rA   ©rV   )r*   r;   r=   r7   z>12rY   z>19z!Use -R to list files recursively.)r   r–   rr   rs   r   r(   r'   r2   r™   Úlist_bucket_treeru   Úanyr   ÚdumpsrT   rF   r   r   r9   Úuploaded_atr4   r)   r5   r   Údone)r$   r*   r~   r   r€   r;   rl   rx   ri   re   rz   r:   Úhas_directoriesrK   r›   Ú
tree_linesÚlineÚ	mtime_strrQ   s                      r!   rƒ   rƒ   š  sù  € ñ �6œ\×.Ñ.Ò.Ü× Ñ Ð!HÓIÐIä
˜5Ô
!€Cð)Ü2°8Ó<Ñˆ	�6ô
 Ø×ÑØØ’>˜TØð 	ó 	
ó€Eñ ÜˆiÔØäÑKÁUÓKÓK€Oà”×"Ñ"Ò"Ù8=Ó>¹°Ô% dÕ+¸ˆÐ>ÜŒd�j‰j˜¨Ô+Ö,Ù	ä  °~ÈUÔSˆ
ÛˆDÜ�$�Kñ á	ÛˆDÜ˜$¤Ô-Ü˜Ÿ™˜ 1�oÕ&ä�d—i‘iÕ ñ	 ó ˆDÜ˜$¤Ô-Ü)¨$×*:Ñ*:¸NÓK�	Ü˜˜C˜  9¨S /°°D·I±I°;¸aÐ@ÕAä'¨¯	©	°>ÓB�Ü)¨$¯*©*°nÓE�	Ü˜ #˜ b¨°3¨°r¸$¿)¹)¸ÐEÕFð ñ ™Ü‹×ÑÐ=Õ>ð )ˆ9øôW ò )Ü× Ñ ¤ Q£Ó(Ð(ûð)üò& ?s   ¸G8 ÂH'Ç8	H$ÈHÈH$Úinfozhf buckets info user/my-bucketz+hf buckets info hf://buckets/user/my-bucketzFBucket ID: namespace/bucket_name or hf://buckets/namespace/bucket_namec                 ó<  — t        |¬«      }	 t        | «      \  }}|j                  |«      }|rt        |j                  «       yt        t        j                  t        |«      d¬«      «       y# t        $ r#}t        j                  t        |«      «      ‚d}~ww xY w)zGet info about a bucket.rn   NrA   r£   )r   r(   r'   rr   rs   r2   Úbucket_inforu   r‰   r–   r¦   r   )ri   r;   rl   rx   ry   Ú_rz   rš   s           r!   r­   r­   Û  s€   € ô$ ˜5Ô
!€Cð)Ü-¨iÓ8‰ˆ	�1ð �_‰_˜YÓ'€FÙÜˆf�i‰iÕäŒd�j‰jÔ+¨FÓ3¸AÔ>Õ?øô ò )Ü× Ñ ¤ Q£Ó(Ð(ûð)ús   ŽA/ Á/	BÁ8BÂBÚdelete)z hf buckets delete user/my-bucketz-hf buckets delete hf://buckets/user/my-bucketz&hf buckets delete user/my-bucket --yesz-hf buckets delete user/my-bucket --missing-okÚyesz--yesz-yzSkip confirmation prompt.Ú
missing_okz--missing-okz3Do not raise an error if the bucket does not exist.c                 óè  — | j                  t        «      r4	 t        | «      \  }}|r t	        j
                  d| › dt        › d�«      ‚|} n$d| vr t	        j
                  d| › dt        › d�«      ‚t        j                  d| › d	�|¬
«       t        |¬«      }|j                  | |¬«       |rt        | «       yt        d| › �«       y# t        $ r#}t	        j
                  t        |«      «      ‚d}~ww xY w)zDelete a bucket.

    This deletes the entire bucket and all its contents. Use `hf buckets rm` to remove individual files.
    Nz-Cannot specify a prefix for bucket deletion: ro   rp   r=   zInvalid bucket ID: r&   z(Are you sure you want to delete bucket 'ú'?©r²   rn   )r³   zBucket deleted: )r    r   r(   r'   rr   rs   r2   r   Úconfirmr   Údelete_bucketru   )	ri   r²   r³   r;   rl   ry   re   rz   rx   s	            r!   r±   r±   û  s  € ðL ×ÑœMÔ*ð	-Ü 6°yÓ AÑˆI�vñ Ü×$Ñ$Ø?À	¸{ð K1Ü1>°Ð?UðWóð ð ‰	Ø	�IÑ	Ü× Ñ Ø! ) ð -;Ü;H¸/ÐI_ðaó
ð 	
ô
 ‡K�KÐ:¸9¸+ÀRÐHÈcÕRä
˜5Ô
!€CØ×Ñ�i¨JÐÔ7ÙÜˆiÕäÐ   Ð,Õ-øô+ ò 	-Ü×$Ñ$¤S¨£VÓ,Ð,ûð	-ús   —C Ã	C1ÃC,Ã,C1zremove | rm)z)hf buckets remove user/my-bucket/file.txtz2hf buckets rm hf://buckets/user/my-bucket/file.txtz.hf buckets rm user/my-bucket/logs/ --recursivez:hf buckets rm user/my-bucket --recursive --include "*.tmp"z8hf buckets rm user/my-bucket/data/ --recursive --dry-runz¡Bucket path: namespace/bucket_name/path or hf://buckets/namespace/bucket_name/path. With --recursive, namespace/bucket_name is also accepted to target all files.z0Remove files recursively under the given prefix.Údry_runz	--dry-runz8Preview what would be deleted without actually deleting.ÚincludezQInclude only files matching pattern (can specify multiple). Requires --recursive.ÚexcludezLExclude files matching pattern (can specify multiple). Requires --recursive.c                 ó|  — 	 t        | «      \  }}	|	dk(  r|st        j                  d|› d|› d�«      ‚|s|r|st        j                  d«      ‚t        |¬«      }|�rt        | ¬«      }|j                  d	«       g }|j                  ||	j                  d
«      xs dd¬«      D ]B  }t        |t        «      sŒ|j                  |«       |j                  dt        |«      › d�«       ŒD |j                  dt        |«      › d�«       |s|r9t        ||¬«      }|D �cg c]   }|j!                  |j"                  «      sŒ|‘Œ" }}n|}|D �cg c]  }|j"                  ‘Œ }}t%        d„ |D «       «      }t'        |d¬«      }|s|st)        d«       yt        |«      › d|› �}|s7|s5|s|D ]  }t)        d|› �«       Œ t+        j,                  d|› d|› d�d¬«       |r.|D ]  }t)        dt.        › |› d
|› �«       Œ t)        d|› d�«       y|j1                  ||¬«       |r|D ]  }t)        |«       Œ y|D ]  }t)        dt.        › |› d
|› �«       Œ t)        d|› d|› d�«       y|	j                  d
«      }|st        j                  d «      ‚|r#t)        dt.        › |› d
|› �«       t)        d!«       yt+        j,                  d"|› d#|› d�|¬«       |j1                  ||g¬«       |rt)        |«       yt)        dt.        › |› d
|› �«       y# t        $ r#}
t        j                  t	        |
«      «      ‚d}
~
ww xY wc c}w c c}w )$zbRemove files from a bucket.

    To delete an entire bucket, use `hf buckets delete` instead.
    Nr7   z?No file path specified. To remove files, provide a path (e.g. 'zd/FILE') or use --recursive to remove all files. To delete the entire bucket, use `hf buckets delete z`.z,--include and --exclude require --recursive.rn   )ÚenabledzListing files from remoter=   Trž   zListing files from remote (z files))Úinclude_patternsÚexclude_patternsc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr    )r)   )r¡   Úfs     r!   r¢   zremove.<locals>.<genexpr>¡  s   è ø€ Ð7© A˜Ÿ�©ùs   ‚rŽ   zNo files to remove.z file(s) totaling rY   zRemove z from 'rµ   Fr¶   zdelete: z
(dry run) z would be removed.)r±   zRemoved rˆ   zFile path cannot be empty.z"(dry run) 1 file would be removed.zRemove 'z' from ')r(   r'   rr   rs   r2   r   r   Úupdater¤   r”   rF   r   r]   rH   r¨   r	   Úmatchesr   Úsumr4   ru   r   r·   r   Úbatch_bucket_files)r$   r   r²   r¹   rº   r»   r;   rl   ri   re   rz   rx   ÚstatusÚ	all_filesrK   ÚmatcherrÁ   Úmatched_filesÚ
file_pathsÚ
total_sizerQ   Úcount_labelr   Ú	file_paths                           r!   ÚremoverÎ   <  sa  € ð|)Ü2°8Ó<Ñˆ	�6ð �‚|™IÜ× Ñ ðØ �kð "DØDMÀ;ÈbðRó
ð 	
ñ 	‘7¡IÜ× Ñ Ð!OÓPÐPä
˜5Ô
!€CâÜ¨ IÔ.ˆØ�‰Ð1Ô2à&(ˆ	Ø×(Ñ(ØØ—=‘= Ó%Ò-¨Øð )ö 
ˆDô
 ˜$¤
Õ+Ø× Ñ  Ô&Ø—‘Ð ;¼CÀ	»NÐ;KÈ7ÐSÕTð
ð 	�‰Ð1´#°i³.Ð1AÀÐIÔJá‘gÜ#°WÈwÔWˆGÙ(1ÓM©	 1°W·_±_ÀQÇVÁVÕ5LšQ¨	ˆMÑMà%ˆMá&3Ó4¡m �a—f“f mˆ
Ð4ÜÑ7©Ó7Ó7ˆ
Ü 
¸4Ô@ˆáÙÜÐ+Ô,Øä˜Z›Ð)Ð);¸H¸:ÐFˆá™7ÙÛ&�DÜ˜B˜t˜f˜+Õ&ð 'ä�K‰K˜' + ¨g°i°[ÀÐCÈÕOáÛ"�Ü˜¤ °	¨{¸!¸D¸6ÐBÕCð #ä�J˜{˜mÐ+=Ð>Ô?Øà×Ñ˜y°ÐÔ<ÙÛ"�Ü�d•ñ #ó #�Ü˜¤ °	¨{¸!¸D¸6ÐBÕCð #ä�H˜[˜M¨°°¸2Ð>Õ?ð —M‘M #Ó&ˆ	ÙÜ×$Ñ$Ð%AÓBÐBáÜ�Hœ]˜O¨I¨;°a¸	°{ÐCÔDÜÐ6Ô7Øä�‰�h˜y˜k¨°)°¸BÐ?ÀSÕIà×Ñ˜y°)°ÐÔ=ÙÜ�)Õä�Hœ]˜O¨I¨;°a¸	°{ÐCÕDøôi ò )Ü× Ñ ¤ Q£Ó(Ð(ûð)üò@ Nùò 5s)   ‚L Ä L4Ä=L4Å
L9Ì	L1ÌL,Ì,L1Úmove)z/hf buckets move user/old-bucket user/new-bucketz/hf buckets move user/my-bucket my-org/my-bucketzIhf buckets move hf://buckets/user/old-bucket hf://buckets/user/new-bucketÚfrom_idzMSource bucket ID: namespace/bucket_name or hf://buckets/namespace/bucket_nameÚto_idzRDestination bucket ID: namespace/bucket_name or hf://buckets/namespace/bucket_namec                 ó$  — t        | «      \  }}|r t        j                  d| › dt        › d�«      ‚t        |«      \  }}|r t        j                  d|› dt        › d�«      ‚t	        |¬«      }|j                  ||¬«       t        d|› d|› �«       y)	z2Move (rename) a bucket to a new name or namespace.z)Cannot specify a prefix for bucket move: ro   rp   rn   )rÐ   rÑ   zBucket moved: ú -> N)r(   rr   rs   r   r   Úmove_bucketru   )rÐ   rÑ   rl   Úparsed_from_idÚfrom_prefixÚparsed_to_idÚ	to_prefixrx   s           r!   rÏ   rÏ   Ó  s·   € ô2 #9¸Ó"AÑ€N�KÙÜ× Ñ Ø7¸°yð A-Ü-:¨OÐ;QðSó
ð 	
ô 5°UÓ;Ñ€L�)ÙÜ× Ñ Ø7¸°wð ?-Ü-:¨OÐ;QðSó
ð 	
ô
 ˜5Ô
!€CØ‡O�O˜N°,€OÔ?Ü	ˆN˜>Ð*¨$¨|¨nÐ
=Õ>r#   Úsync)z2hf buckets sync ./data hf://buckets/user/my-bucketz2hf buckets sync hf://buckets/user/my-bucket ./dataz;hf buckets sync ./data hf://buckets/user/my-bucket --deletez^hf buckets sync hf://buckets/user/my-bucket ./data --include "*.safetensors" --exclude "*.tmp"zIhf buckets sync ./data hf://buckets/user/my-bucket --plan sync-plan.jsonlz'hf buckets sync --apply sync-plan.jsonlz<hf buckets sync ./data hf://buckets/user/my-bucket --dry-runzChf buckets sync ./data hf://buckets/user/my-bucket --dry-run | jq .ÚsourcezKSource path: local directory or hf://buckets/namespace/bucket_name(/prefix)ÚdestzPDestination path: local directory or hf://buckets/namespace/bucket_name(/prefix)z/Delete destination files not present in source.Úignore_timesz--ignore-timesz;Skip files only based on size, ignoring modification times.Úignore_sizesz--ignore-sizesz<Skip files only based on modification times, ignoring sizes.Úplanz=Save sync plan to JSONL file for review instead of executing.Úapplyz#Apply a previously saved plan file.z5Print sync plan to stdout as JSONL without executing.z6Include files matching pattern (can specify multiple).z6Exclude files matching pattern (can specify multiple).Úfilter_fromz(Read include/exclude patterns from file.Úexistingz
--existingzASkip creating new files on receiver (only update existing files).Úignore_existingz--ignore-existingzCSkip updating files that exist on receiver (only create new files).Úverbosez	--verbosez-vz%Show detailed logging with reasoning.z--quietz-qzMinimal output.c                 ó\   — t        |¬«      }|j                  | ||||||||	|
|||||¬«       y)z0Sync files between local directory and a bucket.rn   )rÚ   rÛ   r±   rÜ   rÝ   rá   râ   rº   r»   rà   rÞ   rß   r¹   rã   r;   N)r   Úsync_bucket)rÚ   rÛ   r±   rÜ   rÝ   rÞ   rß   r¹   rº   r»   rà   rá   râ   rã   r;   rl   rx   s                    r!   rÙ   rÙ     sM   € ôh ˜5Ô
!€CØ‡O�OØØØØ!Ø!ØØ'ØØØØØØØØð õ r#   Úcp)
z5hf buckets cp hf://buckets/user/my-bucket/config.jsonz=hf buckets cp hf://buckets/user/my-bucket/config.json ./data/zDhf buckets cp hf://buckets/user/my-bucket/config.json my-config.jsonz7hf buckets cp hf://buckets/user/my-bucket/config.json -z8hf buckets cp my-config.json hf://buckets/user/my-bucketz>hf buckets cp my-config.json hf://buckets/user/my-bucket/logs/zKhf buckets cp my-config.json hf://buckets/user/my-bucket/remote-config.jsonz7hf buckets cp - hf://buckets/user/my-bucket/config.jsonzVhf buckets cp hf://buckets/user/my-bucket/logs/ hf://buckets/user/archive-bucket/logs/zehf buckets cp hf://datasets/user/my-dataset/processed/ hf://buckets/user/my-bucket/dataset/processed/ÚsrczMSource: local file, any hf:// handle (model, dataset, bucket), or - for stdinÚdstz@Destination: local path, bucket hf://... handle, or - for stdoutc           	      ó   — t        |¬«      }t        | «      }|duxr t        |«      }t        | «      }|duxr t        |«      }| dk(  }	|dk(  }
|rC|rA|r
t        «        	 |j	                  | |«       	 |rt        «        	 |st        d| › d|› �«       y|s0|s.|	s,|€t        j                  d«      ‚t        j                  d«      ‚|	r|st        j                  d«      ‚|	r;|r9t        |«      \  }}|d	k(  s|j                  d
«      rt        j                  d«      ‚|
r|st        j                  d«      ‚|s6|	s4t        j                  j                  | «      rt        j                  d«      ‚|�rt        | «      \  }}|d	k(  s|j                  d
«      rt        j                  d«      ‚|j!                  d
d«      d   }|
rÑt#        «       }|s
t        «        	 t%        «       5 }t        j                  j'                  ||«      }|j)                  |||fg«       t+        |d«      5 }|j-                  d«      x}r=t.        j0                  j2                  j5                  |«       |j-                  d«      x}rŒ=ddd«       ddd«       |sþt        «        y|€|}nrt        j                  j                  |«      s0|j                  t        j6                  «      s|j                  d
«      r!t        j                  j'                  ||«      }n|}t        j                  j9                  |«      }|rt        j:                  |d¬«       |r
t        «        	 |j)                  |||fg«       |rt        «        	 |st        d| › d|› �«       yyy|	rxt        |«      \  }}t.        j<                  j2                  j-                  «       }|r
t        «        	 |j?                  |||fg¬«       |rt        «        	 |st        d|› �«       yyt        j                  jA                  | «      st        j                  d| › �«      ‚t        |«      \  }}|d	k(  r t        j                  jC                  | «      }n6|j                  d
«      r#|t        j                  jC                  | «      z   }n|}|r
t        «        	 |j?                  || |fg¬«       |rt        «        	 |st        d| › dtD        › |› d
|› �«       yy# t
        $ r#}t        j                  t        |«      «      ‚d}~ww xY w# |rt        «        w w xY w# 1 sw Y   �Œ¼xY w# 1 sw Y   �ŒÁxY w# |st        «        w w xY w# |rt        «        w w xY w# |rt        «        w w xY w# |rt        «        w w xY w)zCopy files to or from buckets.rn   NÚ-zCopied: rÓ   z2Missing destination. Provide a bucket path as DST.z;One of SRC or DST must be a bucket path (hf://buckets/...).z+Stdin upload requires a bucket destination.r7   r=   zAStdin upload requires a full destination path including filename.z"Cannot pipe to stdout for uploads.zNSource must be a file, not a directory. Use `hf buckets sync` for directories.zJSource path must include a file name, not just a bucket or directory path.r   r>   Úrbi HèT)rk   zDownloaded: )ÚaddzUploaded: stdin -> zSource file not found: z
Uploaded: )#r   r"   r
   r   Ú
copy_filesr'   rr   rs   r2   r   ru   r   ÚendswithÚosr   ÚisdirÚrsplitr   r   ÚjoinÚdownload_bucket_filesÚopenÚreadÚsysÚstdoutÚbufferÚwriteÚsepÚdirnameÚmakedirsÚstdinrÅ   ÚisfileÚbasenamer   )rç   rè   r;   rl   rx   Ú	src_is_hfÚ	dst_is_hfÚsrc_is_bucketÚdst_is_bucketÚsrc_is_stdinÚdst_is_stdoutrz   r°   re   ri   ÚfilenameÚpbar_was_disabledÚtmp_dirÚtmp_pathrÁ   ÚchunkÚ
local_pathÚ
parent_dirÚremote_pathÚdatas                            r!   ræ   ræ   ’  s  € ô4 ˜5Ô
!€Cä˜cÓ"€IØ˜4�Ò6¤M°#Ó$6€IÜ# CÓ(€MØ˜t�OÒ<¬¸Ó(<€MØ˜#‘:€LØ˜3‘J€Mñ ‘YÙÜ!Ô#ð	'Ø�N‰N˜3 Õ$ñ Ü$Õ&áÜ�H˜S˜E  c UÐ+Ô,Øñ ¡±|Øˆ;Ü×$Ñ$Ð%YÓZÐZÜ× Ñ Ð!^Ó_Ð_á™MÜ× Ñ Ð!NÓOÐOá™Ü& sÓ+‰	ˆˆ6Ø�RŠ<˜6Ÿ?™?¨3Ô/Ü×$Ñ$Ð%hÓiÐiá™]Ü× Ñ Ð!EÓFÐFá¡´"·'±'·-±-ÀÔ2DÜ× Ñ Ð!qÓrÐrò ä.¨sÓ3Ñˆ	�6Ø�RŠ<˜6Ÿ?™?¨3Ô/Ü×$Ñ$Ð%qÓrÐrØ—=‘=  aÓ(¨Ñ,ˆáô !;Ó <ÐÙ$Ü%Ô'ð	+Ü+Ô-°Ü!Ÿw™wŸ|™|¨G°XÓ>�HØ×-Ñ-¨i¸6À8Ð:LÐ9MÔNÜ˜h¨Ô-°Ø'(§v¡v¨jÓ'9Ð9˜eÐ9ÜŸJ™J×-Ñ-×3Ñ3°EÔ:ð ()§v¡v¨jÓ'9Ð9˜eÑ9÷ .÷ .ñ )Ü(Õ*ð ˆ{Ø%‘
Ü—‘—‘˜sÔ# s§|¡|´B·F±FÔ';¸s¿|¹|ÈCÔ?PÜŸW™WŸ\™\¨#¨xÓ8‘
à �
ô Ÿ™Ÿ™¨Ó4ˆJÙÜ—‘˜J°Õ6áÜ%Ô'ð+Ø×)Ñ)¨)°v¸zÐ6JÐ5KÔLáÜ(Õ*áÜ˜ S E¨¨j¨\Ð:Õ;ð ð1 )ñ6 
ä!3°CÓ!8Ñˆ	�;Ü�y‰y×Ñ×$Ñ$Ó&ˆáÜ!Ô#ð	'Ø×"Ñ" 9°D¸+Ð3FÐ2GÐ"ÔHáÜ$Õ&áÜÐ'¨ uÐ-Õ.ð ô
 �w‰w�~‰~˜cÔ"Ü×$Ñ$Ð'>¸s¸eÐ%DÓEÐEä.¨sÓ3Ñˆ	�6à�RŠ<ÜŸ'™'×*Ñ*¨3Ó/‰KØ�_‰_˜SÔ!Ø ¤2§7¡7×#3Ñ#3°CÓ#8Ñ8‰Kà ˆKáÜ!Ô#ð	'Ø×"Ñ" 9°C¸Ð3EÐ2FÐ"ÔGáÜ$Õ&áÜ�J˜s˜e 4¬ °y°kÀÀ;À-ÐPÕQð øôm ò 	-Ü×$Ñ$¤S¨£VÓ,Ð,ûð	-ûñ Ü$Õ&ð ú÷\ .Ñ-ú÷ .Ñ-ûñ )Ü(Õ*ð )ûñ* Ü(Õ*ð ûñ  Ü$Õ&ð ûñ2 Ü$Õ&ð ús†   Á S- Ç
U Ç!AT;È#AT.É4T;É<U ÍU Ï
U, Ò,U> Ó-	TÓ6TÔTÔT ÔT+Ô.T8	Ô3T;Ô;UÕ U ÕUÕU)Õ,U;Õ>V)F)FF)r   r   F)FFFN)FN)FFFNNFNr    )NNFFFNNFNNNFFFFN)NFN)CÚ__doc__r–   rï   rö   r   Útypingr   rr   Úhuggingface_hubr   Úhuggingface_hub._bucketsr   r   r   r	   r
   r   r   Úhuggingface_hub.utilsr   r   r   r   r   r�   r   r   r   r   r   r   r   r   Ú_outputr   Ú
get_loggerÚ__name__ÚloggerÚbuckets_clir2   Úboolr"   Útupler(   ÚintÚfloatr4   r9   r™   rT   r˜   rI   ÚcommandÚArgumentÚOptionrg   r}   Útabler†   r„   rƒ   r­   r±   rÎ   rÏ   rÙ   ræ   © r#   r!   Ú<module>r"     sä  ðñ >ã Û 	Û 
Ý Ý ã å #÷÷ ñ ÷õ ÷	÷ 	ó 	õ ð 
ˆ×	Ñ	˜HÓ	%€ñ Ð!EÔF€ð$˜ð $ ó $ð
 Sð 
¨U°3¸°8©_ó 
ñ"�s˜U‘{ð °Dð ÀSó ñ/˜ D™ð /¸$ð /È3ó /ð !Øñ<Ø�
˜\Ñ)Ñ*ð<àð<ð ð<ð 
ˆ#�Yó	<ðF ØØ ñ)Ø
ð)à�‰9ð)ð ð)ð ð	)ð
 ð)ð ð)ð 
ó)ðX ×ÑØ	òð ó 	ð. 	ð 	ØØñ-/QØØØˆ�‰Øgô	
ð	ñð/Qð ØØˆ�‰ØØ+ô	
ð	ñð/Qð ØØˆ�‰ØØFô	
ð	ñð/Qð* ð+/Qð, ð-/Qð. 
ò//Qó	ð/Qðd˜Cð  Dó ð ×ÑØ	ò
ð ó ð. 	ð 	ð 	ð 	Ø$×*Ñ*ØØñG@
ØØˆd‰
Øˆ�‰ðWô	
ð	ñð@
ð ØØˆ�‰ØØØ7ô	
ð	ñð@
ð$ ØØˆ�‰ØØFô	
ð	ñð%@
ð2 ØØˆ�‰ØØØCô	
ð	ñð3@
ðB ðC@
ðD ðE@
ðF ðG@
ðH 
òI@
óð@
ðF-rØ�T‰zð-ràð-rð ð-rð ð	-rð
 ð-rð ð-rð �‰:ð-rð 
ó-rð`>?Øð>?àð>?ð ð>?ð ð	>?ð
 ð>?ð ð>?ð �‰:ð>?ð 
ó>?ðB ×ÑØ	à(Ø5ðð ó ð Øñ@ØØØˆ�‰ØYô	
ð	ñð@ð ð@ð ð@ð 
ò@óð@ð2 ×ÑØ	òð ó ð. 	ð 	ØØñ/5.ØØØˆ�‰ØYô	
ð	ñð5.ð 
ØØˆ�‰ØØØ,ô	
ð	ñ
ð5.ð ØØˆ�‰ØØFô	
ð	ñð5.ð, ð-5.ð. ð/5.ð0 
ò15.óð5.ðp ×ÑØ	òð ó 	ð6 	ð 	ð 	ð 	ð 	ØØñ]JEØØØˆ�‰ðaô	
ð	ñðJEð ØØˆ�‰ØØØCô	
ð	ñðJEð$ 
ØØˆ�‰ØØØ,ô	
ð	ñ
ð%JEð4 ØØˆ�‰ØØKô	
ð	ñð5JEðB ØˆS‰	�DÑØˆ�‰Ødô	
ð	ñðCJEðN ØˆS‰	�DÑØˆ�‰Ø_ô	
ð	ñðOJEðZ ð[JEð\ ð]JEð^ 
ò_JEó	ðJEðZ ×ÑØ	òð ó ð* ñ"?ØØØˆ�‰Ø`ô	
ð	ñð"?ð ØØˆ�‰Øeô	
ð	ñð"?ð ð"?ð 
ò"?óð"?ðT ×ÑØ	ò	ð ó ð& 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ØñIxØØˆd‰
Øˆ�‰Ø^ô	
ð	ñðxð Øˆd‰
Øˆ�‰Øcô	
ð	ñðxð ØØˆ�‰ØBô	
ð	ñðxð& ØØˆ�‰ØØNô	
ð	ñð'xð4 ØØˆ�‰ØØOô	
ð	ñð5xðB Øˆd‰
Øˆ�‰ØPô	
ð	ñðCxðN Øˆd‰
Øˆ�‰Ø6ô	
ð	ñðOxðZ ØØˆ�‰ØØHô	
ð	ñð[xðh ØˆS‰	�DÑØˆ�‰ØIô	
ð	ñðixðt ØˆS‰	�DÑØˆ�‰ØIô	
ð	ñðuxð@ Øˆd‰
Øˆ�‰Ø;ô	
ð	ñðAxðL ØØˆ�‰ØØTô	
ð	ñðMxðZ ØØˆ�‰ØØVô	
ð	ñð[xðh ØØˆ�‰ØØØ8ô	
ð	ñðixðx ØØˆ�‰ØØØ"ô	
ð	ñðyxðH ðIxðJ 
òKxóðxð@ ×ÑØ	òð ó ð* 	ØØñQRØ	Øˆ^ˆU�^‰^Ð!pÔqÐqñ
ðQRð 
Øˆd‰
�N�E—N‘NÐ(jÔkÐkñ
ð	QRð ðQRð ðQRð 
òQRóñQRr#   