Skip to content

Instantly share code, notes, and snippets.

@bhutley
Last active November 8, 2023 17:45
Show Gist options
  • Select an option

  • Save bhutley/2614f4d41d4e1f8b6377ac03285beeaa to your computer and use it in GitHub Desktop.

Select an option

Save bhutley/2614f4d41d4e1f8b6377ac03285beeaa to your computer and use it in GitHub Desktop.
Python script to add a Calendar Event on OS/X using pyobjc
#!/usr/local/bin/python
# A quick script to add an event to my iCloud Home Calendar
# Usage: osx_cal_add_event.py <YYYY-MM-DD> <"Title of event">
# it adds an all-day event.
#
# By Brett Hutley <brett@hutley.net>
#
import sys
import objc
objc.setVerbose(True)
from CalendarStore import CalCalendarStore, CalEvent, CalTask
from Cocoa import NSDate
import datetime
def create_event(year, month, day, title):
dt = datetime.date(year, month, day)
seconds = (dt - datetime.date.today()).total_seconds()
event_date = NSDate.dateWithTimeIntervalSinceNow_(seconds)
new_event = CalEvent.event()
new_event._.calendar = home_cal
new_event._.startDate = event_date
new_event._.endDate = event_date
new_event._.title = title
new_event._.isAllDay = True
res, err = CalCalendarStore.defaultCalendarStore().saveEvent_span_error_(new_event, 0, None)
if res:
return new_event
raise Exception(err.localizedDescription())
def usage():
print("Usage: %s <YYYY-MM-DD> <Title of event>" % (sys.argv[0], ))
if len(sys.argv) != 3 or len(sys.argv[1]) != 10:
usage()
exit(0)
dtfields = sys.argv[1].split('-')
if len(dtfields) != 3:
usage()
exit(0)
year = int(dtfields[0])
month = int(dtfields[1])
day = int(dtfields[2])
title = sys.argv[2]
home_cal = None
for cal in CalCalendarStore.defaultCalendarStore().calendars():
if cal.title() == "Home" and cal.type() == "CalDAV":
home_cal = cal
break
if home_cal is None:
print("Couldn't find a CalDAV Home calendar")
exit(0)
create_event(year, month, day, title)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment