1.1 --- a/imipweb/data.py Sun Oct 01 15:06:09 2017 +0200
1.2 +++ b/imipweb/data.py Sun Oct 01 15:08:20 2017 +0200
1.3 @@ -29,7 +29,31 @@
1.4 class PeriodError(Exception):
1.5 pass
1.6
1.7 -class EventPeriod(RecurringPeriod):
1.8 +class EditablePeriod(RecurringPeriod):
1.9 +
1.10 + "An editable period tracking the identity of any original period."
1.11 +
1.12 + def _get_recurrenceid_item(self):
1.13 +
1.14 + # Convert any stored identifier to the current time zone.
1.15 + # NOTE: This should not be necessary, but is done for consistency with
1.16 + # NOTE: the datetime properties.
1.17 +
1.18 + dt = get_datetime(self.recurrenceid)
1.19 + dt = to_timezone(dt, self.tzid)
1.20 + return dt, get_datetime_attributes(dt)
1.21 +
1.22 + def get_recurrenceid(self):
1.23 + if not self.recurrenceid:
1.24 + return EditablePeriod.get_recurrenceid(self)
1.25 + return self.recurrenceid
1.26 +
1.27 + def get_recurrenceid_item(self):
1.28 + if not self.recurrenceid:
1.29 + return EditablePeriod.get_recurrenceid_item(self)
1.30 + return self._get_recurrenceid_item()
1.31 +
1.32 +class EventPeriod(EditablePeriod):
1.33
1.34 """
1.35 A simple period plus attribute details, compatible with RecurringPeriod, and
1.36 @@ -60,7 +84,7 @@
1.37 regardless of whether it is separate or not.
1.38 """
1.39
1.40 - RecurringPeriod.__init__(self, start, end, tzid, origin, start_attr, end_attr)
1.41 + EditablePeriod.__init__(self, start, end, tzid, origin, start_attr, end_attr)
1.42 self.form_start = form_start
1.43 self.form_end = form_end
1.44
1.45 @@ -86,27 +110,7 @@
1.46 def copy(self):
1.47 return EventPeriod(*self.as_tuple())
1.48
1.49 - def _get_recurrenceid_item(self):
1.50 -
1.51 - # Convert any stored identifier to the current time zone.
1.52 - # NOTE: This should not be necessary, but is done for consistency with
1.53 - # NOTE: the datetime properties.
1.54 -
1.55 - dt = get_datetime(self.recurrenceid)
1.56 - dt = to_timezone(dt, self.tzid)
1.57 - return dt, get_datetime_attributes(dt)
1.58 -
1.59 - def get_recurrenceid(self):
1.60 - if not self.recurrenceid:
1.61 - return RecurringPeriod.get_recurrenceid(self)
1.62 - return self.recurrenceid
1.63 -
1.64 - def get_recurrenceid_item(self):
1.65 - if not self.recurrenceid:
1.66 - return RecurringPeriod.get_recurrenceid_item(self)
1.67 - return self._get_recurrenceid_item()
1.68 -
1.69 - def as_event_period(self):
1.70 + def as_event_period(self, index=None):
1.71 return self
1.72
1.73 def get_start_item(self):
1.74 @@ -150,7 +154,7 @@
1.75 dt, attr
1.76 )
1.77
1.78 -class FormPeriod(RecurringPeriod):
1.79 +class FormPeriod(EditablePeriod):
1.80
1.81 "A period whose information originates from a form."
1.82
1.83 @@ -364,7 +368,7 @@
1.84 else:
1.85 return {"VALUE" : "DATE"}
1.86
1.87 -def event_period_from_period(period):
1.88 +def event_period_from_period(period, index=None):
1.89
1.90 """
1.91 Convert a 'period' to one suitable for use in an iCalendar representation.
1.92 @@ -375,7 +379,7 @@
1.93 if isinstance(period, EventPeriod):
1.94 return period
1.95 elif isinstance(period, FormPeriod):
1.96 - return period.as_event_period()
1.97 + return period.as_event_period(index)
1.98 else:
1.99 dtstart, dtstart_attr = period.get_start_item()
1.100 dtend, dtend_attr = period.get_end_item()
1.101 @@ -388,7 +392,7 @@
1.102 recurrenceid=format_datetime(to_utc_datetime(dtstart)))
1.103
1.104 def event_periods_from_periods(periods):
1.105 - return map(event_period_from_period, periods)
1.106 + return map(event_period_from_period, periods, range(0, len(periods)))
1.107
1.108 def form_period_from_period(period):
1.109