o
    ưi                     @   s   d dl Z d dlZd dlmZ d dl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 d dlmZmZ G d	d
 d
eZdS )    N)Optional)verbose_logger)InMemoryCache)SECRET_MANAGER_REFRESH_INTERVAL)GCSBucketBase)_get_httpx_client)CommonProxyErrorsKeyManagementSystemc                       sN   e Zd Zedfdee dee ddf fddZdedee fd	d
Z	  Z
S )GoogleSecretManagerFrefresh_intervalalways_read_secret_managerreturnNc                    s   ddl m} |durtdtjj t   tj	
dd| _| jdu r)tdt | _| t_tjt_tj	
d|}|rAt|n|}t|d	| _tj	
d
}|r\| dkr\d| _dS |p_d| _dS )a!  
        Args:
            refresh_interval (int, optional): The refresh interval in seconds. Defaults to 86400. (24 hours)
            always_read_secret_manager (bool, optional): Whether to always read from the secret manager. Defaults to False. Since we do want to cache values
        r   )premium_userTz5Google Secret Manager requires an Enterprise License Z GOOGLE_SECRET_MANAGER_PROJECT_IDNzgGoogle Secret Manager requires a project ID, please set 'GOOGLE_SECRET_MANAGER_PROJECT_ID' in your .envZ&GOOGLE_SECRET_MANAGER_REFRESH_INTERVAL)Zdefault_ttlZ0GOOGLE_SECRET_MANAGER_ALWAYS_READ_SECRET_MANAGERtrueF)Zlitellm.proxy.proxy_serverr   
ValueErrorr   Znot_premium_uservaluesuper__init__osenvironget
PROJECT_IDr   sync_httpx_clientlitellmZsecret_manager_clientr	   ZGOOGLE_SECRET_MANAGERZ_key_management_systemintr   cachelowerr   )selfr   r   r   Z_refresh_intervalZ_always_read_secret_manager	__class__ d/home/app/Keep/.python/lib/python3.10/site-packages/litellm/secret_managers/google_secret_manager.pyr      s<   



zGoogleSecretManager.__init__secret_namec           
      C   s  | j dur| j|}|dur|S || jjv r|S d| j d| d}|  }d| d}| jj||d}|jd	krUt	
d
t|j | j|d td| d|j t	d|j | }|di d}|dur~t|d}	| j||	 |	S | j|d td| d)z
        Retrieve a secret from Google Secret Manager or cache.

        Args:
            secret_name (str): The name of the secret.

        Returns:
            str: The secret value if successful, None otherwise.
        TNz	projects/z	/secrets/z/versions/latestz(https://secretmanager.googleapis.com/v1/z:access)urlheaders   z)Google Secret Manager retrieval error: %szsecret z, not found in Google Secret Manager. Error: z8Google Secret Manager retrieval response status code: %spayloaddatazutf-8z# not found in Google Secret Manager)r   r   Z	get_cacheZ
cache_dictr   Zsync_construct_request_headersr   r   status_coder   errorstrtextZ	set_cacher   debugjsonbase64	b64decodedecode)
r   r"   Zcached_secretZ_secret_namer$   r#   responseZsecret_dataZ_base64_encoded_valueZ_decoded_valuer    r    r!   %get_secret_from_google_secret_manager>   sF   



z9GoogleSecretManager.get_secret_from_google_secret_manager)__name__
__module____qualname__r   r   r   boolr   r*   r2   __classcell__r    r    r   r!   r
      s    /r
   )r.   r   typingr   r   Zlitellm._loggingr   Zlitellm.caching.cachingr   Zlitellm.constantsr   Z/litellm.integrations.gcs_bucket.gcs_bucket_baser   Z&litellm.llms.custom_httpx.http_handlerr   Zlitellm.proxy._typesr   r	   r
   r    r    r    r!   <module>   s    