U
    +-e0                     @   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m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)HfApi)disable_progress_barsenable_progress_barsc                   @   sJ   e Zd ZeedddZeddddZddd	d
Ze	d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dddg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 ).N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spacez/Type of the repo to upload to (e.g. `dataset`).)choicesdefaultr   z
--revisionzPAn optional Git revision id which can be a branch name, a tag, or a commit hash.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#   `/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/huggingface_hub/commands/upload.pyregister_subcommand;   s                 z!UploadCommand.register_subcommandN)argsreturnc                 C   sz  |j | _ |j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j	| _	t
|jdd| _|j| _|jd k	r|jdkrtd|j d|j| _|j dd }|  |  |jd krtj|r|| _|| _n|jd krtj|r|| _d| _n|jd krtd	| d
nb|jd krJtj|jrJ|j| _tj|j| _n,|jd krf|j| _d| _n|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__)r'   c              	   C   s^   | j r>t  t  td t|   W 5 Q R X t  nt	  t|   t
  d S )Nignore)r7   r
   warningscatch_warningssimplefilterprint_uploadr   r   Zset_verbosity_infoZset_verbosity_warning)r@   r#   r#   r$   run   s    

zUploadCommand.runc                 C   sd  t j| jrt| jd k	r0t| jdkr0td | jd k	rRt| jdkrRtd | j	d k	rtt| j	dkrttd | j
d k	rt j| jrt j| j}| j| jr| jd t| j  n| j}| jg}g }nF| j}| j}| jpg }| jpg }| j	d k	rt| j	dkrtd t|| j| j| j|||| j| j
| jd
}td| j
 d|j d	 ztd
 q^W n  tk
r   |  Y dS X t j| jst j| jstd| j d| jj| j| jd| j| jdkrdnd dj}t j| jr*| 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 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.z:Ignoring `--delete` when uploading with scheduled commits.)
folder_pathr   r-   r.   allow_patternsignore_patternsr   r/   r8   Zhf_apizScheduling commits every z minutes to r+   d   zStopped scheduled commits.zNo such file or directory: 'z'.Tr   Zgradio)r   r-   exist_okr/   Z	space_sdk)Zpath_or_fileobjr   r   r-   r.   r3   r4   r5   )rJ   r   r   r-   r.   r3   r4   r5   rK   rL   Zdelete_patterns)!r;   r<   r=   r   r0   lenrD   warnr1   r2   r8   dirnamer   endswithr   r   r-   r.   r/   r6   rG   timesleepKeyboardInterruptstopr>   FileNotFoundErrorZcreate_repoZupload_filer3   r4   r5   Zupload_folder)r@   rJ   r   rK   rL   Z	schedulerr   r#   r#   r$   rH      s    





 zUploadCommand._upload)__name__
__module____qualname__staticmethodr   r%   r   rB   rI   r    rH   r#   r#   r#   r$   r   :   s
   @2r   )__doc__r;   rS   rD   argparser   r   typingr   r   Zhuggingface_hubr   Z!huggingface_hub._commit_schedulerr   Zhuggingface_hub.commandsr   Zhuggingface_hub.hf_apir	   Zhuggingface_hub.utilsr
   r   r   r#   r#   r#   r$   <module>   s   