o
    Zh65                     @   s   d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZ eeZG dd deZdS )a  Contains command to upload a repo or file with the CLI.

Usage:
    # Upload file (implicit)
    huggingface-cli upload my-cool-model ./my-cool-model.safetensors

    # Upload file (explicit)
    huggingface-cli upload my-cool-model ./my-cool-model.safetensors  model.safetensors

    # Upload directory (implicit). If `my-cool-model/` is a directory it will be uploaded, otherwise an exception is raised.
    huggingface-cli upload my-cool-model

    # Upload directory (explicit)
    huggingface-cli upload my-cool-model ./models/my-cool-model .

    # Upload filtered directory (example: tensorboard logs except for the last run)
    huggingface-cli upload my-cool-model ./model/training /logs --include "*.tfevents.*" --exclude "*20230905*"

    # Upload private dataset
    huggingface-cli upload Wauplin/my-cool-dataset ./data . --repo-type=dataset --private

    # Upload with token
    huggingface-cli upload Wauplin/my-cool-model --token=hf_****

    # Sync local Space with Hub (upload new files, delete removed files)
    huggingface-cli upload Wauplin/space-example --repo-type=space --exclude="/logs/*" --delete="*" --commit-message="Sync local Space with Hub"

    # Schedule commits every 30 minutes
    huggingface-cli upload Wauplin/my-cool-model --every=30
    N)	Namespace_SubParsersAction)ListOptional)logging)CommitScheduler)BaseHuggingfaceCLICommand)HF_HUB_ENABLE_HF_TRANSFER)HfApi)RevisionNotFoundErrordisable_progress_barsenable_progress_barsc                   @   sH   e Zd ZedefddZdeddfddZdd	d
Zde	fddZ
dS )UploadCommandparserc                 C   s  | j ddd}|jdtdd |jddd	d
 |jdddd
 |jdg dddd |jdtdd |jdddd |jddtdd |jddtdd |jddtdd |jd td!d |jd"td#d |jd$dd%d |jd&td'd |jd(td)d |jd*dd+d |jtd, d S )-NZuploadz.Upload a file or a folder to a repo on the Hub)helprepo_idz<The ID of the repo to upload to (e.g. `username/repo-name`).)typer   
local_path?zJLocal path to the file or folder to upload. Defaults to current directory.)nargsr   path_in_repoz\Path of the file or folder in the repo. Defaults to the relative path of the file or folder.z--repo-type)modelZdatasetspacer   z/Type of the repo to upload to (e.g. `dataset`).)choicesdefaultr   z
--revisionzAn optional Git revision to push to. It can be a branch name or a PR reference. If revision does not exist and `--create-pr` is not set, a branch will be automatically created.z	--private
store_truezfWhether to create a private repo if repo doesn't exist on the Hub. Ignored if the repo already exists.)actionr   z	--include*z'Glob patterns to match files to upload.)r   r   r   z	--excludez.Glob patterns to exclude from files to upload.z--deletezDGlob patterns for file to be deleted from the repo while committing.z--commit-messagez9The summary / title / first line of the generated commit.z--commit-descriptionz(The description of the generated commit.z--create-prz0Whether to upload content as a new Pull Request.z--everyzNIf set, a background job is scheduled to create commits every `every` minutes.z--tokenzIA User Access Token generated from https://huggingface.co/settings/tokensz--quietzWIf True, progress bars are disabled and only the path to the uploaded files is printed.)func)
add_parseradd_argumentstrfloatset_defaultsr   )r   Zupload_parser r$   V/var/www/html/lang_env/lib/python3.10/site-packages/huggingface_hub/commands/upload.pyregister_subcommand@   sv   z!UploadCommand.register_subcommandargsreturnNc                 C   sx  |j | _ |j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j	| _	t
|jdd| _|j| _|jd urG|jdkrGtd|j d|j| _|j dd }|  |  |jd u rjtj|rj|| _|| _d S |jd u r}tj|r}|| _d| _d S |jd u rtd	| d
|jd u rtj|jr|j| _tj|j| _d S |jd u r|j| _d| _d S |j| _|j| _d S )Nzhuggingface-cli)tokenZlibrary_namer   z'`every` must be a positive value (got 'z')/.'zD' is not a local file or folder. Please set `local_path` explicitly.)r   	repo_typerevisionprivateincludeexcludedeletecommit_messagecommit_description	create_prr
   r)   apiquietevery
ValueErrorsplitr   ospathisfiler   isdirbasename)selfr'   	repo_namer$   r$   r%   __init__   sD   




zUploadCommand.__init__c                 C   st   | j r*t  t  td t|   W d    n1 s w   Y  t  d S t	  t|   t
  d S )Nignore)r8   r   warningscatch_warningssimplefilterprint_uploadr   r   Zset_verbosity_infoZset_verbosity_warning)rA   r$   r$   r%   run   s   


zUploadCommand.runc                 C   s  t j| jr:| jd urt| jdkrtd | jd ur)t| jdkr)td | j	d ur:t| j	dkr:td t
sAtd | jd urt j| jrpt j| j}| j| jrf| jd t| j  n| j}| jg}g }n!| j}| j}| jpzg }| jpg }| j	d urt| j	dkrtd t|| j| j| j|||| j| j| jd
}td| j d	|j d
 z	 td q ty   |  Y dS w t j| jst j| jstd| j d| jj| j| jd| j| jdkrdnd dj}| jd ur-| js-z| jj || j| jd W n  t!y,   td| j d | jj"|| j| jdd Y nw t j| jrJ| jj#| j| j|| j| j| j$| j%| jdS | jj&| j| j|| j| j| j$| j%| j| j| j| j	dS )Nr   z5Ignoring `--include` since a single file is uploaded.z5Ignoring `--exclude` since a single file is uploaded.z4Ignoring `--delete` since a single file is uploaded.zConsider using `hf_transfer` for faster uploads. This solution comes with some limitations. See https://huggingface.co/docs/huggingface_hub/hf_transfer for more details.z:Ignoring `--delete` when uploading with scheduled commits.)
folder_pathr   r.   r/   allow_patternsignore_patternsr   r0   r9   Zhf_apizScheduling commits every z minutes to r,   Td   zStopped scheduled commits.zNo such file or directory: 'z'.r   Zgradio)r   r.   exist_okr0   Z	space_sdk)r   r.   r/   zBranch 'z' not found. Creating it...)r   r.   branchrO   )Zpath_or_fileobjr   r   r.   r/   r4   r5   r6   )rK   r   r   r.   r/   r4   r5   r6   rL   rM   Zdelete_patterns)'r<   r=   r>   r   r1   lenrE   warnr2   r3   r	   loggerinfor9   dirnamer   endswithr   r   r.   r/   r0   r7   rH   timesleepKeyboardInterruptstopr?   FileNotFoundErrorZcreate_repor6   Z	repo_infor   Zcreate_branchZupload_filer4   r5   Zupload_folder)rA   rK   r   rL   rM   Z	schedulerr   r$   r$   r%   rI      s   







zUploadCommand._upload)r(   N)__name__
__module____qualname__staticmethodr   r&   r   rC   rJ   r!   rI   r$   r$   r$   r%   r   ?   s    C
2r   )__doc__r<   rW   rE   argparser   r   typingr   r   Zhuggingface_hubr   Z!huggingface_hub._commit_schedulerr   Zhuggingface_hub.commandsr   Zhuggingface_hub.constantsr	   Zhuggingface_hub.hf_apir
   Zhuggingface_hub.utilsr   r   r   Z
get_loggerr\   rS   r   r$   r$   r$   r%   <module>   s   
