Last active
November 8, 2023 17:45
-
-
Save bhutley/2614f4d41d4e1f8b6377ac03285beeaa to your computer and use it in GitHub Desktop.
Python script to add a Calendar Event on OS/X using pyobjc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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