o
    2j1                     @   s  d Z ddlZddlZddlZddlmZ ddlZddlmZm	Z	 ddl
mZ ddlmZm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 e	eZg dZ													d*dedeedB ej ddf deedB ej ddf dedededee!e dB ej"ddf dee!e dB ej"ddf dee!e dB ej"ddf deedB ej"ddf deedB ej"ddf d ee#ej"d!df d"ee$dB ej"d#df d$ed%dfd&d'Z%dededB dedB de!e dB d%e&eee!e dB f f
d(d)Z'dS )+a  Contains command to upload a repo or file with the CLI.

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

    # Upload file (explicit)
    hf 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.
    hf upload my-cool-model

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

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

    # Upload with wildcard
    hf upload my-cool-model "./model/training/*.safetensors"

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

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

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

    # Schedule commits every 30 minutes
    hf upload Wauplin/my-cool-model --every=30

    # Upload using an hf:// URI (repo type, revision and path in repo are read from the URI)
    hf upload hf://datasets/Wauplin/my-cool-dataset@my-branch/data/train.csv ./train.csv
    N)	Annotated)	constantslogging)CommitScheduler)CLIErrorRevisionNotFoundError)parse_hf_uri   )
PrivateOpt	RepoIdArgRepoTypeRepoTypeOptionalOptRevisionOptTokenOpt
get_hf_api)out)zhf upload my-cool-model . .z:hf upload Wauplin/my-cool-model ./models/model.safetensorszChf upload Wauplin/my-cool-dataset ./data /train --repo-type=datasetzrhf upload Wauplin/my-cool-model ./models . --commit-message="Epoch 34/50" --commit-description="Val accuracy: 68%"z?hf upload bigcode/the-stack . . --repo-type dataset --create-prFrepo_id
local_pathzkLocal path to the file or folder to upload. Wildcard patterns are supported. Defaults to current directory.)helppath_in_repoz\Path of the file or folder in the repo. Defaults to the relative path of the file or folder.	repo_typerevisionprivateincludez'Glob patterns to match files to upload.excludez.Glob patterns to exclude from files to upload.deletezDGlob patterns for file to be deleted from the repo while committing.commit_messagez9The summary / title / first line of the generated commit.commit_descriptionz(The description of the generated commit.	create_prz0Whether to upload content as a new Pull Request.everyzNIf set, a background job is scheduled to create commits every `every` minutes.tokenreturnc                    s$  durdkrt jdddtjrZ|dur!td ddur-td dt}|jr8td	|j|j	|j
	|jrY|durVtd
|j d| d|j}n|p^tjj	t|d t|||d\
dtf 	
fdd}| }tjd|d dS )zLUpload a file or a folder to the Hub. Recommended for single-commit uploads.Nr   z --every must be a positive valuer   )
param_hintz3'--repo-type' cannot be used with an 'hf://' URI ('z').z2'--revision' cannot be used with an 'hf://' URI ('z@Buckets are not supported by `hf upload`. Use `hf sync` instead.z)Cannot combine a path in the hf:// URI ('z&') with the `path_in_repo` argument (')r    )r   r   r   r   r!   c                     s6  t jr8
d urt
dkrt
trtd d ur)tdkr)td d ur8tdkr8td d urt jr^t j} 	rVd t  n}g}g }n} }
}}d urutdkrutd t
| 	||| d
}td d|j d	 z	 td q ty   |  Y dS w t jst jstd d j	d
	dkrdnd dj}d ursz
 j|	d W n ty   td d  j|	d
d Y nw t jr j|	dS  j|	
dS )Nr   z3Ignoring --include since a single file is uploaded.z3Ignoring --exclude since a single file is uploaded.z2Ignoring --delete since a single file is uploaded.z8Ignoring --delete when uploading with scheduled commits.)
folder_pathr   r   r   allow_patternsignore_patternsr   r   r   hf_apizScheduling commits every z minutes to .Td   zStopped scheduled commits.zNo such file or directory: 'z'.spacegradio)r   r   exist_okr   	space_sdk)r   r   r   zBranch 'z' not found. Creating it...)r   r   branchr+   )path_or_fileobjr   r   r   r   r   r   r   )r#   r   r   r   r   r   r   r   r$   r%   delete_patterns)ospathisfilelen
isinstancelistwarningswarndirnameendswithr   r   textr   timesleepKeyboardInterruptstopisdirFileNotFoundErrorcreate_repo	repo_infor   loggerinfocreate_branchupload_fileupload_folder)r#   pir$   r%   	schedulercreatedapir   r   r   r   r   r   r   r   repo_type_strresolved_includeresolved_local_pathresolved_path_in_repor    U/var/www/html/whisper/venv/lib/python3.10/site-packages/huggingface_hub/cli/upload.py
run_upload   s   




zupload.<locals>.run_uploadUploaded)url)typerBadParameter
startswithr   HF_PROTOCOLr   r   	is_bucketidtyper   r   r   modelvaluer   _resolve_upload_pathsstrr   result)r   r   r   r   r   r   r   r   r   r   r   r   r   r    urirS   ra   rQ   rK   rR   uploadW   s4   ?
,erc   c                    s   |  dd }|} d ur2t fdddD r2|d ur td|d ur,|dkr,tdd dgfS  d u rAtj|rA|||fS  d u rPtj|rP|d|fS  d u r\td	| d
|d u rotj ro tj |fS |d u rx d|fS  ||fS )N/c                 3   s    | ]}| v V  qd S )NrQ   ).0cr   rQ   rR   	<genexpr>'  s    z(_resolve_upload_paths.<locals>.<genexpr>)*?[z9Cannot set --include when local_path contains a wildcard.r'   z<Cannot set path_in_repo when local_path contains a wildcard.'zB' is not a local file or folder. Please set local_path explicitly.)splitany
ValueErrorr0   r1   r2   r?   basename)r   r   r   r   	repo_namerN   rQ   rh   rR   r_   !  s&   



r_   )NNNNNNNNNNFNN)(__doc__r0   r;   r6   typingr   rV   huggingface_hubr   r   !huggingface_hub._commit_schedulerr   huggingface_hub.errorsr   r   huggingface_hub.utilsr   
_cli_utilsr
   r   r   r   r   r   r   _outputr   
get_logger__name__rC   UPLOAD_EXAMPLESr`   Argumentr5   Optionboolfloatrc   tupler_   rQ   rQ   rQ   rR   <module>   s   %$	



#)/5;<
 K
