
    7|h                     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     d/var/www/html/test/engine/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   	messageIdECould 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%0;{+% # 

 %)$>$>$@ 2	
 '.ll$$%%9: '3 '

 'mmo	,##s*$^45G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	
 '.ll$$%]3 '3 '

 'mmo	,##s*$^45G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Rx !QRRrz !JKK>>+-$ "  
 | !NOORx !STT"} !OPPrz !LMM##!	 $   xy0A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%)OXc])&?hsm?L (#$ 3   $x'7'7 &((6:3i(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   