Ë
    Bêñiê€  ã            &       ó‚  — 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 dd
lm Z m!Z!  e	jD                  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e/eez     de'de'de/e&   fd„Z0	 	 	 d‘de1de/e&   de&de+de+de'ddfd „Z2e%jg                  d!g d"¢¬#«      ddde jh                  f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%jg                  d0g d1¢¬#«      dddddde jh                  fdee&dz   ejj                  d2¬«      f   dee' ejl                  d3d4d5¬«      f   d6ee' ejl                  d7d8¬«      f   d9ee' ejl                  d:d;d<¬«      f   d=ed,ed-eddfd>„«       Z9d?e&dz  d=e&dz  de'd6e'd9e'd,e&dz  ddfd@„Z:de&de'd6e'd9e'd,e&dz  ddfdA„Z;e%jg                  dBdCdDg¬#«      de jh                  fd$ee& ejj                  dE¬«      f   d,ed-eddfdF„«       Z<e%jg                  dGg dH¢¬#«      ddde jh                  fd$ee& ejj                  dE¬«      f   dIee' ejl                  dJdKdL¬«      f   dMee' ejl                  dNdO¬«      f   d,ed-eddfdP„«       Z=e%jg                  dQg dR¢¬#«      dddddde jh                  fdee& ejj                  dS¬«      f   d9ee' ejl                  d:d;dT¬«      f   dIee' ejl                  dJdKdL¬«      f   dUee' ejl                  dVdW¬«      f   dXee/e&   dz   ejl                  dY¬«      f   dZee/e&   dz   ejl                  d[¬«      f   d,ed-eddfd\„«       Z>e%jg                  d]g d^¢¬#«      de jh                  fd_ee& ejj                  d`¬«      f   daee& ejj                  db¬«      f   d,ed-eddf
dc„«       Z?e%jg                  ddg de¢¬#«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d’dfee&dz   ejj                  dg¬«      f   dhee&dz   ejj                  di¬«      f   dGee' ejl                  dj¬«      f   dkee' ejl                  dldm¬«      f   dnee' ejl                  dodp¬«      f   dqee&dz   ejl                  dr¬«      f   dsee&dz   ejl                  dt¬«      f   dUee' ejl                  dVdu¬«      f   dXee/e&   dz   ejl                  dv¬«      f   dZee/e&   dz   ejl                  dw¬«      f   dxee&dz   ejl                  dy¬«      f   dzee' ejl                  d{d|¬«      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‡„«       Z@e%jg                  dˆg d‰¢¬#«      dde jh                  fdŠee& ejj                  d‹¬«      f   dŒee&dz   ejj                  d�¬«      f   d,ed-eddf
dŽ„«       ZAy)“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é   )ÚFormatWithAutoOptÚ	SearchOptÚTokenOptÚapi_object_to_dictÚ
get_hf_apiÚtyper_factory)ÚOutputFormatWithAutoÚoutz"Commands to interact with buckets.)ÚhelpÚpathÚreturnc                 ó$   — | j                  d«      S )Nzhf://)Ú
startswith)r   s    ú]/var/www/pod-logistic/pod-ai/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'   ?   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_sizer3   P   sj   € áÜ�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)r4   r)   s     r    Ú_format_mtimer8   ^   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   é   r6   ©Úprefix_widthÚmax_size_widthr)   )r   ÚsplitÚ
isinstancer   r   r3   r(   ÚmaxÚlenr8   r4   Ú_render_tree)r9   r)   r:   ÚtreeÚitemÚpartsÚcurrentÚpartÚ
final_partrB   rC   Úmax_date_widthÚsize_strÚdate_strÚliness                  r    Ú_build_treerS   g   sS  € ð& €Dàò 5ˆØ—	‘	—‘ Ó$ˆØˆØ˜#˜2�Jò 	4ˆDØ˜7Ñ"Ø!/°Ð 4�˜‘Ø˜d‘m NÑ3‰Gð	4ð
 ˜2‘Yˆ
