Calendar¶
Calendar ¶
Calendar(auth: GoogleAuth, calendar_id: str = 'primary')
High-level Calendar client.
Example
auth = GoogleAuth() auth.authenticate()
cal = Calendar(auth)
Get upcoming events¶
for event in cal.get_upcoming(days=7): print(f"{event.start}: {event.summary}")
Create event¶
cal.create_event( summary="Meeting", start=datetime(2026, 1, 30, 10, 0), end=datetime(2026, 1, 30, 11, 0), )
Initialize Calendar client.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
auth
|
GoogleAuth
|
GoogleAuth instance with valid credentials |
required |
calendar_id
|
str
|
Default calendar ID ("primary" for main calendar) |
'primary'
|
iter_events ¶
iter_events(time_min: datetime | None = None, time_max: datetime | None = None, calendar_id: str | None = None, max_results: int | None = 250, single_events: bool = True, order_by: str = 'startTime') -> Iterator[Event]
Lazily yield events in a time range, following result pages.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
time_min
|
datetime | None
|
Start of range (default: now). Naive datetimes are UTC. |
None
|
time_max
|
datetime | None
|
End of range |
None
|
calendar_id
|
str | None
|
Calendar ID (default: primary) |
None
|
max_results
|
int | None
|
Maximum events to yield (None = all) |
250
|
single_events
|
bool
|
Expand recurring events |
True
|
order_by
|
str
|
Sort order (startTime or updated) |
'startTime'
|
get_events ¶
get_events(time_min: datetime | None = None, time_max: datetime | None = None, calendar_id: str | None = None, max_results: int | None = 250, single_events: bool = True, order_by: str = 'startTime') -> list[Event]
Get events in a time range.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
time_min
|
datetime | None
|
Start of range (default: now). Naive datetimes are UTC. |
None
|
time_max
|
datetime | None
|
End of range |
None
|
calendar_id
|
str | None
|
Calendar ID (default: primary) |
None
|
max_results
|
int | None
|
Maximum events to return (None = all) |
250
|
single_events
|
bool
|
Expand recurring events |
True
|
order_by
|
str
|
Sort order (startTime or updated) |
'startTime'
|
Returns:
| Type | Description |
|---|---|
list[Event]
|
List of Event objects |
get_upcoming ¶
get_upcoming(days: int = 7, calendar_id: str | None = None, max_results: int = 100) -> list[Event]
Get upcoming events.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
days
|
int
|
Number of days ahead (default: 7) |
7
|
calendar_id
|
str | None
|
Calendar ID |
None
|
max_results
|
int
|
Maximum events |
100
|
Returns:
| Type | Description |
|---|---|
list[Event]
|
List of upcoming events |
get_today ¶
get_today(calendar_id: str | None = None) -> list[Event]
Get today's events, where "today" is in GSUITE_DEFAULT_TIMEZONE.
get_event ¶
get_event(event_id: str, calendar_id: str | None = None) -> Event | None
Get a specific event by ID.
create_event ¶
create_event(summary: str, start: datetime | date, end: datetime | date | None = None, description: str | None = None, location: str | None = None, attendees: list[str] | None = None, calendar_id: str | None = None, all_day: bool = False, recurrence: list[str] | None = None, meet: bool = False, send_updates: SendUpdates = 'none') -> Event
Create a new event.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
summary
|
str
|
Event title |
required |
start
|
datetime | date
|
Start time (datetime) or date (for all-day) |
required |
end
|
datetime | date | None
|
End time (default: start + 1 hour) |
None
|
description
|
str | None
|
Event description |
None
|
location
|
str | None
|
Event location |
None
|
attendees
|
list[str] | None
|
List of attendee emails |
None
|
calendar_id
|
str | None
|
Calendar to create in |
None
|
all_day
|
bool
|
Create as all-day event |
False
|
recurrence
|
list[str] | None
|
RRULE lines, e.g. ["RRULE:FREQ=WEEKLY;BYDAY=MO,WE"] |
None
|
meet
|
bool
|
Attach a new Google Meet link (see Event.meet_link) |
False
|
send_updates
|
SendUpdates
|
Email attendees: "all", "externalOnly" or "none" |
'none'
|
Returns:
| Type | Description |
|---|---|
Event
|
Created Event |
quick_add ¶
quick_add(text: str, calendar_id: str | None = None, send_updates: SendUpdates = 'none') -> Event
Create an event from natural language: "Lunch with Ana tomorrow at 1pm".
update_event ¶
update_event(event_id: str, summary: str | None = None, start: datetime | date | None = None, end: datetime | date | None = None, description: str | None = None, location: str | None = None, attendees: list[str] | None = None, all_day: bool = False, calendar_id: str | None = None, send_updates: SendUpdates = 'none') -> Event
Change an event. Only the arguments you pass are updated.
Moving an event: pass start (and end, or it becomes 1 hour long). attendees replaces the whole list.
Returns:
| Type | Description |
|---|---|
Event
|
The updated Event |
get_instances ¶
get_instances(event_id: str, time_min: datetime | None = None, time_max: datetime | None = None, max_results: int | None = 250, calendar_id: str | None = None) -> list[Event]
Occurrences of a recurring event (optionally within a time range).
get_free_busy ¶
get_free_busy(time_min: datetime, time_max: datetime, calendars: list[str] | None = None) -> dict[str, list[dict[str, datetime | None]]]
Busy intervals per calendar.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
calendars
|
list[str] | None
|
Calendar IDs or emails ("me" = your primary calendar). Default: this client's calendar. |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, list[dict[str, datetime | None]]]
|
{calendar: [{"start": datetime, "end": datetime}, ...]}. A calendar |
dict[str, list[dict[str, datetime | None]]]
|
you can't see comes back with no busy times and a logged warning. |
delete_event ¶
delete_event(event_id: str, calendar_id: str | None = None, send_updates: SendUpdates = 'none') -> bool
Delete an event.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
send_updates
|
SendUpdates
|
Email attendees about the cancellation: "all", "externalOnly" or "none" |
'none'
|
Returns:
| Type | Description |
|---|---|
bool
|
True if deleted, False if it didn't exist. Other failures (auth, |
bool
|
rate limit, ...) raise instead of looking like "not found". |
Event
dataclass
¶
Event(id: str, summary: str, description: str | None = None, location: str | None = None, start: datetime | None = None, end: datetime | None = None, all_day: bool = False, recurring: bool = False, recurrence: list[str] | None = None, attendees: list[Attendee] = list(), organizer: str | None = None, calendar_id: str = 'primary', html_link: str | None = None, status: str = 'confirmed', meet_link: str | None = None, timezone: str | None = None, created: datetime | None = None, updated: datetime | None = None, creator: str | None = None, recurring_event_id: str | None = None)
Calendar event.
Represents a single calendar event with all its metadata.
CalendarEntity
dataclass
¶
CalendarEntity(id: str, summary: str, description: str | None = None, time_zone: str | None = None, primary: bool = False, access_role: str = 'reader', background_color: str | None = None, foreground_color: str | None = None)