Ë
    tPêjó	  ã                  óf   — 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	e«      Zy)
z/S3 destination implementation for Focus export.é    )ÚannotationsN)Útimezone)ÚAnyÚFinalé   )ÚFocusDestinationÚFocusTimeWindowc                  óP   — e Zd ZdZddœ	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 d	d„Zd
d„Zdd„Zy)ÚFocusS3Destinationz3Handles uploading serialized exports to S3 buckets.N)Úconfigc               ó”   — |xs i }|j                  d«      }|st        d«      ‚|| _        |j                  d«      | _        || _        y )NÚbucket_namez/bucket_name must be provided for S3 destinationú/)ÚgetÚ
ValueErrorr   ÚrstripÚprefixr   )Úselfr   r   r   s       ú{/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/focus/destinations/s3_destination.pyÚ__init__zFocusS3Destination.__init__   sI   € ð ’˜2ˆØ#ŸZ™Z¨Ó6ˆÙÜÐNÓOÐOØ&ˆÔØ—m‘m CÓ(ˆŒØˆ�ó    c             ƒ  óˆ   K  — | j                  ||¬«      }t        j                  | j                  ||«      ƒ d {  –—†  y 7 Œ­w)N)Útime_windowÚfilename)Ú_build_object_keyÚasyncioÚ	to_threadÚ_upload)r   Úcontentr   r   Ú
object_keys        r   ÚdeliverzFocusS3Destination.deliver   s:   è ø€ ð !×2Ñ2¸{ÐU]Ð2Ó^ˆ
Ü×Ñ §¡¨g°zÓB×BÒBús   ‚8AºA »Ac               óH  — |j                   j                  t        j                  «      }d|j	                  d«      › �}| j
                  |g}|j                  dk(  r#|j                  d|j	                  d«      › �«       dj                  t        d |«      «      }|r|› d|› �S |S )Nzdate=z%Y-%m-%dÚhourlyzhour=z%Hr   )
Ú
start_timeÚ
astimezoner   ÚutcÚstrftimer   Ú	frequencyÚappendÚjoinÚfilter)r   r   r   Ú	start_utcÚdate_componentÚpartsÚ
key_prefixs          r   r   z$FocusS3Destination._build_object_key)   sœ   € Ø&×1Ñ1×<Ñ<¼X¿\¹\ÓJˆ	Ø"'¨	×(:Ñ(:¸:Ó(FÐ'GÐ HˆØŸ™ ^Ð4ˆØ× Ñ  HÒ,Ø�L‰L˜5 ×!3Ñ!3°DÓ!9Ð :Ð;Ô<ØŸH™H¤V¨D°%Ó%8Ó9ˆ
Ù-7�*�˜Q˜x˜jÐ)ÐE¸XÐEr   c                ój  — i }| j                   j                  d«      }|r||d<   | j                   j                  d«      }|r||d<   i }dD ]0  }| j                   j                  |«      sŒ| j                   |   ||<   Œ2 t        j                  di |¤|¤Ž}|j	                  | j
                  ||d¬«       y )NÚregion_nameÚendpoint_url)Úaws_access_key_idÚaws_secret_access_keyÚaws_session_tokenzapplication/octet-stream)ÚBucketÚKeyÚBodyÚContentType)Ús3)r   r   Úboto3ÚclientÚ
put_objectr   )	r   r   r    Úclient_kwargsr1   r2   Úsession_kwargsÚkeyÚ	s3_clients	            r   r   zFocusS3Destination._upload2   s½   € Ø/1ˆØ!Ÿ[™[Ÿ_™_¨]Ó;ˆÙØ+6ˆM˜-Ñ(Ø"Ÿk™kŸo™o¨nÓ=ˆÙØ,8ˆM˜.Ñ)à02ˆð
ò 	7ˆCð
 �{‰{�‰˜sÕ#Ø&*§k¡k°#Ñ&6�˜sÒ#ð	7ô !Ÿ<™<ÑP°ÐPÀÑPˆ	Ø×ÑØ×#Ñ#ØØØ2ð	 	õ 	
r   )r   Ústrr   zdict[str, Any] | NoneÚreturnÚNone)r   Úbytesr   r	   r   rB   rC   rD   )r   r	   r   rB   rC   rB   )r   rE   r    rB   rC   rD   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   r   r   © r   r   r   r      sj   „ Ù=ð )-ñ	ð ðð &ð	ð
 
óðCð ðCð %ð	Cð
 ðCð 
óCóFô
r   r   )rI   Ú
__future__r   r   Údatetimer   Útypingr   r   r;   Úbaser   r	   r   rJ   r   r   ú<module>rO      s'   ðÙ 5å "ã Ý ß ã ç 3ô<
Ð)õ <
r   