X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=parserrules.py;h=7db0413af970c2ecdf0fd5b99e17fd9d1ec32eb5;hb=ee8a5360ac1f00ccbeef97c53d8615f6615108bf;hp=a2175fed34e8168e62384de0275274f164be1b93;hpb=ae40266069204ee411350d5fd3d31f40d89187af;p=frenchie%2Ficalparse.git diff --git a/parserrules.py b/parserrules.py index a2175fe..7db0413 100644 --- a/parserrules.py +++ b/parserrules.py @@ -34,11 +34,14 @@ ruleConfig["defaultTZ"] = "UTC" def facebookOrganiser(cal): '''Adds organiser details to the body of facebook calendars.''' - if cal.contents.has_key(u'prodid'): + if 'prodid' in cal.contents: if not "Facebook" in cal.prodid.value: return cal + if 'vevent_list' not in dir(cal): + return cal + for event in cal.vevent_list: - if not event.contents.has_key(u'organizer'): continue + if 'organizer' not in event.contents: continue try: a = event.organizer.cn_paramlist organizer = "Organised by: " + event.organizer.cn_param + " (" @@ -52,16 +55,70 @@ def facebookOrganiser(cal): def whatPrivacy(cal): '''Marks events public so google calendar doesn't have a sad about them.''' + if 'vevent_list' not in dir(cal): + return cal + for event in cal.vevent_list: - if event.contents.has_key(u'class'): + if 'class' in event.contents: # Bit of a hack as class is a reserved word in python - del event.contents[u'class'] + del event.contents['class'] event.add('class').value = "PUBLIC" return cal +def dropAttributes(cal): + '''Removing unwanted metadata''' + if "facebook" in ruleConfig: + if ruleConfig["facebook"] == True: return cal + + if 'vevent_list' not in dir(cal): + return cal + + eventBlacklist = [x.lower() for x in [ + "X-ALT-DESC", + "X-MICROSOFT-CDO-BUSYSTATUS", + "X-MICROSOFT-CDO-IMPORTANCE", + "X-MICROSOFT-DISALLOW-COUNTER", + "X-MS-OLK-ALLOWEXTERNCHECK", + "X-MS-OLK-AUTOSTARTCHECK", + "X-MS-OLK-CONFTYPE", + "X-MS-OLK-AUTOFILLLOCATION", + "TRANSP", + "SEQUENCE", + "PRIORITY" + ]] + + mainBlacklist = [x.lower() for x in [ + "X-CLIPSTART", + "X-CALSTART", + "X-OWNER", + "X-MS-OLK-WKHRSTART", + "X-MS-OLK-WKHREND", + "X-WR-RELCALID", + "X-MS-OLK-WKHRDAYS", + "X-MS-OLK-APPTSEQTIME", + "X-CLIPEND", + "X-CALEND", + "VTIMEZONE", + "X-PRIMARY-CALENDAR" + ]] + + for event in cal.vevent_list: + for blacklist in eventBlacklist: + if blacklist in event.contents: del event.contents[blacklist] + + for blkl in mainBlacklist: + while blkl in cal.contents: del cal.contents[blkl] + + return cal + def exDate(cal): '''Replacing multi-value EXDATES with multiple single-value EXDATES''' + if "facebook" in ruleConfig: + if ruleConfig["facebook"] == True: return cal + + if 'vevent_list' not in dir(cal): + return cal from datetime import datetime from pytz import timezone @@ -69,16 +126,16 @@ def exDate(cal): default = timezone(ruleConfig["defaultTZ"]) for event in cal.vevent_list: - if not event.contents.has_key(u'exdate'): continue + if 'exdate' not in event.contents: continue dates = event.exdate.value - del event.contents[u'exdate'] + del event.contents['exdate'] for date in dates: if isinstance(date, datetime): if date.tzinfo is None: date = date.replace(tzinfo = default) date = date.astimezone(vobject.icalendar.utc) - entry = event.add(u'exdate') + entry = event.add('exdate') entry.value = [date] return cal @@ -87,6 +144,9 @@ def utcise(cal): '''Removing local timezones in favour of UTC. If the remote calendar specifies a timezone then use it, otherwise assume it's in the user-specified or default values''' + if 'vevent_list' not in dir(cal): + return cal + from datetime import datetime from pytz import timezone @@ -114,6 +174,9 @@ def unwantedParams(cal): "TZID" ] + if 'vevent_list' not in dir(cal): + return cal + for event in cal.vevent_list: for attr in event.contents: attr = getattr(event, attr)