Ë
    µŒjê  ã                   óv   — d Z ddlmZmZmZmZ ddlZddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ  G d„ d	e
«      Zy)
z%Util that sends messages via Infobip.é    )ÚAnyÚDictÚListÚOptionalN©Úget_from_dict_or_env)Ú	BaseModelÚ
ConfigDictÚmodel_validator)ÚHTTPAdapter)ÚRetryc                   ó  — e Zd ZU dZdZee   ed<   dZee   ed<    e	d¬«      Z
 ed¬	«      ed
edefd„«       «       Zdej"                  fd„Zdedee   dedefd„Zdededededef
d„Z	 	 	 	 	 ddedededededefd„Zy)ÚInfobipAPIWrapperz&Wrapper for Infobip API for messaging.NÚinfobip_api_keyzhttps://api.infobip.comÚinfobip_base_urlÚforbid)ÚextraÚbefore)ÚmodeÚvaluesÚreturnc                 óF   — t        |dd«      |d<   t        |dd«      |d<   |S )z,Validate that api key exists in environment.r   ÚINFOBIP_API_KEYr   ÚINFOBIP_BASE_URLr   )Úclsr   s     úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/utilities/infobip.pyÚvalidate_environmentz&InfobipAPIWrapper.validate_environment   s?   € ô %9ØÐ%Ð'8ó%
ˆÐ Ñ!ô &:ØÐ&Ð(:ó&
ˆÐ!Ñ"ð ˆó    c                 óà   — t        ddg d¢¬«      }t        |¬«      }t        j                  «       }|j	                  d|«       |j
                  j                  d| j                  › �dd	œ«       |S )
z0Get a requests session with the correct headers.é   é   )i­  iô  iö  i÷  iø  )ÚtotalÚbackoff_factorÚstatus_forcelist)Úmax_retrieszhttps://zApp zinfobip-langchain-community)ÚAuthorizationz
User-Agent)r   r   ÚrequestsÚSessionÚmountÚheadersÚupdater   )ÚselfÚretry_strategyÚadapterÚsessions       r   Ú_get_requests_sessionz'InfobipAPIWrapper._get_requests_session"   so   € ä %ØØÚ6ô!
ˆô
  +°~ÔFˆä×"Ñ"Ó$ˆØ�‰�j 'Ô*Ø�‰×Ñà#'¨×(<Ñ(<Ð'=Ð!>Ø;ñô	
ð ˆr   ÚsenderÚdestination_phone_numbersÚtextc                 ó†  — d|D �cg c]  }d|i‘Œ c}||dœgi}| j                  «       }|j                  j                  ddi«       |j                  | j                  › d�|¬«      }|j                  «       }	 |j                  dk7  r|d	   d
   d   S 	 	 |d   d   d   S c c}w # t        $ r Y yw xY w# t        $ r 	 Y yw xY w)zSend an SMS message.ÚmessagesÚto)ÚdestinationsÚfromr3   úContent-Typezapplication/jsonz/sms/2/text/advanced)ÚjsonéÈ   ÚrequestErrorÚserviceExceptionr3   úFailed to send messager   Ú	messageIdúECould not get message ID from response, message was sent successfully)r0   r*   r+   Úpostr   r:   Ústatus_codeÚKeyError)	r,   r1   r2   r3   Údestinationr:   r/   ÚresponseÚresponse_jsons	            r   Ú	_send_smszInfobipAPIWrapper._send_sms5   s  € ð
 ñ @Yó%Ù?X°˜˜{Ò+Ð?Xñ%ð #Ø ñðð

ˆð %)×$>Ñ$>Ó$@ˆØ�‰×ÑàÐ 2ðô	
ð '.§l¡lØ×$Ñ$Ð%Ð%9Ð:Øð '3ó '
ˆð
 'Ÿm™m›oˆð	,Ø×#Ñ# sÒ*Ø$ ^Ñ4Ð5GÑHÈÑPÐPð +ð
	Ø  Ñ,¨QÑ/°Ñ<Ð<ùò;%øô2 ò 	,Ù+ð	,ûô
 ò 	àWñð	ús)   †BÁ8B$ Â
