LifeAdmin-AI / tools /calendar_server.py
Maheen001's picture
Create tools/calendar_server.py
0819f43 verified
raw
history blame
3.06 kB
from datetime import datetime, timedelta
from icalendar import Calendar, Event
from pathlib import Path
import pytz
async def create_calendar_event(
title: str,
start: str,
end: str,
description: str = '',
location: str = ''
) -> dict:
"""
Create ICS calendar event
Args:
title: Event title
start: Start datetime (ISO format or natural language)
end: End datetime (ISO format or natural language)
description: Event description
location: Event location
Returns:
Dict with ICS file path
"""
try:
# Parse dates
start_dt = parse_datetime(start)
end_dt = parse_datetime(end)
# Create calendar
cal = Calendar()
cal.add('prodid', '-//LifeAdmin AI//lifeadmin.ai//')
cal.add('version', '2.0')
# Create event
event = Event()
event.add('summary', title)
event.add('dtstart', start_dt)
event.add('dtend', end_dt)
event.add('description', description)
if location:
event.add('location', location)
event.add('dtstamp', datetime.now(pytz.UTC))
# Generate unique ID
import uuid
event.add('uid', str(uuid.uuid4()))
cal.add_component(event)
# Save to file
output_path = f"data/outputs/event_{datetime.now().strftime('%Y%m%d_%H%M%S')}.ics"
Path(output_path).parent.mkdir(parents=True, exist_ok=True)
with open(output_path, 'wb') as f:
f.write(cal.to_ical())
return {
'success': True,
'output_path': output_path,
'event': {
'title': title,
'start': start_dt.isoformat(),
'end': end_dt.isoformat(),
'description': description
}
}
except Exception as e:
return {'error': str(e), 'success': False}
def parse_datetime(dt_string: str) -> datetime:
"""Parse datetime from various formats"""
try:
# Try ISO format
return datetime.fromisoformat(dt_string.replace('Z', '+00:00'))
except:
pass
try:
# Try common formats
for fmt in ['%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M', '%m/%d/%Y']:
try:
dt = datetime.strptime(dt_string, fmt)
return pytz.UTC.localize(dt)
except:
continue
except:
pass
# Default to now
return datetime.now(pytz.UTC)
async def create_multiple_events(events: list) -> dict:
"""Create multiple calendar events from a list"""
results = []
for event_data in events:
result = await create_calendar_event(**event_data)
results.append(result)
successful = sum(1 for r in results if r.get('success'))
return {
'success': True,
'total_events': len(events),
'successful': successful,
'results': results
}