Skip to content

Instantly share code, notes, and snippets.

@dolohow
Last active May 21, 2022 19:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dolohow/f9850c323a1c6e17da1693635e4d2314 to your computer and use it in GitHub Desktop.
Save dolohow/f9850c323a1c6e17da1693635e4d2314 to your computer and use it in GitHub Desktop.
Manage Nextcloud CalDav calendars
import caldav
def ct(d):
return d.strftime("%Y%m%dT%H%M00")
class Calendar:
def __init__(self, caldav_url, username, password, calendar_name):
self.client = caldav.DAVClient(url=caldav_url, username=username, password=password)
my_principal = self.client.principal()
self.calendar = my_principal.calendar(name=calendar_name)
def create_event(self, dtstart, dtend, summary):
return self.calendar.save_event(
dtstart=dtstart,
dtend=dtend,
summary=summary
)
def update_event(self, url, dtstart, dtend, summary):
obj = caldav.objects.Event(client=self.client, url=url, parent=self.calendar)
obj.load()
if summary:
obj.vobject_instance.vevent.summary.value = summary
if dtstart:
obj.vobject_instance.vevent.dtstart.value = ct(dtstart)
if dtend:
obj.vobject_instance.vevent.dtend.value = ct(dtend)
obj.save()
def remove_event(self, url):
obj = caldav.objects.Event(client=self.client, url=url, parent=self.calendar)
obj.delete()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment