
    ih                         d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZ  G d d	ee      Z G d
 de      Z G d de      Zy)    N)Enum)AnyDictListOptionalType)CallbackManagerForToolRun)	BaseModelField)GmailBaseTool)clean_email_bodyc                       e Zd ZdZdZdZy)Resourcez"Enumerator of Resources to search.threadsmessagesN)__name__
__module____qualname____doc__THREADSMESSAGES     d/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain_community/tools/gmail/search.pyr   r      s    ,GHr   r   c                       e Zd ZU dZ edd      Zeed<    eej                  d      Z
eed<    ed	d
      Zeed<   y)SearchArgsSchemaz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_resultsN)r   r   r   r   r   r   str__annotations__r   r   r    r"   intr   r   r   r   r      sX    $ 5E3  !!@Hh  >K r   r   c                       e Zd ZU dZdZeed<   dZeed<   eZ	e
e   ed<   deeeef      deeeef      fd	Zd
eeeef      deeeef      fdZej"                  ddfdedededee   deeeef      f
dZy)GmailSearchz4Tool 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   g }|D ]  }|d   }| j                   j                         j                         j                  d|      j	                         }|d   }g |d<   |D ]!  }|d   }|d   j                  ||d   d       # |j                  |        |S )Nidme)userIdr-   r   snippet)r0   r-   )api_resourceusersr   getexecuteappend)	selfr   resultsthread	thread_idthread_datar   messager0   s	            r   _parse_threadszGmailSearch._parse_threads9   s     	#FtI!!'')DY/	  #:.H!#F:# U!),z"))gWT]*STU NN6"	# r   r   c                 >   g }|D ]d  }|d   }| j                   j                         j                         j                  dd|      j	                         }t        j                  |d         }t        j                  |      }|d   }|d   }	d}
|j                         rn|j                         D ]Z  }|j                         }t        |j                  d            }|d	k(  s3d
|vs8	 |j                  d      j                  d      }
 n# n!|j                  d      j                  d      }
t!        |
      }|j#                  |d   |d   |d   |||	|d   |d   |d   |d   d
       g |S # t        $ r$ |j                  d      j                  d      }
Y w xY w)Nr-   r.   raw)r/   formatr-   SubjectFrom zContent-Dispositionz
text/plain
attachmentT)decodezutf-8zlatin-1threadIdr0   DateToCc)
r-   rE   r0   bodysubjectsenderfromdatetocc)r1   r2   r   r3   r4   base64urlsafe_b64decodeemailmessage_from_bytesis_multipartwalkget_content_typer#   get_payloadrD   UnicodeDecodeErrorr   r5   )r6   r   r7   r;   
message_idmessage_dataraw_message	email_msgrJ   rK   message_bodypartctypecdisporI   s                  r   _parse_messagesz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   (!E//*FFr!   Nr   r    r"   run_managerc                 t   | j                   j                         j                         j                  d||      j	                         j                  |j                  g       }|t        j                  k(  r| j                  |      S |t        j                  k(  r| j                  |      S t        d| d      )zRun the tool.r.   )r/   q
maxResultszResource of type z not implemented.)r1   r2   r   listr4   r3   valuer   r   r<   r   ra   NotImplementedError)r6   r   r    r"   rb   r7   s         r   _runz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<   ra   r   r   r%   r   r	   ri   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r   r'   )rP   rR   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>rp      sJ       2 2 > % > BsD y 4gW- gWr   