Ü�dœLÔ)Ø Ò(Ø'5°rÐ&:�˜
Ò#à#-¨tÐ"4ˆG�JÒð5ð  €LØ€NØ€NÙØò 	DˆDÜ˜$¤
Õ+Ü'¨¯	©	°>ÓB�Ü!$ ^´S¸³]Ó!C�Ü(¨¯©°^ÓD�Ü!$ ^´S¸³]Ó!C‘ð	Dð ˜AÒØ)¨AÑ-°Ñ>ˆLð €EÜØØØ
Ø!Ø%Ø%õð €Lr"   ÚnoderR   ÚindentrB   rC   c           	      ó.  — t        | j                  «       «      }t        |«      D ]î  \  }\  }}	|t        |«      dz
  k(  }
|
rdnd}d|	v }|	j	                  di «      }|dkD  rz|rd|z  }nQ|	j	                  d«      }|�9t        |j                  |«      }t        |j                  |«      }|d	|› 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   r0   r?   Nú>r6   ú  r<   z    u   â”‚   rA   )Úsortedr9   Ú	enumeraterG   Úgetr3   r(   r8   r4   ÚappendrH   )rT   rR   rU   rB   rC   r)   r9   ÚiÚnameÚvalueÚis_lastÚ	connectorÚis_dirÚchildrenÚprefixrJ   rP   rQ   Úchild_indents                      r    rH   rH   ¦   sL  € ô �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.ÚtokenÚformatc                 ó’  — t        |¬«      }| j                  t        «      r3	 t        | «      \  }}|r t        j                  d| › dt        › d�«      ‚|} |j                  | |r|nd|¬«      }	t        j                  d|	j                  |	j                  ¬«       y# t        $ r#}t        j                  t        |«      «      ‚d}~ww xY w)	zCreate a new bucket.©rk   Nz-Cannot specify a prefix for bucket creation: ú. Use namespace/bucket_name or únamespace/bucket_name.)ri   rj   zBucket created)ÚhandleÚurl)r   r   r   r'   r&   ÚtyperÚBadParameterr1   Úcreate_bucketr   Úresultrq   rr   )
rh   ri   rj   rk   rl   ÚapiÚ	parsed_idrd   ÚeÚ
bucket_urls
             r    rf   rf   Ò   sÑ   € ôF ˜5Ô
!€Cà×ÑœMÔ*ð	-Ü 6°yÓ AÑˆI�vñ Ü×$Ñ$Ø?À	¸{ð K1Ü1>°Ð?UðWóð ð ˆ	à×"Ñ"ØÙ"‘¨Øð #ó €Jô
 ‡J�JÐ¨
×(9Ñ(9¸z¿~¹~ÖNøô ò 	-Ü×$Ñ$¤S¨£VÓ,Ð,ûð	-ús   £B Â	CÂ#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   rG   )r#   r   s     r    Ú_is_bucket_idr|     s?   € à×Ñœ=Ô)ØœœMÓ*Ð,Ð-ˆð �$ˆ;Ðð ˆØ�$ˆ;Ðr"   z	list | ls)
zhf buckets listzhf buckets list huggingfacez$hf buckets list --search "my-prefix"z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).Úsearchc                 óœ   — | duxr t        | «      }|r(|�t        j                  d«      ‚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.
    Nz'Cannot use --search when listing files.)r#   r)   r}   r~   rk   )Ú	namespacer   r)   r}   r~   rk   )r|   rs   rt   Ú_list_filesÚ_list_buckets)r#   r)   r}   r~   r   rk   rl   Úis_file_modes           r    Úlist_cmdr…     sg   € ðt  4Ð'ÒC¬M¸(Ó,C€LáØÐÜ×$Ñ$Ð%NÓOÐOÜØØ)ØØØö	
ô 	ØØØ)ØØØö	
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  }|j                  |j                  |rt        |j                  |«      n|j                  |j                  |j                  dœ‘ŒV }}t        j                  |ddd	œ¬
«       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   )Úidri   r(   Útotal_filesÚ
created_atÚright)r(   rˆ   )Ú
alignments)rs   rt   r   r   rG   Úrstripr   Úlist_bucketsr‡   ri   r3   r(   rˆ   r‰   r   Útable)	r�   r   r)   r}   r~   rk   rw   Úbucketr9   s	            r    rƒ   rƒ   e  sõ   € ñ Ü× Ñ Ð!JÓKÐKÙÜ× Ñ Ð!OÓPÐPð Ð ×!5Ñ!5´mÔ!DØœc¤-Ó0Ð2Ð3ˆ	à×$Ñ$ SÓ)ˆ	ä
˜5Ô
!€Cð ×&Ñ&°À6Ð&ÓJö	ð ð —)‘)Ø—~‘~ÙAO”L §¡¨nÔ=ÐU[×U`ÑU`Ø!×-Ñ-Ø ×+Ñ+ó	
ð	€Eð 	ô ‡I�Iˆe¨ÀÑ IÖJùò	s   Â
AD c           
      ó  — |r6t         j                  t        j                  k(  rt	        j
                  d«      ‚t        |¬«      }	 t        | «      \  }}t        |j                  ||xs d|¬«      «      }	|	st        j                  d«       yt        d„ |	D «       «      }
