# HG changeset patch # User Paul Boddie # Date 1431819624 -7200 # Node ID 3bd8fc4435f8ba45ed679a27db7c4944936c4abe # Parent 72d9432ba43b545609c8be71a427ee05ab2e80a8 Made EventPeriod a subclass of RecurringPeriod, with both period types employing calendar-style end dates, and with FormPeriod employing user-oriented end dates. diff -r 72d9432ba43b -r 3bd8fc4435f8 imipweb/data.py --- a/imipweb/data.py Sun May 17 01:12:05 2015 +0200 +++ b/imipweb/data.py Sun May 17 01:40:24 2015 +0200 @@ -20,8 +20,8 @@ """ from datetime import datetime -from imiptools.data import get_tzid -from imiptools.dates import end_date_to_calendar, \ +from imiptools.data import RecurringPeriod +from imiptools.dates import end_date_from_calendar, end_date_to_calendar, \ format_datetime, get_datetime, get_end_of_day, \ to_date from imiptools.period import Period @@ -29,7 +29,7 @@ class PeriodError(Exception): pass -class EventPeriod(Period): +class EventPeriod(RecurringPeriod): """ A simple period plus attribute details, compatible with RecurringPeriod, and @@ -45,9 +45,7 @@ 'origin' indicating the kind of period this object describes. """ - Period.__init__(self, start, end, origin) - self.start_attr = start_attr - self.end_attr = end_attr + RecurringPeriod.__init__(self, start, end, origin, start_attr, end_attr) self.form_start = form_start self.form_end = form_end @@ -60,20 +58,6 @@ def as_event_period(self): return self - # Period data methods. - - def get_calendar_end(self): - return end_date_to_calendar(Period.get_end(self)) - - def get_tzid(self): - return get_tzid(self.start_attr, self.end_attr) - - def get_start_item(self): - return self.start, self.start_attr - - def get_end_item(self): - return self.end, self.end_attr - # Form data compatibility methods. def get_form_start(self): @@ -83,7 +67,7 @@ def get_form_end(self): if not self.form_end: - self.form_end = self.get_form_date(self.get_end(), self.end_attr) + self.form_end = self.get_form_date(end_date_from_calendar(self.get_end()), self.end_attr) return self.form_end def as_form_period(self): @@ -174,7 +158,7 @@ index is not None and ("dtend", index) or "dtend" ]) - return EventPeriod(dtstart, dtend, dtstart_attr, dtend_attr, self.start, self.end, self.origin) + return EventPeriod(dtstart, end_date_to_calendar(dtend), dtstart_attr, dtend_attr, self.start, self.end, self.origin) # Period data methods. @@ -306,6 +290,8 @@ else: dtstart, dtstart_attr = period.get_start_item() dtend, dtend_attr = period.get_end_item() + if not isinstance(period, RecurringPeriod): + dtend = end_date_to_calendar(dtend) return EventPeriod(dtstart, dtend, dtstart_attr, dtend_attr, origin=period.origin) def form_period_from_period(period): diff -r 72d9432ba43b -r 3bd8fc4435f8 imipweb/event.py --- a/imipweb/event.py Sun May 17 01:12:05 2015 +0200 +++ b/imipweb/event.py Sun May 17 01:40:24 2015 +0200 @@ -219,7 +219,7 @@ "Set in the given 'obj' the given 'period' as the main start and end." result = self.set_datetime_in_object(period.get_start(), period.start_attr and period.start_attr.get("TZID"), "DTSTART", obj) - result = self.set_datetime_in_object(period.get_calendar_end(), period.end_attr and period.end_attr.get("TZID"), "DTEND", obj) or result + result = self.set_datetime_in_object(period.get_end(), period.end_attr and period.end_attr.get("TZID"), "DTEND", obj) or result return result def set_periods_in_object(self, obj, periods): @@ -237,7 +237,7 @@ for p in periods: if p.origin != "RRULE": tzid = p.start_attr and p.start_attr.get("TZID") or p.end_attr and p.end_attr.get("TZID") - new_rdates.append(get_period_item(p.get_start(), p.get_calendar_end(), tzid)) + new_rdates.append(get_period_item(p.get_start(), p.get_end(), tzid)) obj["RDATE"] = new_rdates @@ -334,7 +334,7 @@ else: dtend, dtend_attr = dtstart, dtstart_attr - return EventPeriod(dtstart, end_date_from_calendar(dtend), dtstart_attr, dtend_attr) + return EventPeriod(dtstart, dtend, dtstart_attr, dtend_attr) def get_main_period(self):