o
    hq                     @   s@  d Z ddl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mZmZ dd
lmZmZmZ ddlmZmZ eeZzddlmZ ddlm Z  dZ!W n e"yf   dZ!Y nw 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(G dd de$Z)dS ) aD  Contains commands to authenticate to the Hugging Face Hub and interact with your repositories.

Usage:
    # login and save token locally.
    huggingface-cli login --token=hf_*** --add-to-git-credential

    # switch between tokens
    huggingface-cli auth switch

    # list all tokens
    huggingface-cli auth list

    # logout from a specific token, if no token-name is provided, all tokens will be deleted from your machine.
    huggingface-cli logout --token-name=your_token_name

    # find out which huggingface.co account you are logged in as
    huggingface-cli whoami
    )_SubParsersAction)ListOptional)	HTTPError)BaseHuggingfaceCLICommand)ENDPOINT)HfApi   )	auth_listauth_switchloginlogout)get_stored_tokens	get_tokenlogging   )ANSIshow_deprecation_warning)inquirerChoiceTFc                   @   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tdd |jdd d | j ddd}|jdd}|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 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"   Z/var/www/Befach/backend/venv/lib/python3.10/site-packages/huggingface_hub/commands/user.py<lambda>H       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$   J   r%   r   zLog outz--token-namez3Optional: Name of the access token to log out from.c                 S   r   r   )LogoutCommandr    r"   r"   r#   r$   R   r%   authz%Other authentication related commandszAuthentication subcommandsswitchzSwitch between access tokensz0Optional: Name of the access token to switch to.c                 S   r   r   )AuthSwitchCommandr    r"   r"   r#   r$   a   r%   listzList all stored access tokensc                 S   r   r   )AuthListCommandr    r"   r"   r#   r$   c   r%   )
add_parseradd_argumentstrset_defaultsadd_subparsers)r   login_parserwhoami_parserlogout_parserauth_parserauth_subparsersauth_switch_parserauth_list_parserr"   r"   r#   register_subcommand;   sJ   z UserCommands.register_subcommandN)__name__
__module____qualname__staticmethodr   r;   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__g   s   zBaseUserCommand.__init__N)r<   r=   r>   rD   r"   r"   r"   r#   rA   f       rA   c                   @   r@   )r   c                 C   s*   t dd t  t| jj| jjd d S )Nzhuggingface-cli loginzhf auth login)tokenadd_to_git_credential)r   r   set_verbosity_infor   r!   rF   rG   rC   r"   r"   r#   runm   s   

zLoginCommand.runNr<   r=   r>   rJ   r"   r"   r"   r#   r   l   rE   r   c                   @   r@   )r)   c                 C   s$   t dd t  t| jjd d S )Nzhuggingface-cli logoutzhf auth logout)
token_name)r   r   rH   r   r!   rL   rI   r"   r"   r#   rJ   x   s   
zLogoutCommand.runNrK   r"   r"   r"   r#   r)   w   rE   r)   c                   @   s@   e Zd Zdd Zdee fddZdee dee fddZd	S )
r,   c                 C   sT   t dd t  | jj}|d u r|  }|d u r td t  t|| jj	d d S )Nzhuggingface-cli auth switchzhf auth switchz!No token name provided. Aborting.)rG   )
r   r   rH   r!   rL   _select_token_nameprintexitr   rG   )rC   rL   r"   r"   r#   rJ      s   
zAuthSwitchCommand.runreturnc                 C   s   t t  }|std d S tr| |S td t|dD ]\}}t| d|  q 	 z,t	d}|
 dkr=W d S t|d }d|  krOt|k rVn n|| W S td	 W n tyh   td
 Y nw q/)Nz+No stored tokens found. Please login first.zAvailable stored tokens:r   z. Tz=Enter the number of the token to switch to (or 'q' to quit): qr   z$Invalid selection. Please try again.z4Invalid input. Please enter a number or 'q' to quit.)r-   r   keysloggererror_inquirer_py_available_select_token_name_tuirN   	enumerateinputlowerintlen
ValueError)rC   token_namesirL   choiceindexr"   r"   r#   rM      s,   


z$AuthSwitchCommand._select_token_namer]   c                 C   sD   dd |D }zt jd|d d W S  ty!   td Y d S w )Nc                 S   s   g | ]}t ||d qS )namer   ).0rL   r"   r"   r#   
<listcomp>   s    z<AuthSwitchCommand._select_token_name_tui.<locals>.<listcomp>zSelect a token to switch to:)messagechoicesdefaultzToken selection cancelled.)r   selectexecuteKeyboardInterruptrS   info)rC   r]   rf   r"   r"   r#   rV      s   
z(AuthSwitchCommand._select_token_name_tuiN)	r<   r=   r>   rJ   r   r1   rM   r   rV   r"   r"   r"   r#   r,      s    r,   c                   @   r@   )r.   c                 C   s   t dd t  t  d S )Nzhuggingface-cli auth listzhf auth list)r   r   rH   r
   rI   r"   r"   r#   rJ      s   

zAuthListCommand.runNrK   r"   r"   r"   r#   r.      rE   r.   c                   @   r@   )r(   c              
   C   s   t dd t }|d u rtd t  z7| j|}ttd|d  dd |d D }|r:ttd	d
| t	dkrHtdt	  W d S W d S  t
yn } zt| tt|jj td W Y d }~d S d }~ww )Nzhuggingface-cli whoamizhf auth whoamizNot logged inzuser: rb   c                 S   s   g | ]}|d  qS ra   r"   )rc   orgr"   r"   r#   rd      s    z%WhoamiCommand.run.<locals>.<listcomp>orgszorgs: ,zhttps://huggingface.coz(Authenticated through private endpoint: r   )r   r   rN   rO   rB   r'   r   boldjoinr   r   redresponsetext)rC   rF   rk   rm   er"   r"   r#   rJ      s(   
zWhoamiCommand.runNrK   r"   r"   r"   r#   r(      rE   r(   N)*__doc__argparser   typingr   r   requests.exceptionsr   huggingface_hub.commandsr   huggingface_hub.constantsr   huggingface_hub.hf_apir   _loginr
   r   r   r   utilsr   r   r   
_cli_utilsr   r   
get_loggerr<   rS   
InquirerPyr   InquirerPy.base.controlr   rU   ImportErrorr   rA   r   r)   r,   r.   r(   r"   r"   r"   r#   <module>   s2   
,5