|rAt         j                  t        j                  k(  }t        |	||¬«      D ]  }t!        |«       Œ �nZt         j                  t        j                  k(  r9t!        t        j"                  |	D �cg c]  }t%        |«      ‘Œ c}d¬	«      «       �n t         j                  t        j                  k(  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
�«       ŒJt1        |j2                  |«      }t-        |j4                  |«      }t!        |d›d|d›d|j*                  › �«       Œ– |s|
rt        j6                  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©rd   r~   z(empty)c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)rE   r   )Ú.0rJ   s     r    ú	<genexpr>z_list_files.<locals>.<genexpr>¨  s   è ø€ ÒK¸Tœ* T¬<×8ÑKùs   ‚)r)   r:   r@   )rU   r<   r6   z>12rX   z>19z!Use -R to list files recursively.)r   Úmoder   Újsonrs   rt   r   r'   r&   r1   ÚlistÚlist_bucket_treeÚtextÚanyr:   rS   ÚprintÚdumpsr   rE   r   r   r8   Úuploaded_atr3   r(   r4   Úhint)r#   r)   r}   r~   rk   rw   rh   rd   ry   r9   Úhas_directoriesr:   ÚlinerJ   Ú	mtime_strrP   s                   r    r‚   r‚   ˆ  s,  € ñ ”3—8‘8Ô3×8Ñ8Ò8Ü× Ñ Ð!HÓIÐIä
˜5Ô
!€Cð)Ü2°8Ó<Ñˆ	�6ô
 Ø×ÑØØ’>˜TØð 	ó 	
