pykolab/xml tests/unit wallace/module_invitationpolicy.py

Thomas Brüderli bruederli at kolabsys.com
Wed Mar 11 09:49:03 CET 2015


 pykolab/xml/recurrence_rule.py     |    4 ++++
 tests/unit/test-003-event.py       |    3 ++-
 wallace/module_invitationpolicy.py |    3 +--
 3 files changed, 7 insertions(+), 3 deletions(-)

New commits:
commit e731c861ebcb52ef33296b53f2a72099a4ae5161
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Tue Mar 10 06:17:26 2015 -0400

    Force RRULE UNTIL attribute to be a UTC date/time but also account for it to be a date-only value

diff --git a/pykolab/xml/recurrence_rule.py b/pykolab/xml/recurrence_rule.py
index 30ab10a..6f6c7d8 100644
--- a/pykolab/xml/recurrence_rule.py
+++ b/pykolab/xml/recurrence_rule.py
@@ -1,3 +1,4 @@
+import pytz
 import icalendar
 import datetime
 import kolabformat
@@ -166,6 +167,9 @@ class RecurrenceRule(kolabformat.RecurrenceRule):
         if isinstance(until, list):
             until = until[0]
         if isinstance(until, datetime.datetime) or isinstance(until, datetime.date):
+            # move into UTC timezone according to RFC 5545
+            if isinstance(until, datetime.datetime):
+                until = until.astimezone(pytz.utc)
             self.setEnd(xmlutils.to_cdatetime(until, True))
 
     def _set_map_value(self, val, pmap, setter):
diff --git a/tests/unit/test-003-event.py b/tests/unit/test-003-event.py
index f039ca1..4e14cd4 100644
--- a/tests/unit/test-003-event.py
+++ b/tests/unit/test-003-event.py
@@ -542,7 +542,7 @@ END:VEVENT
         rrule.set_byday(['2WE','-1SU'])
         rrule.setBymonth([2])
         rrule.set_count(10)
-        rrule.set_until(datetime.datetime(2014,7,23, 11,0,0, tzinfo=pytz.utc))
+        rrule.set_until(datetime.datetime(2014,7,23, 11,0,0, tzinfo=pytz.timezone("Europe/London")))
         self.event.set_recurrence(rrule);
 
         ical = icalendar.Calendar.from_ical(self.event.as_string_itip())
@@ -564,6 +564,7 @@ END:VEVENT
         self.assertEqual(event['rrule']['BYMONTH'][0], 2)
         self.assertEqual(event['rrule']['BYDAY'], ['2WE','-1SU'])
         self.assertIsInstance(event['rrule']['UNTIL'][0], datetime.datetime)
+        self.assertEquals(event['rrule']['UNTIL'][0].tzinfo, pytz.utc)
 
     def test_019_to_message_itip(self):
         self.event = Event()
diff --git a/wallace/module_invitationpolicy.py b/wallace/module_invitationpolicy.py
index 72a4464..ee96634 100644
--- a/wallace/module_invitationpolicy.py
+++ b/wallace/module_invitationpolicy.py
@@ -18,7 +18,6 @@
 #
 
 import datetime
-import pytz
 import os
 import tempfile
 import time
@@ -608,7 +607,7 @@ def process_itip_cancel(itip_event, policy, recipient_email, sender_email, recei
             if itip_event['recurrence-id'] and master and itip_event['xml'].get_thisandfuture():
                 rrule = master.get_recurrence()
                 rrule.set_count(0)
-                rrule.set_until(existing.get_start().astimezone(pytz.utc) + datetime.timedelta(days=-1))
+                rrule.set_until(existing.get_start() + datetime.timedelta(days=-1))
                 master.set_recurrence(rrule)
                 existing.set_recurrence_id(existing.get_recurrence_id(), True)
 




More information about the commits mailing list