1.1 --- a/imipweb/data.py Sun May 17 00:40:01 2015 +0200
1.2 +++ b/imipweb/data.py Sun May 17 01:12:05 2015 +0200
1.3 @@ -19,10 +19,10 @@
1.4 this program. If not, see <http://www.gnu.org/licenses/>.
1.5 """
1.6
1.7 -from datetime import datetime, timedelta
1.8 +from datetime import datetime
1.9 from imiptools.data import get_tzid
1.10 -from imiptools.dates import end_date_from_calendar, end_date_to_calendar, \
1.11 - format_datetime, get_datetime, get_start_of_day, \
1.12 +from imiptools.dates import end_date_to_calendar, \
1.13 + format_datetime, get_datetime, get_end_of_day, \
1.14 to_date
1.15 from imiptools.period import Period
1.16
1.17 @@ -62,10 +62,8 @@
1.18
1.19 # Period data methods.
1.20
1.21 - # get_start inherited
1.22 -
1.23 - def get_end(self):
1.24 - return end_date_from_calendar(Period.get_end(self))
1.25 + def get_calendar_end(self):
1.26 + return end_date_to_calendar(Period.get_end(self))
1.27
1.28 def get_tzid(self):
1.29 return get_tzid(self.start_attr, self.end_attr)
1.30 @@ -127,16 +125,14 @@
1.31 def _get_start(self):
1.32 return self.start.as_datetime(self.times_enabled), self.start.get_attributes(self.times_enabled)
1.33
1.34 - def _get_end(self, adjust=False):
1.35 + def _get_end(self):
1.36
1.37 # Handle specified end datetimes.
1.38
1.39 if self.end_enabled:
1.40 dtend = self.end.as_datetime(self.times_enabled)
1.41 dtend_attr = self.end.get_attributes(self.times_enabled)
1.42 - if dtend:
1.43 - dtend = adjust and end_date_to_calendar(dtend) or dtend
1.44 - else:
1.45 + if not dtend:
1.46 return None, None
1.47
1.48 # Otherwise, treat the end date as the start date. Datetimes are
1.49 @@ -145,11 +141,12 @@
1.50 else:
1.51 dtstart, dtstart_attr = self._get_start()
1.52 if dtstart:
1.53 - dtend = dtstart + timedelta(1)
1.54 dtend_attr = dtstart_attr
1.55
1.56 if isinstance(dtstart, datetime):
1.57 - dtend = get_start_of_day(dtend, dtend_attr["TZID"])
1.58 + dtend = get_end_of_day(dtstart, dtstart_attr["TZID"])
1.59 + else:
1.60 + dtend = dtstart
1.61 else:
1.62 return None, None
1.63
1.64 @@ -167,7 +164,7 @@
1.65 if not dtstart:
1.66 raise PeriodError(*[index is not None and ("dtstart", index) or "dtstart"])
1.67
1.68 - dtend, dtend_attr = self._get_end(adjust=True)
1.69 + dtend, dtend_attr = self._get_end()
1.70 if not dtend:
1.71 raise PeriodError(*[index is not None and ("dtend", index) or "dtend"])
1.72
2.1 --- a/imipweb/event.py Sun May 17 00:40:01 2015 +0200
2.2 +++ b/imipweb/event.py Sun May 17 01:12:05 2015 +0200
2.3 @@ -22,8 +22,9 @@
2.4 from datetime import date, datetime, timedelta
2.5 from imiptools.client import update_attendees, update_participation
2.6 from imiptools.data import get_uri, uri_dict, uri_values
2.7 -from imiptools.dates import format_datetime, to_date, get_datetime, \
2.8 - get_datetime_item, get_period_item, to_datetime, \
2.9 +from imiptools.dates import end_date_from_calendar, format_datetime, \
2.10 + get_datetime, get_datetime_item, get_period_item, \
2.11 + to_date, to_datetime, \
2.12 to_recurrence_start, to_timezone, to_utc_datetime
2.13 from imiptools.mail import Messenger
2.14 from imiptools.period import have_conflict
2.15 @@ -93,6 +94,7 @@
2.16
2.17 args = self.env.get_args()
2.18 uid = obj.get_uid()
2.19 + recurrenceid = obj.get_recurrenceid()
2.20
2.21 # Get the possible actions.
2.22
2.23 @@ -216,9 +218,8 @@
2.24
2.25 "Set in the given 'obj' the given 'period' as the main start and end."
2.26
2.27 - p = event_period_from_period(period)
2.28 - result = self.set_datetime_in_object(p.get_start(), p.start_attr and p.start_attr.get("TZID"), "DTSTART", obj)
2.29 - result = self.set_datetime_in_object(p.get_end(), p.end_attr and p.end_attr.get("TZID"), "DTEND", obj) or result
2.30 + result = self.set_datetime_in_object(period.get_start(), period.start_attr and period.start_attr.get("TZID"), "DTSTART", obj)
2.31 + result = self.set_datetime_in_object(period.get_calendar_end(), period.end_attr and period.end_attr.get("TZID"), "DTEND", obj) or result
2.32 return result
2.33
2.34 def set_periods_in_object(self, obj, periods):
2.35 @@ -236,7 +237,7 @@
2.36 for p in periods:
2.37 if p.origin != "RRULE":
2.38 tzid = p.start_attr and p.start_attr.get("TZID") or p.end_attr and p.end_attr.get("TZID")
2.39 - new_rdates.append(get_period_item(p.get_start(), p.get_end(), tzid))
2.40 + new_rdates.append(get_period_item(p.get_start(), p.get_calendar_end(), tzid))
2.41
2.42 obj["RDATE"] = new_rdates
2.43
2.44 @@ -333,7 +334,7 @@
2.45 else:
2.46 dtend, dtend_attr = dtstart, dtstart_attr
2.47
2.48 - return EventPeriod(dtstart, dtend, dtstart_attr, dtend_attr)
2.49 + return EventPeriod(dtstart, end_date_from_calendar(dtend), dtstart_attr, dtend_attr)
2.50
2.51 def get_main_period(self):
2.52