ó€Eñ Ü�‰�ÔØäÑKÀUÔKÓK€Oáä—‘Ô0×6Ñ6Ñ6ˆÜ °nÈEÔRò 	ˆDÜ�$�Kò	ä	�‰Ô)×.Ñ.Ò	.ÜŒd�j‰j¸uÖE°tÔ,¨TÕ2ÒEÈaÔPÖQÜ	�‰Ô)×/Ñ/Ò	/Øò 	!ˆDÜ˜$¤Ô-Ü˜Ÿ™˜ 1�oÕ&ä�d—i‘iÕ ñ		!ð ò 	GˆDÜ˜$¤Ô-Ü)¨$×*:Ñ*:¸NÓK�	Ü˜˜C˜  9¨S /°°D·I±I°;¸aÐ@ÕAä'¨¯	©	°>ÓB�Ü)¨$¯*©*°nÓE�	Ü˜ #˜ b¨°3¨°r¸$¿)¹)¸ÐEÕFð	Gñ ™Ü�‰Ð4Õ5ð )ˆ9øôU ò )Ü× Ñ ¤ Q£Ó(Ð(ûð)üò0 Fs   ÁI ÄJÉ	JÉ!I?É?JÚ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                  |«      }t        j                  |d¬«       y# t        $ r#}t        j                  t        |«      «      ‚d}~ww xY w)zGet info about a bucket.rn   Nr‡   )Úid_key)	r   r'   r&   rs   rt   r1   Úbucket_infor   Údict)rh   rk   rl   rw   rx   Ú_ry   r�   s           r    r£   r£   Æ  sf   € ô$ ˜5Ô
!€Cð)Ü-¨iÓ8‰ˆ	�1ð �_‰_˜YÓ'€FÜ‡H�HˆV˜DÖ!øô	 ò )Ü× Ñ ¤ Q£Ó(Ð(ûð)ús   ŽA Á	A1ÁA,Á,A1Ú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                  | |¬«       t        j                  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)rh   )r   r   r'   r&   rs   rt   r1   r   Úconfirmr   Údelete_bucketrv   )	rh   rª   r«   rk   rl   rx   rd   ry   rw   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Ü‡J�JÐ¨9Ö5øô% ò 	-Ü×$Ñ$¤S¨£VÓ,Ð,ûð	-ús   —C  Ã 	C,Ã	C'Ã'C,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        t        j                  t        j                  k(  ¬«      }|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t        j0                  d«       yt#        |«      › d|› �}|sK|sIt        j0                  dj3                  d„ |D «       «      «       t        j4                  d|› d‰› d�d¬«       |rGt        j0                  dj3                  ˆfd„|D «       «      «       t        j0                  d|› d�«       y|
j7                  ‰|¬«       t        j8                  d|› d‰› d �‰t#        |«      |¬!«       y|j                  d
«      }|st        j                  d"«      ‚|r7t        j0                  d#t:        › ‰› d
|› �«       t        j0                  d$«       yt        j4                  d%|› d&‰› d�|¬«       |
j7                  ‰|g¬«       t        j8                  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.
    Nr6   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˜Ÿ�Ñ7ùs   ‚)r)   zNo files to remove.z file(s) totaling ú
