o
    Zh'                     @   s   d Z ddlZddlmZ ddlmZmZmZmZmZm	Z	 ddl
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 deZG dd deZdS )z#Update an event in Google Calendar.    N)datetime)AnyDictListOptionalTypeUnion)uuid4)CallbackManagerForToolRun)	BaseModelField)CalendarBaseTool)is_all_day_eventc                   @   s  e Zd ZU dZedddZeed< edddZeed	< ed
ddZ	e
e ed< ed
ddZe
e ed< ed
ddZe
e ed< ed
ddZe
e ed< ed
ddZe
eeef  ed< ed
ddZe
e ed< ed
ddZe
e ed< ed
ddZe
ee  ed< ed
ddZed
eeeeef  f ed< ed
ddZe
e ed< ed
ddZe
e ed < ed
d!dZe
e ed"< ed
d#dZe
e ed$< d
S )%UpdateEventSchemazInput for CalendarUpdateEvent..zThe event ID to update.)descriptionevent_idprimaryz'The calendar ID to create the event in.)defaultr   calendar_idNzThe title of the event.summaryzThe new start datetime for the event in 'YYYY-MM-DD HH:MM:SS' format. If the event is an all-day event, set the time to 'YYYY-MM-DD' format.start_datetimezThe new end datetime for the event in 'YYYY-MM-DD HH:MM:SS' format. If the event is an all-day event, set the time to 'YYYY-MM-DD' format.end_datetimezThe timezone of the event.timezonea  The recurrence of the event. Format: {'FREQ': <'DAILY' or 'WEEKLY'>, 'INTERVAL': <number>, 'COUNT': <number or None>, 'UNTIL': <'YYYYMMDD' or None>, 'BYDAY': <'MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU' or None>}. Use either COUNT or UNTIL, but not both; set the other to None.
recurrencezThe location of the event.locationzThe description of the event.r   z3A list of attendees' email addresses for the event.	attendeeszReminders for the event. Set to True for default reminders, or provide a list like [{'method': 'email', 'minutes': <minutes>}, ...]. Valid methods are 'email' and 'popup'.	remindersz#Whether to include conference data.conference_datazThe color ID of the event. None for default. '1': Lavender, '2': Sage, '3': Grape, '4': Flamingo, '5': Banana, '6': Tangerine, '7': Peacock, '8': Graphite, '9': Blueberry, '10': Basil, '11': Tomato.color_idzNUser availability for the event.transparent for available and opaque for busy.transparencyzZWhether to send updates to attendees. Allowed values are 'all', 'externalOnly', or 'none'.send_updates)__name__
__module____qualname____doc__r   r   str__annotations__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   boolr   r   r   r     r(   r(   g/var/www/html/lang_env/lib/python3.10/site-packages/langchain_google_community/calendar/update_event.pyr      sd   
 
$		r   c                #   @   s  e Zd ZU dZdZeed< dZeed< eZ	e
e ed< d ded	ed
eeef fddZ												d!deeef dee dee dee dee deeeef  dee dee deee  dedeeeeef  f dee dee dee d
eeef fddZ												d"dedededed	edee deeeef  dee dee deee  dedeeeeef  f dee dee dee dee dee d
ef"ddZdS )#CalendarUpdateEventz.Tool that updates an event in Google Calendar.Zupdate_calendar_eventnamez"Use this tool to update an event. r   args_schemar   r   r   returnc                 C   s   | j  j||d }|S )zGet the event by ID.)
calendarIdeventId)api_resourceeventsgetexecute)selfr   r   eventr(   r(   r)   
_get_eventg   s   zCalendarUpdateEvent._get_eventNr5   r   r   r   r   r   r   r   r   r   r   r   c              
   C   sj  |dur||d< zD|rK|rKt ||rd|i|d< d|i|d< n,d}|p(|d d }t||}t||}|  |d|d< |  |d|d< W n ty] } ztd	|d}~ww |dur}t|tr}d
d | D }|	ddd
| gi |dur|	d|i |dur|	d|i |	durg }d}|	D ]}t||std| |d|i q|	d|i |
dur|
du r|	dddii n4t|
tr|
D ]}d|vsd|vrtd|d dvrtdq|	dd|
di n	|	dddii |r|	dd tt d!d"id#ii n|	ddi |dur'||d$< |dur3|	d%|i |S )&zRefactor the event body.Nr   datestartendz%Y-%m-%d %H:%M:%StimeZone)ZdateTimer:   z!The datetime format is incorrect.c                 S   s&   g | ]\}}|d ur| d| qS )N=r(   ).0kvr(   r(   r)   
<listcomp>   s     z7CalendarUpdateEvent._refactor_event.<locals>.<listcomp>r   zRRULE:;r   r   z^[^@]+@[^@]+\.[^@]+$zInvalid email address: emailr   Tr   
useDefaultmethodminutesz4Each reminder must have 'method' and 'minutes' keys.)rA   Zpopupz/The reminder method must be 'email' or 'popup'.F)rB   Z	overridesZconferenceDataZcreateRequesttypeZhangoutsMeet)Z	requestIdZconferenceSolutionKeyZcolorIdr   )r   r   strptime
astimezone	isoformat
ValueError
isinstancedictitemsupdatejoinrematchappendlistr%   r	   )r4   r5   r   r   r   r   r   r   r   r   r   r   r   r   Zdatetime_formatZstart_dtZend_dterrorZrecurrence_itemsZattendees_emailsZemail_patternrA   Zreminderr(   r(   r)   _refactor_eventp   s   









z#CalendarUpdateEvent._refactor_eventr    run_managerc                 C   s   z6|  ||}| j||||||||	|
||||d}|rdnd}| j j|||||d }d|d W S  tyJ } ztd| |d}~ww )	z3Run the tool to update an event in Google Calendar.)r5   r   r   r   r   r   r   r   r   r   r   r   r      r   )r.   r/   bodyZconferenceDataVersionZsendUpdateszEvent updated: ZhtmlLinkzAn error occurred: N)r6   rT   r0   r1   rM   r3   r2   	Exception)r4   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rU   r5   rW   Zconference_versionresultrS   r(   r(   r)   _run   sB   zCalendarUpdateEvent._run)r   )NNNNNNNNNNNN)r   NNNNNNNNNNN)r!   r"   r#   r$   r+   r%   r&   r   r   r,   r   r   r   r6   r   r   r   r'   rT   r
   rZ   r(   r(   r(   r)   r*   `   s   
  
	



c	

r*   )r$   rO   r   typingr   r   r   r   r   r   uuidr	   Zlangchain_core.callbacksr
   Zpydanticr   r   Z(langchain_google_community.calendar.baser   Z)langchain_google_community.calendar.utilsr   r   r*   r(   r(   r(   r)   <module>   s     Q