Skip to main content
Glama
calendar_models.py2.85 kB
""" Pydantic models for calendar operations """ from pydantic import BaseModel, Field, EmailStr from typing import Optional, List, Dict, Any from datetime import datetime from enum import Enum class EventStatus(str, Enum): """Calendar event status""" CONFIRMED = "confirmed" TENTATIVE = "tentative" CANCELLED = "cancelled" class EventType(str, Enum): """Calendar event types""" MEETING = "meeting" FOCUS_TIME = "focus_time" REMINDER = "reminder" OUT_OF_OFFICE = "out_of_office" INTERVIEW = "interview" PERSONAL = "personal" OTHER = "other" class ReminderType(str, Enum): """Reminder types""" EMAIL = "email" POPUP = "popup" class Attendee(BaseModel): """Event attendee""" email: EmailStr display_name: Optional[str] = None response_status: str = "needsAction" # accepted, declined, tentative, needsAction optional: bool = False organizer: bool = False class EventReminder(BaseModel): """Event reminder""" method: ReminderType minutes: int = Field(..., ge=0, description="Minutes before event") class CalendarEvent(BaseModel): """Calendar event data model""" id: Optional[str] = None calendar_id: str = "primary" summary: str = Field(..., description="Event title") description: Optional[str] = None location: Optional[str] = None start: datetime = Field(..., description="Event start time") end: datetime = Field(..., description="Event end time") timezone: str = "America/New_York" attendees: List[Attendee] = Field(default_factory=list) reminders: List[EventReminder] = Field(default_factory=list) status: EventStatus = EventStatus.CONFIRMED event_type: Optional[EventType] = None color_id: Optional[str] = None conference_data: Optional[Dict[str, Any]] = None recurrence: Optional[List[str]] = None metadata: Dict[str, Any] = Field(default_factory=dict) class CalendarEventFilter(BaseModel): """Filter for querying calendar events""" calendar_id: str = "primary" time_min: Optional[datetime] = None time_max: Optional[datetime] = None query: Optional[str] = None event_types: Optional[List[EventType]] = None attendee: Optional[str] = None max_results: int = 100 class CalendarSummary(BaseModel): """Calendar summary""" calendar_id: str total_events: int by_type: Dict[str, int] upcoming_meetings: List[CalendarEvent] conflicts: List[Dict[str, Any]] free_slots: List[Dict[str, datetime]] period: str generated_at: datetime = Field(default_factory=datetime.now) class MeetingConflict(BaseModel): """Meeting conflict detection""" event1_id: str event2_id: str event1_summary: str event2_summary: str overlap_start: datetime overlap_end: datetime overlap_minutes: int

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pbulbule13/mcpwithgoogle'

If you have feedback or need assistance with the MCP directory API, please join our Discord server