c              3   ó&   K  — | ]	  }d |› �–— Œ y­w)rX   N© )r”   r   s     r    r•   zremove.<locals>.<genexpr>�  s   è ø€ ÒB¨t  D 6œ{ÑBùs   ‚zRemove z from 'r­   Fr®   c              3   ó:   •K  — | ]  }d t         › ‰› d|› �–— Œ y­w)údelete: r<   N)r   )r”   r   rh   s     €r    r•   zremove.<locals>.<genexpr>”  s#   øè ø€ ÒcÐPT ¬-¨¸¸À1ÀTÀFÔKÑcùs   ƒz
(dry run) z would be removed.)r©   zRemoved ú')rh   Úfiles_deletedr(   zFile path cannot be empty.r¾   z"(dry run) 1 file would be removed.zRemove 'z' from 'zFile removed)r   rh   )r'   r&   rs   rt   r1   r   r   r   r–   r   ÚhumanÚupdater™   rŒ   rE   r   r\   rG   Údoner	   Úmatchesr   Úsumr3   rš   Újoinr¯   Úbatch_bucket_filesrv   r   )r#   r~   rª   r±   r²   r³   rk   rl   rd   ry   rw   ÚstatusÚ	all_filesrJ   Úmatcherr¹   Úmatched_filesÚ
file_pathsÚ
total_sizerP   Úcount_labelÚ	file_pathrh   s                         @r    ÚremoverÐ   !  sB  ø€ ð|)Ü2°8Ó<Ñˆ	�6ð �‚|™IÜ× Ñ ðØ �kð "DØDMÀ;ÈbðRó
ð 	
ñ 	‘7¡IÜ× Ñ Ð!OÓPÐPä
˜5Ô
!€CâÜ¤C§H¡HÔ0D×0JÑ0JÑ$JÔKˆØ�‰Ð1Ô2à&(ˆ	Ø×(Ñ(ØØ—=‘= Ó%Ò-¨Øð )ó 
ò 	UˆDô
 ˜$¤
Õ+Ø× Ñ  Ô&Ø—‘Ð ;¼CÀ	»NÐ;KÈ7ÐSÕTð	Uð 	�‰Ð1´#°i³.Ð1AÀÐIÔJá‘gÜ#°WÈwÔWˆGØ(1ÖM 1°W·_±_ÀQÇVÁVÕ5LšQÐMˆMÑMà%ˆMà&3Ö4 �a—f“fÐ4ˆ
Ð4ÜÑ7¨Ô7Ó7ˆ
Ü 
¸4Ô@ˆáÜ�H‰HÐ*Ô+Øä˜Z›Ð)Ð);¸H¸:ÐFˆá™7Ü�H‰H�T—Y‘YÑB°zÔBÓBÔCÜ�K‰K˜' + ¨g°i°[ÀÐCÈÕOáÜ�H‰H�T—Y‘YÓcÐXbÔcÓcÔdÜ�H‰H�z + Ð.@ÐAÔBØà×Ñ˜y°ÐÔ<Ü�
‰
Ø�{�m 7¨9¨+°QÐ7ØÜ˜j›/Øö		
ð —M‘M #Ó&ˆ	ÙÜ×$Ñ$Ð%AÓBÐBáÜ�H‰H�x¤˜¨y¨k¸¸9¸+ÐFÔGÜ�H‰HÐ9Ô:Øä�‰�h˜y˜k¨°)°¸BÐ?ÀSÕIà×Ñ˜y°)°ÐÔ=Ü�
‰
�>¨	¸YÖGøôY ò )Ü× Ñ ¤ Q£Ó(Ð(ûð)üò@ Nùò 5s)   ƒM Ä; M3ÅM3Å)M8Í	M0ÍM+Í+M0Ú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                 ó2  — t        | «      \  }}|r t        j                  d| › dt        › d�«      ‚t        |«      \  }}|r t        j                  d|› dt        › d�«      ‚t	        |¬«      }|j                  ||¬«       t        j                  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 movedN)r'   rs   rt   r   r   Úmove_bucketr   rv   )	rÒ   rÓ   rk   rl   Úparsed_from_idÚfrom_prefixÚparsed_to_idÚ	to_prefixrw   s	            r    rÑ   rÑ   °  s±   € ô4 #9¸Ó"AÑ€N�KÙÜ× Ñ Ø7¸°yð A-Ü-:¨OÐ;QðSó
ð 	
ô 5°UÓ;Ñ€L�)ÙÜ× Ñ Ø7¸°wð ?-Ü-:¨OÐ;QðSó
ð 	
ô
 ˜5Ô
!€CØ‡O�O˜N°,€OÔ?Ü‡J�Jˆ~ ~¸\ÖJr"   Ú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                  | ||||||||	|
|||||¬«       |r|st        j                  d|› d�«       yy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:   zRun `hf buckets sync --apply z` to execute this plan.N)r   Úsync_bucketr   rŸ   )rÛ   rÜ   r©   rÝ   rÞ   rß   rà   r±   r²   r³   rá   râ   rã   rä   r:   rk   rw   s                    r    rÚ   rÚ   ã  sr   € ôh ˜5Ô
!€CØ‡O�OØØØØ!Ø!ØØ'ØØØØØØØØð ô ñ" ‘EÜ�‰Ð0°°Ð6MÐNÕOð €tr"   Ú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(  }
|r.|r,	 |j                  | |«       t        j                  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èt7        «        y|€|}nrt        j                  j                  |«      s0|j                  t        j8                  «      s|j                  d
«      r!t        j                  j'                  ||«      }n|}t        j                  j;                  |«      }|rt        j<                  |d¬«       |j)                  |||fg«       t        j                  d| |¬«       yy|	ret        |«      \  }}t.        j>                  j2                  j-                  «       }|jA                  |||fg¬«       t        j                  dd|¬«       yt        j                  jC                  | «      st        j                  d| › �«      ‚t        |«      \  }}|d	k(  r t        j                  jE                  | «      }n6|j                  d
«      r#|t        j                  jE                  | «      z   }n|}|jA                  || |fg¬«       t        j                  d| tF        › |› d
|› �¬«       y# t        $ r#}t        j                  t        |«      «      ‚d}~ww xY w# 1 sw Y   �ŒmxY w# 1 sw Y   �ŒrxY w# |st7        «        w w xY w)zCopy files to or from buckets.rn   Nú-ÚCopied)rè   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.r6   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)rj   Ú
Downloaded)ÚaddÚUploadedÚstdinzSource file not found: )$r   r!   r
   Ú
