U
    #iw                     @  s   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 ddlmZmZmZmZmZ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dS )    )annotations)partial)DictListOptionalUnion   )model_validateparse_link_responseparse_user_response)AsyncClient)AdminUserAttributesAuthMFAAdminDeleteFactorParams AuthMFAAdminDeleteFactorResponseAuthMFAAdminListFactorsParamsAuthMFAAdminListFactorsResponseGenerateLinkParamsGenerateLinkResponseInviteUserByEmailOptionsSignOutScopeUserUserResponse   )AsyncGoTrueAdminMFAAPI)AsyncGoTrueBaseAPIc                   @  s   e Zd Zdi ddddddddd	d
dddZd8ddd
dddZi fddddddZdddddZddddd Zd9d!d!d"d#d$d%Zddd&d'd(Z	dddd)d*d+Z
d:ddd
d-d.d/Zd0d1dd2d3Zd4d5dd6d7ZdS );AsyncGoTrueAdminAPI NTurlheadershttp_clientverifyproxystrzDict[str, str]zUnion[AsyncClient, None]boolzOptional[str]None)r   r   r    r!   r"   returnc                C  s6   t j| |||||d t | _| j| j_| j| j_d S )Nr   )r   __init__r   Zmfa_list_factorsZlist_factors_delete_factorZdelete_factor)selfr   r   r    r!   r"    r+   B/tmp/pip-unpacked-wheel-b8wmx3ip/gotrue/_async/gotrue_admin_api.pyr'      s    	
zAsyncGoTrueAdminAPI.__init__globalr   )jwtscoper&   c                   s   | j ddd|i|ddI dH S )z.
        Removes a logged-in session.
        POSTZlogoutr/   T)queryr.   Zno_resolve_jsonN_request)r*   r.   r/   r+   r+   r,   sign_out/   s    zAsyncGoTrueAdminAPI.sign_outr   r   )emailoptionsr&   c                   s,   | j dd||dd|dtdI dH S )z;
        Sends an invite link to an email address.
        r0   Zinvitedata)r5   r7   redirect_tobodyr8   xformN)r3   getr   )r*   r5   r6   r+   r+   r,   invite_user_by_email;   s    z(AsyncGoTrueAdminAPI.invite_user_by_emailr   r   )paramsr&   c                   sZ   | j dd|d|d|d|d|di dd	|di d
tdI dH S )zX
        Generates email links and OTPs to be sent via a custom email provider.
        r0   zadmin/generate_linktyper5   password	new_emailr6   r7   )r?   r5   r@   rA   r7   r8   r9   N)r3   r<   r
   r*   r>   r+   r+   r,   generate_linkK   s    z!AsyncGoTrueAdminAPI.generate_linkr   )
attributesr&   c                   s   | j dd|tdI dH S )z
        Creates a new user.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        r0   admin/usersr:   r;   Nr3   r   )r*   rD   r+   r+   r,   create_user_   s    zAsyncGoTrueAdminAPI.create_userintz
List[User])pageper_pager&   c                   s"   | j dd||ddd dI dH S )z
        Get a list of users.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        GETrE   )rJ   rK   c                 S  s   d| krdd | d D S g S )NZusersc                 S  s   g | ]}t t|qS r+   )r	   r   ).0userr+   r+   r,   
<listcomp>y   s     zDAsyncGoTrueAdminAPI.list_users.<locals>.<lambda>.<locals>.<listcomp>r+   )r7   r+   r+   r,   <lambda>x   s    z0AsyncGoTrueAdminAPI.list_users.<locals>.<lambda>)r1   r;   Nr2   )r*   rJ   rK   r+   r+   r,   
list_usersm   s    zAsyncGoTrueAdminAPI.list_users)uidr&   c                   s   | j dd| tdI dH S )z
        Get user by id.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rL   admin/users/r;   NrG   )r*   rR   r+   r+   r,   get_user_by_id   s
    z"AsyncGoTrueAdminAPI.get_user_by_id)rR   rD   r&   c                   s   | j dd| |tdI dH S )z
        Updates the user data.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        PUTrS   rF   NrG   )r*   rR   rD   r+   r+   r,   update_user_by_id   s    z%AsyncGoTrueAdminAPI.update_user_by_idF)idshould_soft_deleter&   c                   s$   d|i}| j dd| |dI dH S )z
        Delete a user. Requires a `service_role` key.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rY   DELETErS   )r:   Nr2   )r*   rX   rY   r:   r+   r+   r,   delete_user   s    zAsyncGoTrueAdminAPI.delete_userr   r   c                   s*   | j dd|d dtttdI d H S )NrL   rS   user_idz/factorsrT   )r3   r<   r   r	   r   rB   r+   r+   r,   r(      s
    z!AsyncGoTrueAdminAPI._list_factorsr   r   c                   s4   | j dd|d d|d tttdI d H S )NrZ   rS   r\   z	/factors/Z	factor_idrT   )r3   r<   r   r	   r   rB   r+   r+   r,   r)      s
    z"AsyncGoTrueAdminAPI._delete_factor)r-   )NN)F)__name__
__module____qualname__r'   r4   r=   rC   rH   rQ   rU   rW   r[   r(   r)   r+   r+   r+   r,   r      s"   

r   N) 
__future__r   	functoolsr   typingr   r   r   r   Zhelpersr	   r
   r   Zhttp_clientsr   typesr   r   r   r   r   r   r   r   r   r   r   Zgotrue_admin_mfa_apir   Zgotrue_base_apir   r   r+   r+   r+   r,   <module>   s   4