Files
caldav_recurring_task/dv-task-manager.py
2018-02-27 00:42:38 +01:00

77 lines
2.6 KiB
Python
Executable File

#! /home/ggentile/perso/projects/python/Envs/dorfsvald-pim/bin/python3
import os
import datetime
import calendar
from yaml import load
from icalendar.parser import Contentlines, Contentline
from dateutil.rrule import rrule, FREQNAMES
import caldav
class Task:
def __init__(self, ref_date, name, data):
self.ref_date = ref_date
self.name = name
data['start']['freq'] = FREQNAMES.index(data['start']['freq'])
self.date_begin = rrule(count=1, dtstart=ref_date, **data['start'])[0]
self.date_end = self.date_begin + datetime.timedelta(microseconds=-1, **data['duration'])
self.title = data['title']
self.body = data['body']
self.priority = data['priority']
def to_ical(self):
current_dtstamp = datetime.datetime.now().strftime('%Y%m%dT%H%M%SZ')
uid = "DV-Taskmanager-%s-%s" % (self.name, self.date_end.strftime('%Y%m%d'))
c = Contentlines([
Contentline('BEGIN:VCALENDAR'),
Contentline('VERSION:2.0'),
Contentline('PRODID:-//Example Corp.//CalDAV Client//EN'),
Contentline('BEGIN:VTODO'),
Contentline('DTSTAMP:%s' % current_dtstamp),
Contentline('CREATED:%s' % current_dtstamp),
Contentline('UID:%s' % uid),
Contentline('SEQUENCE:%s' % '4'),
Contentline('LAST-MODIFIED:%s' % current_dtstamp),
Contentline('DESCRIPTION:%s' % self.body),
Contentline('SUMMARY:%s' % self.title),
Contentline('PRIORITY:%s' % 1),
Contentline('DUE;VALUE=DATE:%s' % self.date_end.strftime('%Y%m%d')),
Contentline('DTSTART;VALUE=DATE:%s' % self.date_begin.strftime('%Y%m%d')),
Contentline('PERCENT-COMPLETE:0'),
Contentline('END:VTODO'),
Contentline('END:VCALENDAR')
])
return c.to_ical()
class Client:
def __init__(self, url):
self.client = caldav.DAVClient(url)
self.principal = self.client.principal()
self.calendar = self.principal.calendar()
def add_event(self, event):
self.calendar.add_event(task.to_ical())
# conf = load('./configuration.yml')
ref_date = datetime.date.today() + datetime.timedelta(days=-3)
with open('./tasks.yml', 'r') as content_file:
tasks_conf = load(content_file.read())
task_list = []
for task_name, task_data in tasks_conf.items():
t = Task(ref_date, task_name, task_data)
if t.date_begin.date() == ref_date:
task_list.append(t)
url = "https://ggentile:ID0t'8h6@cloud.dorfsvald.net/webdav/ggentile/calendar.ics/"
client = Client(url)
for task in task_list:
client.add_event(task)