o
    Zh                     @   s   d dl 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
mZ d dlmZ ddlmZmZmZmZmZmZ dd	lmZ d
dlmZ G dd deZG dd dZG dd deZG dd deZG dd deZG dd deZdS )    N)_SubParsersAction)	HTTPError)BaseHuggingfaceCLICommand)ENDPOINT
REPO_TYPESREPO_TYPES_URL_PREFIXESSPACES_SDK_TYPES)HfApi   )NOTEBOOK_LOGIN_PASSWORD_HTMLNOTEBOOK_LOGIN_TOKEN_HTML_ENDNOTEBOOK_LOGIN_TOKEN_HTML_STARTloginlogoutnotebook_login)	get_token   )ANSIc                   @   s   e Zd ZedefddZdS )UserCommandsparserc                 C   s
  | j ddd}|jdtdd |jddd	d
 |jdd d | j ddd}|jdd d | j ddd}|jdd d | j ddd}|jdd}|j ddd}|jdtdd |jdtdd |jdtdd |jdtd td! |jd"d#dd$d
 |jd%d d d S )&Nr   z8Log in using a token from huggingface.co/settings/tokens)helpz--tokenz;Token generated from https://huggingface.co/settings/tokens)typer   z--add-to-git-credential
store_truez.Optional: Save token to git credential helper.)actionr   c                 S      t | S N)LoginCommandargs r   T/var/www/html/lang_env/lib/python3.10/site-packages/huggingface_hub/commands/user.py<lambda>6       z2UserCommands.register_subcommand.<locals>.<lambda>)funcwhoamiz;Find out which huggingface.co account you are logged in as.c                 S   r   r   )WhoamiCommandr   r   r   r    r!   8   r"   r   zLog outc                 S   r   r   )LogoutCommandr   r   r   r    r!   :   r"   repoz={create} Commands to interact with your huggingface.co repos.z%huggingface.co repos related commandscreatez#Create a new repo on huggingface.conamezPName for your repo. Will be namespaced under your username to build the repo id.z--typezbOptional: repo_type: set to "dataset" or "space" if creating a dataset or space, default is model.z--organizationz!Optional: organization namespace.z--space_sdkzOOptional: Hugging Face Spaces SDK type. Required when --type is set to "space".)r   r   choicesz-yz--yesz"Optional: answer Yes to the promptc                 S   r   r   )RepoCreateCommandr   r   r   r    r!   W   r"   )
add_parseradd_argumentstrset_defaultsadd_subparsersr   )r   Zlogin_parserZwhoami_parserZlogout_parserZrepo_parserZrepo_subparsersZrepo_create_parserr   r   r    register_subcommand)   sV   z UserCommands.register_subcommandN)__name__
__module____qualname__staticmethodr   r1   r   r   r   r    r   (   s    r   c                   @      e Zd Zdd ZdS )BaseUserCommandc                 C   s   || _ t | _d S r   )r   r	   _api)selfr   r   r   r    __init__[   s   zBaseUserCommand.__init__N)r2   r3   r4   r:   r   r   r   r    r7   Z       r7   c                   @   r6   )r   c                 C   s   t | jj| jjd d S )N)tokenadd_to_git_credential)r   r   r<   r=   r9   r   r   r    runa   s   zLoginCommand.runNr2   r3   r4   r?   r   r   r   r    r   `   r;   r   c                   @   r6   )r&   c                 C   s
   t   d S r   )r   r>   r   r   r    r?   f   s   
zLogoutCommand.runNr@   r   r   r   r    r&   e   r;   r&   c                   @   r6   )r%   c              
   C   s   t  }|d u rtd t  z3| j|}t|d  dd |d D }|r1ttdd| tdkr?td	t  W d S W d S  t	ye } zt| tt
|jj td
 W Y d }~d S d }~ww )NNot logged inr)   c                 S   s   g | ]}|d  qS )r)   r   ).0orgr   r   r    
<listcomp>s   s    z%WhoamiCommand.run.<locals>.<listcomp>orgszorgs: ,zhttps://huggingface.coz(Authenticated through private endpoint: r   )r   printexitr8   r$   r   boldjoinr   r   redresponsetext)r9   r<   inforE   er   r   r    r?   k   s&   zWhoamiCommand.runNr@   r   r   r   r    r%   j   r;   r%   c                   @   r6   )r+   c           
   
   C   s$  t  }|d u rtd td ztddgd}tt|  W n t	y1   td Y nw ztddgd}tt|  W n t	yW   tt
d Y nw td	 | j|d
 }| jjd urn| jjn|}| d| jj }| jjtvrtd td | jjtv rt| jj | }n|}tdt|  | jjstd }|d	ks|dks|dkstd t  z| jj||| jj| jjd}W n# ty }	 zt|	 tt
|	jj td W Y d }	~	nd }	~	ww td tdt|  td td|  td	 d S )NrA   r   gitz	--versionzutf-8z9Looks like you do not have git installed, please install.zgit-lfszLooks like you do not have git-lfs installed, please install. You can install from https://git-lfs.github.com/. Then run `git lfs install` (you only have to do this once). r)   /zInvalid repo --typezYou are about to create zProceed? [Y/n] yyesZAbort)repo_idr<   Z	repo_type	space_sdkz
Your repo now lives at:z  zK
You can clone it locally with the command below, and commit/push as usual.z
  git clone )r   rG   rH   
subprocesscheck_outputdecoder   graystripFileNotFoundErrorrK   r8   r$   r   Zorganizationr)   r   r   r   rI   rT   inputlowerZcreate_reporV   r   rL   rM   )
r9   r<   stdoutuser	namespacerU   Zprefixed_repo_idchoiceurlrO   r   r   r    r?      sl   
zRepoCreateCommand.runNr@   r   r   r   r    r+      r;   r+   )rW   argparser   Zrequests.exceptionsr   Zhuggingface_hub.commandsr   Zhuggingface_hub.constantsr   r   r   r   Zhuggingface_hub.hf_apir	   Z_loginr   r   r   r   r   r   utilsr   Z
_cli_utilsr   r   r7   r   r&   r%   r+   r   r   r   r    <module>   s    2