3 commits - pykolab/xml tests/unit

Thomas Brüderli bruederli at kolabsys.com
Wed Feb 18 22:33:55 CET 2015


 pykolab/xml/event.py         |   45 ++++++++++++++++++++++++-------------------
 pykolab/xml/todo.py          |    1 
 tests/unit/test-003-event.py |    6 +++++
 3 files changed, 33 insertions(+), 19 deletions(-)

New commits:
commit 45dd176eba6898c5ead49efe20a5f951e8a5eb72
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Tue Feb 17 14:59:47 2015 +0100

    Fix setter for event attendees; Avoid errors about missing _exceptions attribute

diff --git a/pykolab/xml/event.py b/pykolab/xml/event.py
index bff759d..398814f 100644
--- a/pykolab/xml/event.py
+++ b/pykolab/xml/event.py
@@ -702,13 +702,13 @@ class Event(object):
     def get_transparency(self):
         return self.event.transparency()
 
-    def set_attendees(self, _attendees):
-        self._attendees = _attendees
-        self.event.setAttendees(self._attendees)
-
-        # apply update to all exceptions
-        for exception in self._exceptions:
-            exception.merge_attendee_data(_attendees)
+    def set_attendees(self, _attendees, recursive=False):
+        if recursive:
+            self._attendees = []
+            self.update_attendees(_attendees, True)
+        else:
+            self._attendees = _attendees
+            self.event.setAttendees(self._attendees)
 
     def set_attendee_participant_status(self, attendee, status, rsvp=None):
         """
diff --git a/pykolab/xml/todo.py b/pykolab/xml/todo.py
index 303dd63..adc4e2b 100644
--- a/pykolab/xml/todo.py
+++ b/pykolab/xml/todo.py
@@ -41,6 +41,7 @@ class Todo(Event):
     def __init__(self, from_ical="", from_string=""):
         self._attendees = []
         self._categories = []
+        self._exceptions = []
         self._attachment_parts = []
 
         self.properties_map.update({


commit 71c1450337b64d1cb9b010b83e9cc543c01dee4c
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Tue Feb 17 12:16:58 2015 +0100

    Add getter for ical_lastmodified property; print type with InvalidEventDateError exceptions

diff --git a/pykolab/xml/event.py b/pykolab/xml/event.py
index 3fdd8dc..bff759d 100644
--- a/pykolab/xml/event.py
+++ b/pykolab/xml/event.py
@@ -176,7 +176,7 @@ class Event(object):
             valid_datetime = True
 
         if not valid_datetime:
-            raise InvalidEventDateError, _("Event start needs datetime.date or datetime.datetime instance")
+            raise InvalidEventDateError, _("Exdate needs datetime.date or datetime.datetime instance, got %r") % (type(_datetime))
 
         self.event.addExceptionDate(xmlutils.to_cdatetime(_datetime, True))
 
@@ -597,6 +597,9 @@ class Event(object):
         except:
             return datetime.datetime.now()
 
+    def get_ical_lastmodified(self):
+        return self.get_ical_dtstamp()
+
     def get_ical_dtstart(self):
         return self.get_start()
 
@@ -786,7 +789,7 @@ class Event(object):
             valid_datetime = True
 
         if not valid_datetime:
-            raise InvalidEventDateError, _("Event end needs datetime.date or datetime.datetime instance")
+            raise InvalidEventDateError, _("Event end needs datetime.date or datetime.datetime instance, got %r") % (type(_datetime))
 
         self.event.setEnd(xmlutils.to_cdatetime(_datetime, True))
 
@@ -931,7 +934,7 @@ class Event(object):
             _datetime = datetime.datetime.utcnow()
 
         if not valid_datetime:
-            raise InvalidEventDateError, _("Event start needs datetime.date or datetime.datetime instance")
+            raise InvalidEventDateError, _("Event last-modified needs datetime.date or datetime.datetime instance, got %r") % (type(_datetime))
 
         self.event.setLastModified(xmlutils.to_cdatetime(_datetime, False, True))
 
@@ -974,7 +977,7 @@ class Event(object):
             valid_datetime = True
 
         if not valid_datetime:
-            raise InvalidEventDateError, _("Event start needs datetime.date or datetime.datetime instance")
+            raise InvalidEventDateError, _("Event start needs datetime.date or datetime.datetime instance, got %r") % (type(_datetime))
 
         self.event.setStart(xmlutils.to_cdatetime(_datetime, True))
 


commit 073abc3611c52707f4a5fc63ab964f960366a9a6
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Tue Feb 17 10:29:19 2015 +0100

    Fix attendee updates on exceptions

diff --git a/pykolab/xml/event.py b/pykolab/xml/event.py
index 325cbc5..3fdd8dc 100644
--- a/pykolab/xml/event.py
+++ b/pykolab/xml/event.py
@@ -157,7 +157,7 @@ class Event(object):
             attendee = Attendee(email_or_attendee, name, rsvp, role, participant_status, cutype, params)
 
         # apply update to self and all exceptions
-        self.update_attendees([attendee])
+        self.update_attendees([attendee], True)
 
     def add_category(self, category):
         self._categories.append(ustr(category))
@@ -722,15 +722,19 @@ class Event(object):
             attendee.set_rsvp(rsvp)
 
         # apply update to self and all exceptions
-        self.update_attendees([attendee])
+        self.update_attendees([attendee], False)
 
-    def update_attendees(self, _attendees):
-        self.merge_attendee_data(_attendees)
+    def update_attendees(self, _attendees, append=True):
+        self.merge_attendee_data(_attendees, append)
 
-        for exception in self._exceptions:
-            exception.merge_attendee_data(_attendees)
+        if len(self._exceptions):
+            vexceptions = self.event.exceptions()
+            for i, exception in enumerate(self._exceptions):
+                exception.merge_attendee_data(_attendees, append)
+                vexceptions[i] = exception.event
+            self.event.setExceptions(vexceptions)
 
-    def merge_attendee_data(self, _attendees):
+    def merge_attendee_data(self, _attendees, append=True):
         for attendee in _attendees:
             found = False
 
@@ -740,7 +744,7 @@ class Event(object):
                     found = True
                     break
 
-            if not found:
+            if not found and append:
                 self._attendees.append(attendee)
 
         self.event.setAttendees(self._attendees)
diff --git a/tests/unit/test-003-event.py b/tests/unit/test-003-event.py
index 1d0ad10..d79d877 100644
--- a/tests/unit/test-003-event.py
+++ b/tests/unit/test-003-event.py
@@ -855,16 +855,22 @@ END:VEVENT
         jane = event.get_attendee("jane at example.org")
         jane.set_participant_status('TENTATIVE')
         jack = Attendee("jack at example.org", name="Jack", role='OPT-PARTICIPANT')
+        some = event.set_attendee_participant_status("somebody at else.com", 'ACCEPTED')
 
         # update jane + add jack
         event.update_attendees([jane,jack])
         self.assertEqual(len(event.get_attendees()), 3)
         self.assertEqual(event.get_attendee("jane at example.org").get_participant_status(), kolabformat.PartTentative)
+        self.assertEqual(event.get_attendee("somebody at else.com").get_participant_status(), kolabformat.PartAccepted)
 
+        # test write + read
+        event = event_from_string(str(event))
         exception = event.get_exceptions()[0]
         self.assertEqual(len(exception.get_attendees()), 2)
         self.assertEqual(event.get_attendee("jane at example.org").get_participant_status(), kolabformat.PartTentative)
         self.assertEqual(event.get_attendee("jack at example.org").get_name(), "Jack")
+        self.assertRaises(ValueError, exception.get_attendee, "somebody at else.com")  # not addded to exception
+
 
     def _find_prop_in_list(self, diff, name):
         for prop in diff:




More information about the commits mailing list