U
    ”Ê¹j•  ã                   @   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 e e¡Zz ddlmZ ddlmZ dZ W n e!k
rÊ   dZ Y nX 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 ) a�  Contains commands to authenticate to the Hugging Face Hub and interact with your repositories.

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

    # switch between tokens
    hf auth switch

    # list all tokens
    hf auth list

    # logout from all tokens
    hf auth logout

    # check which account you are logged in as
    hf auth whoami
é    )Ú_SubParsersAction)ÚListÚOptional)Ú	HTTPError)ÚBaseHuggingfaceCLICommand)ÚENDPOINT)ÚHfApié   )Ú	auth_listÚauth_switchÚloginÚlogout)Úget_stored_tokensÚ	get_tokenÚloggingé   )ÚANSI)Úinquirer©ÚChoiceTFc                   @   s   e Zd Zeedœdd„ƒZdS )ÚAuthCommands)Úparserc                    s  | j ddd�‰ ˆ jdd�}ˆ j‡ fd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t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d� |jdd„ d� |j ddd�}|jd d„ d� d S )!NÚauthz,Manage authentication (login, logout, etc.).)ÚhelpzAuthentication subcommandsc                    s   ˆ   ¡ S ©N)Ú
print_help©Úargs©Zauth_parser© úW/var/www/html/bwave/python/venv/lib/python3.8/site-packages/huggingface_hub/cli/auth.pyÚ<lambda>B   ó    z2AuthCommands.register_subcommand.<locals>.<lambda>)Úfuncr   z8Log in using a token from huggingface.co/settings/tokensz--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   s   t | ƒS r   )Ú	AuthLoginr   r   r   r    r!   R   r"   r   zLog outz--token-namez3Optional: Name of the access token to log out from.c                 S   s   t | ƒS r   )Ú
AuthLogoutr   r   r   r    r!   [   r"   Úwhoamiz;Find out which huggingface.co account you are logged in as.c                 S   s   t | ƒS r   )Ú
AuthWhoamir   r   r   r    r!   a   r"   ÚswitchzSwitch between access tokensz0Optional: Name of the access token to switch to.c                 S   s   t | ƒS r   )Ú
AuthSwitchr   r   r   r    r!   o   r"   ÚlistzList all stored access tokensc                 S   s   t | ƒS r   )ÚAuthListr   r   r   r    r!   r   r"   )Ú
add_parserÚadd_subparsersÚset_defaultsÚadd_argumentÚstr)r   Zauth_subparsersZlogin_parserZlogout_parserZwhoami_parserZauth_switch_parserZauth_list_parserr   r   r    Úregister_subcommand;   sX     ÿýýý ÿýýz AuthCommands.register_subcommandN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r4   r   r   r   r    r   :   s   r   c                   @   s   e Zd Zdd„ ZdS )ÚBaseAuthCommandc                 C   s   || _ tƒ | _d S r   )r   r   Ú_api)Úselfr   r   r   r    Ú__init__v   s    zBaseAuthCommand.__init__N)r5   r6   r7   r<   r   r   r   r    r9   u   s   r9   c                   @   s   e Zd Zdd„ ZdS )r'   c                 C   s    t  ¡  t| jj| jjd� d S )N)ÚtokenÚadd_to_git_credential)r   Úset_verbosity_infor   r   r=   r>   ©r;   r   r   r    Úrun|   s
    þzAuthLogin.runN©r5   r6   r7   rA   r   r   r   r    r'   {   s   r'   c                   @   s   e Zd Zdd„ ZdS )r(   c                 C   s   t  ¡  t| jjd� d S )N)Ú
token_name)r   r?   r   r   rC   r@   r   r   r    rA   …   s    zAuthLogout.runNrB   r   r   r   r    r(   „   s   r(   c                   @   s>   e Zd Zdd„ Zee dœdd„Zee ee dœdd„Zd	S )
r,   c                 C   sJ   t  ¡  | jj}|d kr |  ¡ }|d kr6tdƒ tƒ  t|| jjd� d S )Nz!No token name provided. Aborting.)r>   )	r   r?   r   rC   Ú_select_token_nameÚprintÚexitr   r>   )r;   rC   r   r   r    rA   ‹   s    zAuthSwitch.run)Úreturnc                 C   sØ   t tƒ  ¡ ƒ}|s t d¡ d S tr.|  |¡S tdƒ t|dƒD ]\}}t|› d|› �ƒ q@zXt	dƒ}| 
¡ dkrxW d S t|ƒd }d|  krœt|ƒk rªn n
|| W S tdƒ W q\ tk
rÐ   td	ƒ Y q\X q\d S )
Nz+No stored tokens found. Please login first.zAvailable stored tokens:r   z. z=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_tuirE   Ú	enumerateÚinputÚlowerÚintÚlenÚ
ValueError)r;   Útoken_namesÚirC   ÚchoiceÚindexr   r   r    rD   –   s&    


zAuthSwitch._select_token_name)rT   rG   c                 C   sJ   dd„ |D ƒ}zt jd|d d� ¡ W S  tk
rD   t d¡ Y d S X d S )Nc                 S   s   g | ]}t ||d �‘qS )©Únamer   )Ú.0rC   r   r   r    Ú
<listcomp>±   s     z5AuthSwitch._select_token_name_tui.<locals>.<listcomp>zSelect a token to switch to:)ÚmessageÚchoicesÚdefaultzToken selection cancelled.)r   ÚselectÚexecuteÚKeyboardInterruptrJ   Úinfo)r;   rT   r]   r   r   r    rM   °   s    ý
z!AuthSwitch._select_token_name_tuiN)	r5   r6   r7   rA   r   r3   rD   r   rM   r   r   r   r    r,   Š   s   r,   c                   @   s   e Zd Zdd„ ZdS )r.   c                 C   s   t  ¡  tƒ  d S r   )r   r?   r
   r@   r   r   r    rA   ¾   s    zAuthList.runNrB   r   r   r   r    r.   ½   s   r.   c                   @   s   e Zd Zdd„ ZdS )r*   c              
   C   sÌ   t ƒ }|d krtdƒ tƒ  zf| j |¡}tt d¡|d ƒ dd„ |d D ƒ}|rjtt d¡d |¡ƒ td	kr€td
t› �ƒ W nD t	k
rÆ } z&t|ƒ tt 
|jj¡ƒ tdƒ W 5 d }~X Y nX d S )NzNot logged inzuser: rY   c                 S   s   g | ]}|d  ‘qS rX   r   )rZ   Úorgr   r   r    r[   Ì   s     z"AuthWhoami.run.<locals>.<listcomp>Úorgszorgs: ú,zhttps://huggingface.coz(Authenticated through private endpoint: r   )r   rE   rF   r:   r)   r   ÚboldÚjoinr   r   ÚredÚresponseÚtext)r;   r=   rb   rd   Úer   r   r    rA   Ä   s     zAuthWhoami.runNrB   r   r   r   r    r*   Ã   s   r*   N))Ú__doc__Úargparser   Útypingr   r   Zrequests.exceptionsr   Zhuggingface_hub.commandsr   Zhuggingface_hub.constantsr   Zhuggingface_hub.hf_apir   Z_loginr
   r   r   r   Úutilsr   r   r   Z
_cli_utilsr   Z
get_loggerr5   rJ   Z
InquirerPyr   ZInquirerPy.base.controlr   rL   ÚImportErrorr   r9   r'   r(   r,   r.   r*   r   r   r   r    Ú<module>   s.   

;	3