
    dh                         S SK r S SKrS SKJr  S SKJrJrJrJrJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJr   " S S	\\5      r " S
 S\5      r " S S\5      rg)    N)Enum)AnyDictListOptionalType)CallbackManagerForToolRun)	BaseModelField)GmailBaseTool)clean_email_bodyc                        \ rS rSrSrSrSrSrg)Resource   z"Enumerator of Resources to search.threadsmessages N)__name__
__module____qualname____firstlineno____doc__THREADSMESSAGES__static_attributes__r       ^/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/tools/gmail/search.pyr   r      s    ,GHr   r   c                   v    \ rS rSr% Sr\" SSS9r\\S'   \" \	R                  SS9r\	\S	'   \" S
SS9r\\S'   Srg)SearchArgsSchema   zInput for SearchGmailTool..a  The Gmail query. Example filters include from:sender, to:recipient, subject:subject, -filtered_term, in:folder, is:important|read|starred, after:year/mo/date, before:year/mo/date, label:label_name "exact phrase". Search newer/older than using d (day), m (month), and y (year): newer_than:2d, older_than:1y. Attachments with extension example: filename:pdf. Multiple term matching example: from:amy OR from:david.)descriptionqueryz*Whether to search for threads or messages.)defaultr!   resource
   z(The maximum number of results to return.max_resultsr   N)r   r   r   r   r   r   r"   str__annotations__r   r   r$   r&   intr   r   r   r   r   r      sX    $ 5E3  !!@Hh  >K r   r   c                       \ rS rSr% SrSr\\S'   Sr\\S'   \	r
\\	   \S'   S\\\\4      S	\\\\4      4S
 jrS\\\\4      S	\\\\4      4S jr\R$                  SS4S\S\S\S\\   S	\\\\4      4
S jjrSrg)GmailSearch.   z4Tool that searches for messages or threads in Gmail.search_gmailnamezUse this tool to search for email messages or threads. The input must be a valid Gmail query. The output is a JSON list of the requested resource.r!   args_schemar   returnc                 2   / nU H  nUS   nU R                   R                  5       R                  5       R                  SUS9R	                  5       nUS   n/ US'   U H!  nUS   nUS   R                  XS   S.5        M#     UR                  U5        M     U$ )Nidme)userIdr2   r   snippet)r5   r2   )api_resourceusersr   getexecuteappend)	selfr   resultsthread	thread_idthread_datar   messager5   s	            r   _parse_threadsGmailSearch._parse_threads9   s    FtI!!'')DY/	  #:.H!#F:#!),z"))gT]*ST $ NN6"  r   r   c                 F   / nU GHi  nUS   nU R                   R                  5       R                  5       R                  SSUS9R	                  5       n[
        R                  " US   5      n[        R                  " U5      nUS   nUS   n	Sn
UR                  5       (       aq  UR                  5        H\  nUR                  5       n[        UR                  S5      5      nUS	:X  d  M5  S
U;  d  M=   UR                  SS9R                  S5      n
  O!   OUR                  SS9R                  S5      n
[!        U
5      nUR#                  US   US   US   UUU	US   US   US   US   S.
5        GMl     U$ ! [         a!    UR                  SS9R                  S5      n
 Nf = f)Nr2   r3   raw)r4   formatr2   SubjectFrom zContent-Dispositionz
text/plain
attachmentT)decodezutf-8zlatin-1threadIdr5   DateToCc)
r2   rK   r5   bodysubjectsenderfromdatetocc)r6   r7   r   r8   r9   base64urlsafe_b64decodeemailmessage_from_bytesis_multipartwalkget_content_typer'   get_payloadrJ   UnicodeDecodeErrorr   r:   )r;   r   r<   r@   
message_idmessage_dataraw_message	email_msgrP   rQ   message_bodypartctypecdisporO   s                  r   _parse_messagesGmailSearch._parse_messagesM   s   G J!!'')D:>	  !22<3FGK00=I	*Gv&FL%%''%NN,D 113E *?!@AF,V1K+/+;+;4+;+H+O+OPW+XL
  -  )44D4AHHQ#L1DNN!$- ,Z 8+I6 &$%f-%f-#D/#D/E  ` 1  2 +/+;+;4+;+H+O+O ),Ls   1E55(F F r%   Nr"   r$   r&   run_managerc                 p   U R                   R                  5       R                  5       R                  SXS9R	                  5       R                  UR                  / 5      nU[        R                  :X  a  U R                  U5      $ U[        R                  :X  a  U R                  U5      $ [        SU S35      e)zRun the tool.r3   )r4   q
maxResultszResource of type z not implemented.)r6   r7   r   listr9   r8   valuer   r   rA   r   rg   NotImplementedError)r;   r"   r$   r&   ri   r<   s         r   _runGmailSearch._run   s     ##%XZTT?WYS$ 	 x'''&&w//***''00%(9(CT&UVVr   r   )r   r   r   r   r   r.   r'   r(   r!   r   r/   r   r   r   r   rA   rg   r   r   r)   r   r	   rp   r   r   r   r   r+   r+   .   s    >D#	@  
 +;K&':d4S>&: tDcN?S (2T#s(^(< 2d3PS8nAU 2n &..;?WW W 	W
 78W 
d38n	W Wr   r+   )rV   rX   enumr   typingr   r   r   r   r   langchain_core.callbacksr	   pydanticr
   r   $langchain_community.tools.gmail.baser   %langchain_community.tools.gmail.utilsr   r'   r   r   r+   r   r   r   <module>rx      sJ       2 2 > % > BsD y 4gW- gWr   