
    Ng                         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dS )    N)Enum)AnyDictListOptionalType)CallbackManagerForToolRun)	BaseModelField)GmailBaseTool)clean_email_bodyc                       e Zd ZdZdZdZdS )Resourcez"Enumerator of Resources to search.threadsmessagesN)__name__
__module____qualname____doc__THREADSMESSAGES     b/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/tools/gmail/search.pyr   r      s        ,,GHHHr   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<   dS )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      s         $$ 5  E3    !@  Hh    u>  K     r   r   c                   0   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dS )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                 n   g }|D ]}|d         }| j                                                                                             d|                                          }|d         }g |d<   |D ].}|d         }|d                             ||d         d           /|                    |           |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 U!),z"))gWT]*S*STTTTNN6""""r   r   c                    g }|D ]}|d         }| j                                                                                             dd|                                          }t          j        |d                   }t          j        |          }|d         }|d         }	d}
|	                                r|
                                D ]}|                                }t          |                    d                    }|d	k    rjd
|vrf	 |                    d                              d          }
n9# t          $ r, |                    d                              d          }
Y nw xY w nn)|                    d                              d          }
t!          |
          }|                    |d         |d         |d         |||	|d         |d         |d         |d         d
           |S )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<3FGGK0==I	*Gv&FL%%'' R%NN,, 
 
D 1133E *?!@!@AAF,,V1K1K+/+;+;4+;+H+H+O+OPW+X+XLL1   +/+;+;4+;+H+H+O+O ), ,LLL (44D4AAHHQQ#L11DNN!$- ,Z 8+I6 &$%f-%f-#D/#D/     s   )D883E.-E.r!   Nr   r    r"   run_managerc                    | j                                                                                             d||                                                              |j        g           }|t          j        k    r| 	                    |          S |t          j
        k    r|                     |          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     ##%%XZZT;T??WYYS$$ 	 x'''&&w///***''000%&U(&U&U&UV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'   .   sP        >>D#	@    
 +;K&':::d4S>&: tDcN?S    (2T#s(^(< 2d3PS8nAU 2 2 2 2n &.;?W WW W 	W
 78W 
d38n	W W W W W 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      s?           2 2 2 2 2 2 2 2 2 2 2 2 2 2 > > > > > > % % % % % % % % > > > > > > B B B B B B    sD       y   4gW gW gW gW gW- gW gW gW gW gWr   