# HG changeset patch # User Paul Boddie # Date 1431817925 -7200 # Node ID 72d9432ba43b545609c8be71a427ee05ab2e80a8 # Parent adb3b079f2c4b91a1e24eb613ee861165a41a152 Fixed end dates broken in recent period-related changes, removing implicit end date adjustment when converting between period types. diff -r adb3b079f2c4 -r 72d9432ba43b imipweb/data.py --- a/imipweb/data.py Sun May 17 00:40:01 2015 +0200 +++ b/imipweb/data.py Sun May 17 01:12:05 2015 +0200 @@ -19,10 +19,10 @@ this program. If not, see . """ -from datetime import datetime, timedelta +from datetime import datetime from imiptools.data import get_tzid -from imiptools.dates import end_date_from_calendar, end_date_to_calendar, \ - format_datetime, get_datetime, get_start_of_day, \ +from imiptools.dates import end_date_to_calendar, \ + format_datetime, get_datetime, get_end_of_day, \ to_date from imiptools.period import Period @@ -62,10 +62,8 @@ # Period data methods. - # get_start inherited - - def get_end(self): - return end_date_from_calendar(Period.get_end(self)) + 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) @@ -127,16 +125,14 @@ def _get_start(self): return self.start.as_datetime(self.times_enabled), self.start.get_attributes(self.times_enabled) - def _get_end(self, adjust=False): + def _get_end(self): # Handle specified end datetimes. if self.end_enabled: dtend = self.end.as_datetime(self.times_enabled) dtend_attr = self.end.get_attributes(self.times_enabled) - if dtend: - dtend = adjust and end_date_to_calendar(dtend) or dtend - else: + if not dtend: return None, None # Otherwise, treat the end date as the start date. Datetimes are @@ -145,11 +141,12 @@ else: dtstart, dtstart_attr = self._get_start() if dtstart: - dtend = dtstart + timedelta(1) dtend_attr = dtstart_attr if isinstance(dtstart, datetime): - dtend = get_start_of_day(dtend, dtend_attr["TZID"]) + dtend = get_end_of_day(dtstart, dtstart_attr["TZID"]) + else: + dtend = dtstart else: return None, None @@ -167,7 +164,7 @@ if not dtstart: raise PeriodError(*[index is not None and ("dtstart", index) or "dtstart"]) - dtend, dtend_attr = self._get_end(adjust=True) + dtend, dtend_attr = self._get_end() if not dtend: raise PeriodError(*[index is not None and ("dtend", index) or "dtend"]) diff -r adb3b079f2c4 -r 72d9432ba43b imipweb/event.py --- a/imipweb/event.py Sun May 17 00:40:01 2015 +0200 +++ b/imipweb/event.py Sun May 17 01:12:05 2015 +0200 @@ -22,8 +22,9 @@ from datetime import date, datetime, timedelta from imiptools.client import update_attendees, update_participation from imiptools.data import get_uri, uri_dict, uri_values -from imiptools.dates import format_datetime, to_date, get_datetime, \ - get_datetime_item, get_period_item, to_datetime, \ +from imiptools.dates import end_date_from_calendar, format_datetime, \ + get_datetime, get_datetime_item, get_period_item, \ + to_date, to_datetime, \ to_recurrence_start, to_timezone, to_utc_datetime from imiptools.mail import Messenger from imiptools.period import have_conflict @@ -93,6 +94,7 @@ args = self.env.get_args() uid = obj.get_uid() + recurrenceid = obj.get_recurrenceid() # Get the possible actions. @@ -216,9 +218,8 @@ "Set in the given 'obj' the given 'period' as the main start and end." - p = event_period_from_period(period) - result = self.set_datetime_in_object(p.get_start(), p.start_attr and p.start_attr.get("TZID"), "DTSTART", obj) - result = self.set_datetime_in_object(p.get_end(), p.end_attr and p.end_attr.get("TZID"), "DTEND", obj) or result + 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 return result def set_periods_in_object(self, obj, periods): @@ -236,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_end(), tzid)) + new_rdates.append(get_period_item(p.get_start(), p.get_calendar_end(), tzid)) obj["RDATE"] = new_rdates @@ -333,7 +334,7 @@ else: dtend, dtend_attr = dtstart, dtstart_attr - return EventPeriod(dtstart, dtend, dtstart_attr, dtend_attr) + return EventPeriod(dtstart, end_date_from_calendar(dtend), dtstart_attr, dtend_attr) def get_main_period(self):