copy_filesr&   rs   rt   r1   r   rv   r   ÚendswithÚosr   ÚisdirÚrsplitr   r   r   rÆ   Údownload_bucket_filesÚopenÚreadÚsysÚstdoutÚbufferÚwriter   ÚsepÚdirnameÚmakedirsrñ   rÇ   ÚisfileÚbasenamer   )rè   ré   rk   rl   rw   Ú	src_is_hfÚ	dst_is_hfÚsrc_is_bucketÚdst_is_bucketÚsrc_is_stdinÚdst_is_stdoutry   r¨   rd   rh   ÚfilenameÚpbar_was_disabledÚtmp_dirÚtmp_pathr¹   ÚchunkÚ
local_pathÚ
parent_dirÚremote_pathÚdatas                            r    rç   rç   r  sQ  € ô4 ˜5Ô
!€Cä˜cÓ"€IØ˜4�Ò6¤M°#Ó$6€IÜ# CÓ(€MØ˜t�OÒ<¬¸Ó(<€MØ˜#‘:€LØ˜3‘J€Mñ ‘Yð	-Ø�N‰N˜3 Ô$ô 	�
‰
�8 ¨#Õ.Øñ ¡±|Øˆ;Ü×$Ñ$Ð%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à×%Ñ% i°6¸:Ð2FÐ1GÔHÜ�J‰J�|¨°*Ö=ð# )ñ& 
ä!3°CÓ!8Ñˆ	�;Ü�y‰y×Ñ×$Ñ$Ó&ˆà×Ñ˜y°°kÐ/BÐ.CÐÔDÜ�
‰
�: 7°Ö4ô �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à×Ñ˜y°°[Ð/AÐ.BÐÔCÜ�
‰
�: 3¬}¨o¸i¸[ÈÈ+ÈÐ,WÖXøôw ò 	-Ü×$Ñ$¤S¨£VÓ,Ð,ûð	-ú÷Z;ñ ;ú÷;ñ ;ûñ )Ü(Õ*ð )úsV   ÁR Ç
S$ ÇASÈAS
ÉSÉ'S$ Ò	SÒ$SÓSÓ
S	ÓSÓS!ÓS$ Ó$S3)F)FF)r   r   F)NNFFFNNFNNNFFFFN)BÚ__doc__r—   rô   rú   r   Útypingr   rs   Úhuggingface_hubr   Úhuggingface_hub._bucketsr   r   r   r	   r
   r   r   Úhuggingface_hub.utilsr   r   r   r   r   Ú
_cli_utilsr   r   r   r   r   r   Ú_outputr   r   Ú
get_loggerÚ__name__ÚloggerÚbuckets_clir1   Úboolr!   Útupler'   ÚintÚfloatr3   r8   r˜   rS   r§   rH   ÚcommandÚautoÚArgumentÚOptionrf   r|   r…   rƒ   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 ×ÑØ	òð ó 	ð. 	ð 	ØØ 4× 9Ñ 9ñ-,OØØØˆ�‰Øgô	
ð	ñð,Oð ØØˆ�‰ØØ+ô	
ð	ñð,Oð ØØˆ�‰ØØFô	
ð	ñð,Oð* ð+,Oð, ð-,Oð. 
ò/,Oó	ð,Oð^˜Cð  Dó ð ×ÑØ	òð ó ð0 	ð 	ð 	ð 	ØØØ 4× 9Ñ 9ñG?
ØØˆd‰
Øˆ�‰ðWô	
ð	ñð?
ð ØØˆ�‰ØØØ7ô	
ð	ñð?
ð$ ØØˆ�‰ØØFô	
ð	ñð%?
ð2 ØØˆ�‰ØØØCô	
ð	ñð3?
ðB ðC?
ðD ðE?
ðF ðG?
ðH 
òI?
óð?
ðD KØ�T‰zð Kà�$‰Jð Kð ð Kð ð	 Kð
 ð Kð �‰:ð Kð 
