1.1 --- a/imiptools/data.py Mon Apr 06 00:38:24 2015 +0200
1.2 +++ b/imiptools/data.py Mon Apr 06 00:39:51 2015 +0200
1.3 @@ -377,15 +377,17 @@
1.4
1.5 "A period with origin information from the object."
1.6
1.7 - def __init__(self, start, end, origin):
1.8 + def __init__(self, start, end, origin, start_attr=None, end_attr=None):
1.9 Period.__init__(self, start, end)
1.10 self.origin = origin
1.11 + self.start_attr = start_attr
1.12 + self.end_attr = end_attr
1.13
1.14 def as_tuple(self):
1.15 - return self.start, self.end, self.origin
1.16 + return self.start, self.end, self.origin, self.start_attr, self.end_attr
1.17
1.18 def __repr__(self):
1.19 - return "RecurringPeriod(%r, %r, %r)" % (self.start, self.end, self.origin)
1.20 + return "RecurringPeriod(%r, %r, %r, %r, %r)" % (self.start, self.end, self.origin, self.start_attr, self.end_attr)
1.21
1.22 def get_periods(obj, tzid, window_end, inclusive=False):
1.23
1.24 @@ -414,7 +416,7 @@
1.25 tzid = get_tzid(dtstart_attr, dtend_attr) or tzid
1.26
1.27 if not rrule:
1.28 - periods = [RecurringPeriod(dtstart, dtend, "DTSTART")]
1.29 + periods = [RecurringPeriod(dtstart, dtend, "DTSTART", dtstart_attr, dtend_attr)]
1.30 else:
1.31 # Recurrence rules create multiple instances to be checked.
1.32 # Conflicts may only be assessed within a period defined by policy
1.33 @@ -432,19 +434,17 @@
1.34
1.35 # Add recurrence dates.
1.36
1.37 - periods = set(periods)
1.38 - rdates = obj.get_date_values("RDATE", tzid)
1.39 + rdates = obj.get_date_value_items("RDATE", tzid)
1.40
1.41 if rdates:
1.42 - for rdate in rdates:
1.43 + for rdate, rdate_attr in rdates:
1.44 if isinstance(rdate, tuple):
1.45 - periods.add(RecurringPeriod(rdate[0], rdate[1], "RDATE"))
1.46 + periods.append(RecurringPeriod(rdate[0], rdate[1], "RDATE", rdate_attr))
1.47 else:
1.48 - periods.add(RecurringPeriod(rdate, rdate + duration, "RDATE"))
1.49 + periods.append(RecurringPeriod(rdate, rdate + duration, "RDATE", rdate_attr))
1.50
1.51 # Return a sorted list of the periods.
1.52
1.53 - periods = list(periods)
1.54 periods.sort(cmp=compare_periods(tzid))
1.55
1.56 # Exclude exception dates.