Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 53 additions & 16 deletions dtable_events/automations/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -4178,7 +4178,7 @@ def update_event(self):
event_id = self._get_field_value_by_column_key(event_id_key)
if not event_id:
auto_rule_logger.error(f'rule {self.auto_rule.rule_id} GoogleCalendar update event failed: event ID not found.')
return
raise ValueError('GoogleCalendar update event failed: event ID not found')

try:
event_data = self._prepare_event_data()
Expand All @@ -4194,11 +4194,13 @@ def update_event(self):

if result.get('error_msg'):
auto_rule_logger.error(f'rule {self.auto_rule.rule_id} GoogleCalendar update event failed: {result["error_msg"]}')
raise RuntimeError(result['error_msg'])
else:
auto_rule_logger.info(f'rule {self.auto_rule.rule_id} GoogleCalendar update event success')

except Exception as e:
auto_rule_logger.error(f'rule {self.auto_rule.rule_id} GoogleCalendar update event failed with error: {e}')
raise

def create_event(self):
try:
Expand All @@ -4212,12 +4214,43 @@ def create_event(self):

if result.get('error_msg'):
auto_rule_logger.error(f'rule {self.auto_rule.rule_id} GoogleCalendar create event failed: {result["error_msg"]}')
raise RuntimeError(result['error_msg'])
elif result.get('id'):
event_id = result.get('id')
self._save_event_id_to_column(event_id)
auto_rule_logger.info(f'rule {self.auto_rule.rule_id} GoogleCalendar create event success')

except Exception as e:
auto_rule_logger.error(f'rule {self.auto_rule.rule_id} GoogleCalendar create event failed with error: {e}')
raise

def delete_event(self):
event_id_key = self.config.get('event_id_key')
event_id = self._get_field_value_by_column_key(event_id_key)
if not event_id:
auto_rule_logger.error(f'rule {self.auto_rule.rule_id} GoogleCalendar delete event failed: event ID not found.')
raise ValueError('GoogleCalendar delete event failed: event ID not found')

try:
event_data = {
'calendar_id': self.calendar_id,
'event_id': event_id,
'sendUpdates': self.config.get('sendUpdates') or 'all',
}

manager = CalendarManager(self.account_id, db_session=self.auto_rule.db_session)
result = manager.delete_event(event_data)

if result.get('error_msg'):
auto_rule_logger.error(f'rule {self.auto_rule.rule_id} GoogleCalendar delete event failed: {result["error_msg"]}')
raise RuntimeError(result['error_msg'])
else:
self._save_event_id_to_column('')
auto_rule_logger.info(f'rule {self.auto_rule.rule_id} GoogleCalendar delete event success')

except Exception as e:
auto_rule_logger.error(f'rule {self.auto_rule.rule_id} GoogleCalendar delete event failed with error: {e}')
raise

def _prepare_event_data(self):
try:
Expand All @@ -4235,17 +4268,12 @@ def _prepare_event_data(self):
'description': self._get_field_value('event_description'),
'location': self._get_field_value('location'),
'attendees': self._format_attendees(self.config.get('attendees', [])),
'sendUpdates':self.config.get('sendUpdates') or 'all',
'guestsCanInviteOthers': self.config.get('guests_can_invite'),
'guestsCanModify': self.config.get('guests_can_modify'),
'guestsCanSeeOtherGuests': self.config.get('guests_can_see_list'),
}

if not self.config.get('dont_send_notifications'):
event_data['sendUpdates'] = 'all'
if self.config.get('guests_can_invite') is not None:
event_data['guestsCanInviteOthers'] = self.config.get('guests_can_invite')
if self.config.get('guests_can_modify') is not None:
event_data['guestsCanModify'] = self.config.get('guests_can_modify')
if self.config.get('guests_can_see_list') is not None:
event_data['guestsCanSeeOtherGuests'] = self.config.get('guests_can_see_list')

if self.config.get('video_conferencing'):
event_data['conferenceDataVersion'] = 1
event_data['conferenceData'] = {
Expand Down Expand Up @@ -4375,18 +4403,25 @@ def can_do_action(self):
return False

event_id_key = self.config.get('event_id_key')
if not event_id_key:
return False

event_id_column = self.col_key_dict.get(event_id_key)
if not event_id_column or event_id_column.get('type') != ColumnTypes.TEXT:
return False

if self.function_type == 'delete_event':
return True

start_date_column_key = self.config.get('start_date_column_key')
end_date_column_key = self.config.get('end_date_column_key')

if not event_id_key or not start_date_column_key or not end_date_column_key:
if not start_date_column_key or not end_date_column_key:
return False

event_id_column = self.col_key_dict.get(event_id_key)
start_date_column = self.col_key_dict.get(start_date_column_key)
end_date_column = self.col_key_dict.get(end_date_column_key)

if not event_id_column or event_id_column.get('type') != ColumnTypes.TEXT:
return False
if not start_date_column or start_date_column.get('type') != ColumnTypes.DATE:
return False
if not end_date_column or end_date_column.get('type') != ColumnTypes.DATE:
Expand All @@ -4405,8 +4440,10 @@ def do_action(self):
self.create_event()
elif self.function_type == 'update_event':
self.update_event()
elif self.function_type == 'delete_event':
self.delete_event()
else:
auto_rule_logger.warning('google calendar action %s not supported', self.action_type)
auto_rule_logger.warning('google calendar function %s not supported', self.function_type)
return


Expand Down Expand Up @@ -5149,7 +5186,7 @@ def do_actions(self, db_session, with_test=False):
config = {
'account_id': action_info.get('account_id'),
'calendar_id': action_info.get('calendar_id'),
'dont_send_notifications': action_info.get('dont_send_notifications', False),
'sendUpdates': action_info.get('sendUpdates') or 'all',
'start_date_column_key': action_info.get('start_date_column_key'),
'end_date_column_key': action_info.get('end_date_column_key'),
'event_description': action_info.get('event_description', ''),
Expand Down
10 changes: 7 additions & 3 deletions dtable_events/utils/google_calendar_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def _make_api_request(self, method, url, data=None, params=None):
elif method == 'PUT':
response = requests.put(url, headers=headers, json=data, timeout=30)
elif method == 'DELETE':
response = requests.delete(url, headers=headers, timeout=30)
response = requests.delete(url, headers=headers, params=params, timeout=30)
else:
raise ValueError(f"Unsupported HTTP method: {method}")

Expand All @@ -114,7 +114,7 @@ def _make_api_request(self, method, url, data=None, params=None):
elif method == 'PUT':
response = requests.put(url, headers=headers, json=data, timeout=30)
elif method == 'DELETE':
response = requests.delete(url, headers=headers, timeout=30)
response = requests.delete(url, headers=headers, params=params, timeout=30)

return response

Expand Down Expand Up @@ -188,13 +188,17 @@ def update_event(self, event_data):
def delete_event(self, event_data):
calendar_id = event_data.get('calendar_id', 'primary')
event_id = event_data.get('event_id')
params = {}
sendUpdates = event_data.get('sendUpdates')
if sendUpdates:
params['sendUpdates'] = sendUpdates

if not event_id:
raise ValueError("Event ID is required for deleting")

url = f"{self.base_url}/calendars/{parse.quote(calendar_id)}/events/{event_id}"

response = self._make_api_request('DELETE', url)
response = self._make_api_request('DELETE', url, params=params)

try:
_check_and_raise_error(response)
Expand Down
Loading