U
    #i                     @  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)
SyncClient)AdminUserAttributesAuthMFAAdminDeleteFactorParams AuthMFAAdminDeleteFactorResponseAuthMFAAdminListFactorsParamsAuthMFAAdminListFactorsResponseGenerateLinkParamsGenerateLinkResponseInviteUserByEmailOptionsSignOutScopeUserUserResponse   )SyncGoTrueAdminMFAAPI)SyncGoTrueBaseAPIc                   @  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 );SyncGoTrueAdminAPI NTurlheadershttp_clientverifyproxystrzDict[str, str]zUnion[SyncClient, 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+   A/tmp/pip-unpacked-wheel-b8wmx3ip/gotrue/_sync/gotrue_admin_api.pyr'      s    	
zSyncGoTrueAdminAPI.__init__globalr   )jwtscoper&   c                 C  s   | j ddd|i|ddS )z.
        Removes a logged-in session.
        POSTZlogoutr/   T)queryr.   Zno_resolve_json_request)r*   r.   r/   r+   r+   r,   sign_out/   s    zSyncGoTrueAdminAPI.sign_outr   r   )emailoptionsr&   c                 C  s&   | j dd||dd|dtdS )z;
        Sends an invite link to an email address.
        r0   Zinvitedata)r5   r7   redirect_tobodyr8   xform)r3   getr   )r*   r5   r6   r+   r+   r,   invite_user_by_email;   s    z'SyncGoTrueAdminAPI.invite_user_by_emailr   r   )paramsr&   c                 C  sT   | j dd|d|d|d|d|di dd	|di d
td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   )r3   r<   r
   r*   r>   r+   r+   r,   generate_linkK   s    z SyncGoTrueAdminAPI.generate_linkr   )
attributesr&   c                 C  s   | j dd|td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;   r3   r   )r*   rD   r+   r+   r,   create_user_   s    zSyncGoTrueAdminAPI.create_userintz
List[User])pageper_pager&   c                 C  s   | j dd||ddd d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     zCSyncGoTrueAdminAPI.list_users.<locals>.<lambda>.<locals>.<listcomp>r+   )r7   r+   r+   r,   <lambda>x   s    z/SyncGoTrueAdminAPI.list_users.<locals>.<lambda>)r1   r;   r2   )r*   rJ   rK   r+   r+   r,   
list_usersm   s    zSyncGoTrueAdminAPI.list_users)uidr&   c                 C  s   | j dd| td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;   rG   )r*   rR   r+   r+   r,   get_user_by_id   s
    z!SyncGoTrueAdminAPI.get_user_by_id)rR   rD   r&   c                 C  s   | j dd| |td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   rG   )r*   rR   rD   r+   r+   r,   update_user_by_id   s    z$SyncGoTrueAdminAPI.update_user_by_idF)idshould_soft_deleter&   c                 C  s   d|i}| j dd| |d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:   r2   )r*   rX   rY   r:   r+   r+   r,   delete_user   s    zSyncGoTrueAdminAPI.delete_userr   r   c                 C  s$   | j dd|d dtttdS )NrL   rS   user_idz/factorsrT   )r3   r<   r   r	   r   rB   r+   r+   r,   r(      s
    z SyncGoTrueAdminAPI._list_factorsr   r   c                 C  s.   | j dd|d d|d tttdS )NrZ   rS   r\   z	/factors/Z	factor_idrT   )r3   r<   r   r	   r   rB   r+   r+   r,   r)      s
    z!SyncGoTrueAdminAPI._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