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