B3 Â$	B0Â/B0Â3
C Â?C Ú
from_emailÚto_emailÚsubjectÚbodyc                 óÆ  — 	 ddl m} ||||dœ} ||¬«      }| j                  «       }	|	j                  j                  d|j                  i«       |	j                  | j                  › d�|¬	«      }
|
j                  «       }	 |
j                  d
k7  r|d   d   d   S 	 	 |d   d   d   S # t        $ r}t        d«      |‚d}~ww xY w# t        $ r Y yw xY w# t        $ r 	 Y yw xY w)zSend an email message.r   )ÚMultipartEncoderz^Unable to import requests_toolbelt, please install it with `pip install -U requests-toolbelt`.N)r8   r6   rJ   r3   )Úfieldsr9   z/email/3/send)Údatar;   r<   r=   r3   r>   r5   r?   r@   )Úrequests_toolbeltrM   ÚImportErrorr0   r*   r+   Úcontent_typerA   r   r:   rB   rC   )r,   rH   rI   rJ   rK   rM   ÚeÚ	form_datarO   r/   rE   rF   s               r   Ú_send_emailzInfobipAPIWrapper._send_email_   s.  € ð
	Ý:ð ØØØñ	
ˆ	ñ   yÔ1ˆà$(×$>Ñ$>Ó$@ˆØ�‰×Ñà × 1Ñ 1ðô	
ð '.§l¡lØ×$Ñ$Ð% ]Ð3Øð '3ó '
ˆð
 'Ÿm™m›oˆð	,Ø×#Ñ# sÒ*Ø$ ^Ñ4Ð5GÑHÈÑPÐPð +ð
	Ø  Ñ,¨QÑ/°Ñ<Ð<øôG ò 	Üð6óð ðûð	ûô> ò 	,Ù+ð	,ûô
 ò 	àWñð	ús;   ‚B' Â C Â
C Â'	CÂ0B<Â<CÃ	CÃCÃ
C ÃC r6   Úchannelc                 óh  — |dk(  rE|dk(  rt        d«      ‚|dk(  rt        d«      ‚|dk(  rt        d«      ‚| j                  ||g|¬«      S |dk(  rU|dk(  rt        d«      ‚|dk(  rt        d	«      ‚|dk(  rt        d
«      ‚|dk(  rt        d«      ‚| j                  ||||¬«      S t        d|› d�«      ‚)NÚsmsÚ z)Sender must be specified for SMS messagesz.Destination must be specified for SMS messagesz'Body must be specified for SMS messages)r1   r2   r3   Úemailz+Sender must be specified for email messagesz0Destination must be specified for email messagesz,Subject must be specified for email messagesz)Body must be specified for email messages)rH   rI   rJ   rK   zChannel z is not supported)Ú
ValueErrorrG   rU   )r,   rK   r6   r1   rJ   rV   s         r   ÚrunzInfobipAPIWrapper.run�   s÷   € ð �eÒØ˜Š|Ü Ð!LÓMÐMà�RŠxÜ Ð!QÓRÐRà�rŠzÜ Ð!JÓKÐKà—>‘>ØØ+-¨$Øð "ó ð ð
 ˜ÒØ˜Š|Ü Ð!NÓOÐOà�RŠxÜ Ð!SÓTÐTà˜"Š}Ü Ð!OÓPÐPà�rŠzÜ Ð!LÓMÐMà×#Ñ#Ø!ØØØð	 $ó ð ô ˜x¨ yÐ0AÐBÓCÐCr   )rY   rY   rY   rY   rX   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚstrÚ__annotations__r   r
   Úmodel_configr   Úclassmethodr   r   r   r'   r(   r0   r   rG   rU   r\   © r   r   r   r      s  … Ù0à%)€O�X˜c‘]Ó)Ø&?Ð�h˜s‘mÓ?áØô€Lñ ˜(Ô#Øð¨$ð °3ò ó ó $ðð x×'7Ñ'7ó ð&(Øð(Ø6:¸3±ið(ØGJð(à	ó(ðT.Øð.Ø),ð.Ø7:ð.ØBEð.à	ó.ðd ØØØØñ+Dàð+Dð ð+Dð ð	+Dð
 ð+Dð ð+Dð 
ô+Dr   r   )r`   Útypingr   r   r   r   r'   Úlangchain_core.utilsr   Úpydanticr	   r
   r   Úrequests.adaptersr   Úurllib3.utilr   r   re   r   r   Ú<module>rk      s0   ðÙ +ç ,Ó ,ã Ý 5ß ;Ñ ;Ý )Ý ônD˜	õ nDr   