#!/usr/bin/python3 import mysql.connector as sql import datetime as dt import dateutil.relativedelta as rd import sys import re import glob import pytz # Parameter: list of options in format key=value # Returns: dictionary of given options in format # {key : value, ...} def parseOptions(arr): options = {} for i in arr: k = i.split('=') if len(k) == 1: options['RAW'] = k[0] else: options[k[0]] = k[1] return options # Parameter: datetime object, interval string in {'week', '4weeks'} # Returns: dictionary of events starting from baseDay, inside interval. # {'NAME' : occurrence name, # 'DATETIME' : date in format YYYY-MM-DD hh:mm:ss+tz_offset, # 'ALLDAY' : boolean, true if event lasts all day. Hour in DATETIME has no meaning, # 'LOCATION' : self explanatory, # 'OCCURRENCE' : [optional] number of occurrence in repeated events} def getEvents(baseDay, interval): if interval == 'week': rightLimit = (baseDay+dt.timedelta(weeks=1)) elif interval == '4weeks': rightLimit = (baseDay+dt.timedelta(weeks=4)) else: raise ValueError('Invalid argument passed to getEvents') leftLimit = baseDay local_tz = pytz.timezone(glob.cfg['caldav']['local_tz']) leftLimit = local_tz.localize(leftLimit) rightLimit = local_tz.localize(rightLimit) c = sql.connect(unix_socket=glob.cfg['mysql']['unix_socket'], host=glob.cfg['mysql']['host'], user=glob.cfg['mysql']['user'], password=glob.cfg['mysql']['password'], db=glob.cfg['mysql']['db']) mycursor = c.cursor() # For repeated events query = "SELECT obj.calendardata FROM oc_calendarobjects AS obj INNER JOIN oc_calendars AS cal ON obj.calendarid = cal.id WHERE cal.displayname='%s' AND obj.firstoccurence < %s AND obj.lastoccurence > %s" % (glob.cfg['caldav']['cal_name'], rightLimit.strftime('%s'), leftLimit.strftime('%s')) mycursor.execute(query) result = mycursor.fetchall() c.close() events = [] for event in result: repetition = {'single' : True, 'freq' : {'DAILY': 0, 'WEEKLY' : 0, 'MONTHLY' : 0, 'YEARLY': 0}, 'interval' : 1, 'count': 0} # selected only first column event = event[0].decode('utf8') blockParsing = None event_dict = {} for item in event.split('\r\n'): try: k,v = item.split(':',1) except: continue k = k.split(';') v = re.split('(?