Ë
    tPêjö
  ã                  ó|   — d Z ddlmZ ddlmZ ddlmZ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ee«      Zy)uP   GCS destination for Focus export â€” reuses GCSBucketBase auth and httpx client.é    )Úannotations)Útimezone)ÚAnyÚFinal)Úverbose_logger)ÚGCSBucketBase)Úencode_gcs_object_name_for_urlé   )ÚFocusDestinationÚFocusTimeWindowc                  óT   ‡ — e Zd ZdZddœ	 	 	 	 	 dˆ fd„Z	 	 	 	 	 	 	 	 dd„Zd	d„Zˆ xZS )
ÚFocusGCSDestinationz>Upload serialized Focus exports to GCS using the GCS JSON API.N)Úconfigc               óÎ   •— |xs i }|j                  d«      }|st        d«      ‚t        ‰| �  |¬«       |j                  d«      }|�|| _        |j                  d«      | _        y )NÚbucket_namez0bucket_name must be provided for GCS destination)r   Úservice_account_jsonú/)ÚgetÚ
ValueErrorÚsuperÚ__init__Úpath_service_account_jsonÚrstripÚprefix)Úselfr   r   r   r   Ú	__class__s        €ú|/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/focus/destinations/gcs_destination.pyr   zFocusGCSDestination.__init__   si   ø€ ð ’˜2ˆØ#ŸZ™Z¨Ó6ˆÙÜÐOÓPÐPÜ‰Ñ [ÐÔ1Ø&,§j¡jÐ1GÓ&HÐØÐ+Ø-AˆDÔ*Ø—m‘m CÓ(ˆ�ó    c             ƒ  óÐ  K  — | j                  ||¬«      }| j                  | j                  ¬«      ƒ d {  –—† }d|d<   t        |«      }d| j                  › d|› �}| j
                  j                  |||¬«      ƒ d {  –—† }|j                  dk7  r%t        d	|j                  › d
|j                  › �«      ‚t        j                  dt        |«      | j                  |«       y 7 Œ¬7 Œf­w)N)Útime_windowÚfilename)r   zapplication/octet-streamzContent-Typez3https://storage.googleapis.com/upload/storage/v1/b/z/o?uploadType=media&name=)ÚurlÚheadersÚdataéÈ   zGCS upload failed: status=z body=z*Focus GCS: uploaded %d bytes to gs://%s/%s)Ú_build_object_keyÚconstruct_request_headersr   r	   ÚBUCKET_NAMEÚasync_httpx_clientÚpostÚstatus_codeÚRuntimeErrorÚtextr   ÚdebugÚlen)	r   Úcontentr    r!   Úobject_namer#   Úencoded_namer"   Úresponses	            r   ÚdeliverzFocusGCSDestination.deliver$   sû   è ø€ ð "×3Ñ3ÀÐV^Ð3Ó_ˆØ#×=Ñ=ÐSW×SqÑSqÐ=Ór×rˆØ"<ˆ�ÑÜ<¸[ÓIˆàAØ×ÑÐ Ð 9¸,¸ðIð 	ð !%× 7Ñ 7× <Ñ <ÀÈgÐ\cÐ <Ó d×dˆØ×Ñ 3Ò&ÜÐ!;¸H×<PÑ<PÐ;QÐQWÐX`×XeÑXeÐWfÐgÓhÐhÜ×ÑØ8Ü�‹LØ×ÑØõ		
ð søð eús#   ‚3C&µC"¶AC&Á=C$Á>A%C&Ã$C&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%FocusGCSDestination._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   )r   Ústrr   zdict[str, Any] | NoneÚreturnÚNone)r0   Úbytesr    r   r!   rC   rD   rE   )r    r   r!   rC   rD   rC   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r4   r&   Ú__classcell__)r   s   @r   r   r      sa   ø„ ÙHð )-ñ	)ð ð)ð &ð	)ð
 
õ)ð 
ð ð
ð %ð	
ð
 ð
ð 
ó
÷2Fr   r   N)rJ   Ú
__future__r   Údatetimer   Útypingr   r   Úlitellm._loggingr   Ú/litellm.integrations.gcs_bucket.gcs_bucket_baser   Ú1litellm.litellm_core_utils.cloud_storage_securityr	   Úbaser   r   r   © r   r   ú<module>rT      s2   ðÙ Vå "å ß å +Ý Iõ÷ 4ô3F˜-Ð)9õ 3Fr   