o
    ÿÑÐbl  ã                   @   s:   d dl Z ddlmZ dgZdZG dd„ deƒZdd„ ZdS )	é    Né   )ÚFrameworkIntegrationÚ	BaseOAuth)Z	client_idZclient_secretÚrequest_token_urlZrequest_token_paramsZaccess_token_urlZaccess_token_paramsZrefresh_token_urlZrefresh_token_paramsZauthorize_urlZauthorize_paramsZapi_base_urlZclient_kwargsZserver_metadata_urlc                   @   sL   e Zd ZdZdZeZddd„Zdd„ Zddd	„Z	d
d„ Z
dd„ Zdd„ ZdS )r   z`Registry for oauth clients.

    Create an instance for registry::

        oauth = OAuth()
    Nc                 C   s   i | _ i | _|| _|| _d S ©N)Ú	_registryÚ_clientsÚfetch_tokenÚupdate_token)Úselfr	   r
   © r   új/var/www/secure340b-portal/env/lib/python3.10/site-packages/authlib/integrations/base_client/base_oauth.pyÚ__init__   s   
zBaseOAuth.__init__c                 C   s”   || j v r
| j | S || jvrdS | j| \}}| d| j¡}|jr+|j}| |¡ n|}| j||fi |¤Ž}||  |¡|fi |¤Ž}|| j |< |S )a>  Create or get the given named OAuth client. For instance, the
        OAuth registry has ``.register`` a twitter client, developers may
        access the client with::

            client = oauth.create_client('twitter')

        :param: name: Name of the remote application
        :return: OAuth remote app
        NÚ
client_cls)r   r   ÚpopÚframework_client_clsZOAUTH_APP_CONFIGÚupdateÚgenerate_client_kwargsÚframework_integration_cls)r   ÚnameÚ	overwriteÚconfigr   ÚkwargsÚclientr   r   r   Úcreate_client"   s   




zBaseOAuth.create_clientFc                 K   s   ||f| j |< |  |¡S )aÛ  Registers a new remote application.

        :param name: Name of the remote application.
        :param overwrite: Overwrite existing config with framework settings.
        :param kwargs: Parameters for :class:`RemoteApp`.

        Find parameters for the given remote app class. When a remote app is
        registered, it can be accessed with *named* attribute::

            oauth.register('twitter', client_id='', ...)
            oauth.twitter.get('timeline')
        )r   r   )r   r   r   r   r   r   r   Úregister>   s   
zBaseOAuth.registerc                 K   s‚   |  dd ¡}|  dd ¡}|  |t¡}|rt|||ƒ}|s&| jr&t | j|¡}||d< | d¡s?|s;| jr;t | j|¡}||d< |S )Nr	   r
   r   )	r   Úload_configÚOAUTH_CLIENT_PARAMSÚ_config_clientr	   Ú	functoolsÚpartialÚgetr
   )r   r   r   r   r	   r
   r   r   r   r   r   N   s   


z BaseOAuth.generate_client_kwargsc                 C   s   | j  | ||¡S r   )r   r   )r   r   Úparamsr   r   r   r   b   s   zBaseOAuth.load_configc                 C   sB   zt  | |¡W S  ty    || jv r|  |¡ Y S td| ƒ‚w )NzNo such client: %s)ÚobjectÚ__getattribute__ÚAttributeErrorr   r   )r   Úkeyr   r   r   Ú__getattr__e   s   
ýzBaseOAuth.__getattr__)NN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r'   r   r   r   r   r      s    

c                 C   sZ   t D ](}|  |d ¡}||vr|||< q|r*|r*t|| tƒr&||  |¡ q|||< q|S r   )r   r!   Ú
isinstanceÚdictr   )r   r   r   ÚkÚvr   r   r   r   n   s   
€r   )r   Zframework_integrationr   Ú__all__r   r#   r   r   r   r   r   r   Ú<module>   s    \