o
    ưi	                     @  s`   d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	Z	ddl
mZmZ G dd	 d	eZdS )
z/S3 destination implementation for Focus export.    )annotationsN)timezone)AnyOptional   )FocusDestinationFocusTimeWindowc                   @  s>   e Zd ZdZdddd
dZdddZdddZdddZdS )FocusS3Destinationz3Handles uploading serialized exports to S3 buckets.N)configprefixstrr
   Optional[dict[str, Any]]returnNonec                C  s:   |pi }| d}|std|| _|d| _|| _d S )Nbucket_namez/bucket_name must be provided for S3 destination/)get
ValueErrorr   rstripr   r
   )selfr   r
   r    r   m/home/app/Keep/.python/lib/python3.10/site-packages/litellm/integrations/focus/destinations/s3_destination.py__init__   s   

zFocusS3Destination.__init__contentbytestime_windowr   filenamec                  s*   | j ||d}t| j||I d H  d S )N)r   r   )_build_object_keyasyncio	to_thread_upload)r   r   r   r   
object_keyr   r   r   deliver   s   zFocusS3Destination.deliverc                C  sn   |j tj}d|d }| j|g}|jdkr$|d|d  dt	d |}|r5| d| S |S )Nzdate=z%Y-%m-%dZhourlyzhour=z%Hr   )

start_time
astimezoner   utcstrftimer   Z	frequencyappendjoinfilter)r   r   r   Z	start_utcZdate_componentpartsZ
key_prefixr   r   r   r   )   s   

z$FocusS3Destination._build_object_keyr!   c           	      C  s   i }| j d}|r||d< | j d}|r||d< i }dD ]}| j |r-| j | ||< qtjdi ||}|j| j||dd d S )Nregion_nameendpoint_url)Zaws_access_key_idZaws_secret_access_keyZaws_session_tokens3zapplication/octet-stream)ZBucketKeyZBodyZContentType)r-   )r
   r   boto3clientZ
put_objectr   )	r   r   r!   Zclient_kwargsr+   r,   Zsession_kwargskeyZ	s3_clientr   r   r   r    2   s&   
zFocusS3Destination._upload)r   r   r
   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r!   r   r   r   )__name__
__module____qualname____doc__r   r"   r   r    r   r   r   r   r	      s    


	r	   )r5   
__future__r   r   datetimer   typingr   r   r/   baser   r   r	   r   r   r   r   <module>   s    