pykolab/xml tests/unit

Thomas Brüderli bruederli at kolabsys.com
Mon Mar 2 16:36:18 CET 2015


 pykolab/xml/event.py         |   10 +++++++++-
 tests/unit/test-003-event.py |    8 ++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

New commits:
commit 14c14b74411d6a32d5948cdbdc09eaf1ce8b7c5a
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Mon Mar 2 10:36:13 2015 -0500

    Make sure stored recurrence-id properties are returned as the correct date/datetime type (#4752)

diff --git a/pykolab/xml/event.py b/pykolab/xml/event.py
index 7a81ab8..ab643a5 100644
--- a/pykolab/xml/event.py
+++ b/pykolab/xml/event.py
@@ -700,7 +700,15 @@ class Event(object):
 
     def get_recurrence_id(self):
         self.thisandfuture = self.event.thisAndFuture();
-        return xmlutils.from_cdatetime(self.event.recurrenceID(), True)
+        recurrence_id = xmlutils.from_cdatetime(self.event.recurrenceID(), True)
+
+        # fix recurrence-id type if stored as date instead of datetime
+        if recurrence_id is not None and isinstance(recurrence_id, datetime.date):
+            dtstart = self.get_start()
+            if not type(recurrence_id) == type(dtstart):
+                recurrence_id = datetime.datetime.combine(recurrence_id, dtstart.time()).replace(tzinfo=dtstart.tzinfo)
+
+        return recurrence_id
 
     def get_thisandfuture(self):
         self.thisandfuture = self.event.thisAndFuture();
diff --git a/tests/unit/test-003-event.py b/tests/unit/test-003-event.py
index 5798101..f039ca1 100644
--- a/tests/unit/test-003-event.py
+++ b/tests/unit/test-003-event.py
@@ -814,6 +814,14 @@ END:VEVENT
         self.assertIsInstance(occurrence, Event)
         self.assertEqual(str(occurrence.get_recurrence_id()), "2014-08-15 10:00:00+01:00")
 
+        # set invalid date-only recurrence-id
+        exception.set_recurrence_id(datetime.date(2014,8,16))
+        event.add_exception(exception)
+
+        inst = event.get_next_instance(_recurrence_id);
+        self.assertIsInstance(inst, Event)
+        self.assertIsInstance(inst.get_recurrence_id(), datetime.datetime)
+
     def test_023_load_from_message(self):
         event = event_from_message(event_from_ical(ical_event).to_message())
         event.set_sequence(3)




More information about the commits mailing list