Slack_App / calendar_tools.py
ujalaarshad17's picture
first commit
93dae80 verified
import json
from services import create_service
client_secret = 'credentials.json'
def construct_google_calendar_client(client_secret):
"""
Constructs a Google Calendar API client.
Parameters:
- client_secret (str): The path to the client secret JSON file.
Returns:
- service: The Google Calendar API service instance.
"""
API_NAME = 'calendar'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/calendar']
service = create_service(client_secret, API_NAME, API_VERSION, SCOPES)
return service
calendar_service = construct_google_calendar_client(client_secret=client_secret)
def create_calendar_list(calendar_name):
"""
Creates a new calendar list.
Parameters:
- calendar_name (str): The name of the new calendar list.
Returns:
- dict: A dictionary containing the ID of the new calendar list.
"""
calendar_list = {
'summary': calendar_name
}
created_calendar_list = calendar_service.calendarList().insert(body=calendar_list).execute()
return created_calendar_list
def list_calendar_list(max_capacity=200):
"""
Lists calendar lists until the total number of items reaches max_capacity.
Parameters:
- max_capacity (int or str, optional): The maximum number of calendar lists to retrieve. Defaults to 200.
If a string is provided, it will be converted to an integer.
Returns:
- list: A list of dictionaries containing cleaned calendar list information with 'id', 'name', and 'description'.
"""
if isinstance(max_capacity, str):
max_capacity = int(max_capacity)
all_calendars = []
all_calendars_cleaned = []
next_page_token = None
capacity_tracker = 0
while True:
calendar_list = calendar_service.calendarList().list(
maxResults=min(200, max_capacity - capacity_tracker),
pageToken=next_page_token
).execute()
calendars = calendar_list.get('items', [])
all_calendars.extend(calendars)
capacity_tracker += len(calendars)
if capacity_tracker >= max_capacity:
break
next_page_token = calendar_list.get('nextPageToken')
if not next_page_token:
break
for calendar in all_calendars:
all_calendars_cleaned.append(
{
'id': calendar['id'],
'name': calendar['summary'],
'description': calendar.get('description', '')
})
return all_calendars_cleaned
def list_calendar_events(calendar_id, max_capacity=20):
"""
Lists events from a specified calendar until the total number of events reaches max_capacity.
Parameters:
- calendar_id (str): The ID of the calendar from which to list events.
- max_capacity (int or str, optional): The maximum number of events to retrieve. Defaults to 20.
If a string is provided, it will be converted to an integer.
Returns:
- list: A list of events from the specified calendar.
"""
if isinstance(max_capacity, str):
max_capacity = int(max_capacity)
all_events = []
next_page_token = None
capacity_tracker = 0
while True:
events_list = calendar_service.events().list(
calendarId=calendar_id,
maxResults=min(250, max_capacity - capacity_tracker),
pageToken=next_page_token
).execute()
events = events_list.get('items', [])
all_events.extend(events)
capacity_tracker += len(events)
if capacity_tracker >= max_capacity:
break
next_page_token = events_list.get('nextPageToken')
if not next_page_token:
break
return all_events