# HG changeset patch # User Paul Boddie # Date 1431901597 -7200 # Node ID ade19f50b58e7a4b779bbb69f1803aaa1896baa1 # Parent 88cd1741a2a2b8d96c34cae23d4089cb1768ec57 Produce recurring periods employing dates if they are involved. Handle missing DTSTART when encountering CANCEL messages. diff -r 88cd1741a2a2 -r ade19f50b58e imiptools/data.py --- a/imiptools/data.py Sun May 17 22:57:31 2015 +0200 +++ b/imiptools/data.py Mon May 18 00:26:37 2015 +0200 @@ -20,7 +20,7 @@ """ from bisect import bisect_left -from datetime import datetime, timedelta +from datetime import date, datetime, timedelta from email.mime.text import MIMEText from imiptools.dates import format_datetime, get_datetime, get_duration, \ get_freebusy_period, get_period, get_tzid, \ @@ -127,6 +127,8 @@ return get_periods(self, tzid, end) def get_tzid(self): + if not self.has_key("DTSTART"): + return None dtstart, dtstart_attr = self.get_datetime_item("DTSTART") dtend, dtend_attr = self.get_datetime_item("DTEND") return get_tzid(dtstart_attr, dtend_attr) @@ -439,7 +441,8 @@ inclusive = True for start in selector.materialise(dtstart, window_end, parameters.get("COUNT"), parameters.get("BYSETPOS"), inclusive): - start = to_timezone(datetime(*start), tzid) + create = len(start) == 3 and date or datetime + start = to_timezone(create(*start), tzid) end = start + duration periods.append(RecurringPeriod(start, end, tzid, "RRULE"))