o
    ni                     @   s@   d Z ddlZddlmZ ddlZddlmZ G dd deZdS )zPublic API: users.    N)gql)Attrsc                       s   e Zd ZedZedZedZ fddZedd Z	e
dd	d
Zedd Zedd Zdd ZdddZdd Z  ZS )Usera(  
    mutation CreateUserFromAdmin($email: String!, $admin: Boolean) {
        createUser(input: {email: $email, admin: $admin}) {
            user {
                id
                name
                username
                email
                admin
            }
        }
    }
        z
    mutation DeleteApiKey($id: String!) {
        deleteApiKey(input: {id: $id}) {
            success
        }
    }
        z
    mutation GenerateApiKey($description: String) {
        generateApiKey(input: {description: $description}) {
            apiKey {
                id
                name
            }
        }
    }
        c                    s   t  | || _d | _d S N)super__init___client	_user_api)selfclientattrs	__class__ U/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/apis/public/users.pyr   1   s   
zUser.__init__c                 C   s2   | j du rt| jdkrtj| jd d| _ | j S )z7An instance of the api using credentials from the user.Nr   )api_key)r	   lenapi_keyswandbApir
   r   r   r   user_api6   s   zUser.user_apiFc                 C   s*   |j | j||d}t|j |d d S )a  Create a new user.

        Args:
            api: (`Api`) The api instance to use
            email: (str) The name of the team
            admin: (bool) Whether this user should be a global instance admin

        Returns:
            A `User` object
        )emailadmin
createUseruser)r   executeCREATE_USER_MUTATIONr   )clsapir   r   resr   r   r   create=   s
   zUser.createc                 C   ,   | j dd u r
g S dd | j d d D S )NapiKeysc                 S      g | ]}|d  d qS nodenamer   .0kr   r   r   
<listcomp>S       z!User.api_keys.<locals>.<listcomp>edges_attrsgetr   r   r   r   r   O      zUser.api_keysc                 C   r"   )Nteamsc                 S   r$   r%   r   r(   r   r   r   r+   Y   r,   zUser.teams.<locals>.<listcomp>r-   r.   r   r   r   r   r2   U   r1   z
User.teamsc                 C   sV   | j |}z| j| jd| jd d | d d i W dS  tjjy*   Y dS w )zDelete a user's api key.

        Returns:
            Boolean indicating success

        Raises:
            ValueError if the api_key couldn't be found
        idr#   r-   r&   FT)	r   indexr   r   DELETE_API_KEY_MUTATIONr/   requests
exceptions	HTTPError)r
   r   idxr   r   r   delete_api_key[   s   	zUser.delete_api_keyNc              	   C   s^   z | j j| jd|id d }| jd d d|i |d W S  tjjt	fy.   Y dS w )	zbGenerate a new api key.

        Returns:
            The new api key, or None on failure
        descriptiongenerateApiKeyapiKeyr#   r-   r&   r'   N)
r   r   r   GENERATE_API_KEY_MUTATIONr/   appendr6   r7   r8   AttributeError)r
   r;   keyr   r   r   generate_api_keyn   s   

zUser.generate_api_keyc                 C   st   d| j v rd| j d  dS d| j v rd| j d  dS d| j v r*d| j d  dS d| j v r8d| j d dS dS )Nr   z<User >usernamer3   r'   z
<User ???>)r/   r   r   r   r   __repr__~   s   



zUser.__repr__)Fr   )__name__
__module____qualname__r   r   r5   r>   r   propertyr   classmethodr!   r   r2   r:   rB   rE   __classcell__r   r   r   r   r   
   s,    	



r   )__doc__r6   	wandb_gqlr   r   wandb.apis.attrsr   r   r   r   r   r   <module>   s    