ó KðF;6Øð;6àð;6ð ð;6ð ð	;6ð
 �‰:ð;6ð 
ó;6ð| ×ÑØ	à(Ø5ðð ó ð Ø 4× 9Ñ 9ñ"ØØØˆ�‰ØYô	
ð	ñð"ð ð"ð ð"ð 
ò"óð"ð, ×ÑØ	òð ó ð. 	ð 	ØØ 4× 9Ñ 9ñ/26ØØØˆ�‰ØYô	
ð	ñð26ð 
ØØˆ�‰ØØØ,ô	
ð	ñ
ð26ð ØØˆ�‰ØØFô	
ð	ñð26ð, ð-26ð. ð/26ð0 
ò126óð26ðj ×ÑØ	òð ó 	ð6 	ð 	ð 	ð 	ð 	ØØ 4× 9Ñ 9ñ]BHØØØˆ�‰ðaô	
ð	ñðBHð ØØˆ�‰ØØØCô	
ð	ñðBHð$ 
ØØˆ�‰ØØØ,ô	
ð	ñ
ð%BHð4 ØØˆ�‰ØØKô	
ð	ñð5BHðB ØˆS‰	�DÑØˆ�‰Ødô	
ð	ñðCBHðN ØˆS‰	�DÑØˆ�‰Ø_ô	
ð	ñðOBHðZ ð[BHð\ ð]BHð^ 
ò_BHó	ðBHðJ ×ÑØ	òð ó ð* Ø 4× 9Ñ 9ñ#KØØØˆ�‰Ø`ô	
ð	ñð#Kð ØØˆ�‰Øeô	
ð	ñð#Kð ð#Kð ð#Kð 
ò#Kóð#KðV ×ÑØ	ò	ð ó ð& 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ØñIzPØØˆd‰
Øˆ�‰Ø^ô	
ð	ñðzPð Øˆd‰
Øˆ�‰Øcô	
ð	ñðzPð ØØˆ�‰ØBô	
ð	ñðzPð& ØØˆ�‰ØØNô	
ð	ñð'zPð4 ØØˆ�‰ØØOô	
ð	ñð5zPðB Øˆd‰
Øˆ�‰ØPô	
ð	ñðCzPðN Øˆd‰
Øˆ�‰Ø6ô	
ð	ñðOzPðZ ØØˆ�‰ØØHô	
ð	ñð[zPðh ØˆS‰	�DÑØˆ�‰ØIô	
ð	ñðizPðt ØˆS‰	�DÑØˆ�‰ØIô	
ð	ñðuzPð@ Øˆd‰
Øˆ�‰Ø;ô	
ð	ñðAzPðL ØØˆ�‰ØØTô	
ð	ñðMzPðZ ØØˆ�‰ØØVô	
ð	ñð[zPðh ØØˆ�‰ØØØ8ô	
ð	ñðizPðx ØØˆ�‰ØØØ"ô	
ð	ñðyzPðH ðIzPðJ 
òKzPóðzPðD ×ÑØ	òð ó ð* 	ØØ 4× 9Ñ 9ñsYØ	Øˆ^ˆU�^‰^Ð!pÔqÐqñ
ðsYð 
Øˆd‰
�N�E—N‘NÐ(jÔkÐkñ
ð	sYð ðsYð ðsYð 
òsYóñsYr"   