57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
"""
|
|
Calendar operations for Microsoft Graph API.
|
|
"""
|
|
import os
|
|
from datetime import datetime, timedelta
|
|
|
|
from apis.microsoft_graph.client import fetch_with_aiohttp
|
|
|
|
async def fetch_calendar_events(headers, days_back=1, days_forward=6, start_date=None, end_date=None):
|
|
"""
|
|
Fetch calendar events from Microsoft Graph API.
|
|
|
|
Args:
|
|
headers (dict): Headers including authentication.
|
|
days_back (int): Number of days to look back.
|
|
days_forward (int): Number of days to look forward.
|
|
start_date (datetime): Optional start date, overrides days_back if provided.
|
|
end_date (datetime): Optional end date, overrides days_forward if provided.
|
|
|
|
Returns:
|
|
tuple: (events, total_count) where events is a list of event dictionaries
|
|
and total_count is the total number of events.
|
|
"""
|
|
# Calculate date range
|
|
if start_date is None:
|
|
start_date = datetime.now() - timedelta(days=days_back)
|
|
|
|
if end_date is None:
|
|
end_date = start_date + timedelta(days=days_forward)
|
|
|
|
# Format dates for API
|
|
start_date_str = start_date.strftime('%Y-%m-%dT00:00:00Z')
|
|
end_date_str = end_date.strftime('%Y-%m-%dT23:59:59Z')
|
|
|
|
# Prepare the API query
|
|
calendar_url = (
|
|
f'https://graph.microsoft.com/v1.0/me/calendarView?'
|
|
f'startDateTime={start_date_str}&endDateTime={end_date_str}&'
|
|
f'$select=id,subject,organizer,start,end,location,isAllDay,showAs,sensitivity'
|
|
)
|
|
|
|
events = []
|
|
|
|
# Make the API request
|
|
response_data = await fetch_with_aiohttp(calendar_url, headers)
|
|
events.extend(response_data.get('value', []))
|
|
|
|
# Check if there are more events (pagination)
|
|
next_link = response_data.get('@odata.nextLink')
|
|
while next_link:
|
|
response_data = await fetch_with_aiohttp(next_link, headers)
|
|
events.extend(response_data.get('value', []))
|
|
next_link = response_data.get('@odata.nextLink')
|
|
|
|
# Return events and total count
|
|
return events, len(events)
|