1.1 --- a/imiptools/client.py Wed May 20 15:06:33 2015 +0200
1.2 +++ b/imiptools/client.py Wed May 20 15:55:03 2015 +0200
1.3 @@ -109,14 +109,17 @@
1.4
1.5 # Common operations on calendar data.
1.6
1.7 - def update_participation(self, obj, partstat):
1.8 + def update_participation(self, obj, partstat=None):
1.9
1.10 """
1.11 Update the participation in 'obj' of the user with the given 'partstat'.
1.12 """
1.13
1.14 attendee_attr = uri_dict(obj.get_value_map("ATTENDEE")).get(self.user)
1.15 - attendee_attr["PARTSTAT"] = partstat
1.16 + if not attendee_attr:
1.17 + return None
1.18 + if partstat:
1.19 + attendee_attr["PARTSTAT"] = partstat
1.20 if attendee_attr.has_key("RSVP"):
1.21 del attendee_attr["RSVP"]
1.22 if self.messenger and self.messenger.sender != get_address(self.user):
2.1 --- a/imiptools/handlers/__init__.py Wed May 20 15:06:33 2015 +0200
2.2 +++ b/imiptools/handlers/__init__.py Wed May 20 15:55:03 2015 +0200
2.3 @@ -84,9 +84,6 @@
2.4 except OSError:
2.5 self.publisher = None
2.6
2.7 - def get_definitive_object(self, from_organiser):
2.8 - return from_organiser and self.obj or self.get_object()
2.9 -
2.10 def set_object(self, obj):
2.11 self.obj = obj
2.12 self.uid = self.obj.get_uid()
2.13 @@ -176,7 +173,7 @@
2.14 """
2.15
2.16 update_freebusy(freebusy, periods,
2.17 - transp or self.obj.get_value("TRANSP"),
2.18 + transp or self.obj.get_value("TRANSP") or "OPAQUE",
2.19 self.uid, recurrenceid,
2.20 self.obj.get_value("SUMMARY"),
2.21 self.obj.get_value("ORGANIZER"))
2.22 @@ -286,6 +283,11 @@
2.23 return identity in uri_values((obj or self.obj).get_values("ATTENDEE"))
2.24
2.25 def can_schedule(self, freebusy, periods):
2.26 +
2.27 + """
2.28 + Indicate whether within 'freebusy' the given 'periods' can be scheduled.
2.29 + """
2.30 +
2.31 return can_schedule(freebusy, periods, self.uid, self.recurrenceid)
2.32
2.33 def filter_by_senders(self, mapping):
2.34 @@ -420,6 +422,16 @@
2.35
2.36 return self._get_object(self.uid, self.recurrenceid)
2.37
2.38 + def get_definitive_object(self, from_organiser):
2.39 +
2.40 + """
2.41 + Return an object considered definitive for the current transaction,
2.42 + using 'from_organiser' to select the current transaction's object if
2.43 + true, or selecting a stored object if false.
2.44 + """
2.45 +
2.46 + return from_organiser and self.obj or self.get_object()
2.47 +
2.48 def get_parent_object(self):
2.49
2.50 """
3.1 --- a/imipweb/handler.py Wed May 20 15:06:33 2015 +0200
3.2 +++ b/imipweb/handler.py Wed May 20 15:55:03 2015 +0200
3.3 @@ -80,12 +80,8 @@
3.4 # newer details (since the outgoing handler updates this user's
3.5 # free/busy details).
3.6
3.7 - update_freebusy(freebusy,
3.8 - self.obj.get_periods(self.get_tzid(), self.get_window_end()),
3.9 - self.obj.get_value("TRANSP") or "OPAQUE",
3.10 - self.uid, self.recurrenceid,
3.11 - self.obj.get_value("SUMMARY"),
3.12 - organiser)
3.13 + self.update_freebusy(freebusy,
3.14 + self.obj.get_periods(self.get_tzid(), self.get_window_end()))
3.15
3.16 user_attr = self.messenger and self.messenger.sender != get_address(self.user) and \
3.17 {"SENT-BY" : get_uri(self.messenger.sender)} or {}
3.18 @@ -111,21 +107,14 @@
3.19
3.20 # Reply only on behalf of this user.
3.21
3.22 - for attendee, attendee_attr in uri_items(self.obj.get_items("ATTENDEE")):
3.23 + attendee_attr = self.update_participation(self.obj)
3.24
3.25 - if attendee == self.user:
3.26 - if attendee_attr.has_key("RSVP"):
3.27 - del attendee_attr["RSVP"]
3.28 - if self.messenger and self.messenger.sender != get_address(attendee):
3.29 - attendee_attr["SENT-BY"] = get_uri(self.messenger.sender)
3.30 - self.obj["ATTENDEE"] = [(attendee, attendee_attr)]
3.31 -
3.32 - self.update_dtstamp()
3.33 - self.set_sequence(False)
3.34 -
3.35 - self.send_message("REPLY", get_address(attendee), from_organiser=False)
3.36 -
3.37 - return True
3.38 + if attendee_attr:
3.39 + self.obj["ATTENDEE"] = [(self.user, attendee_attr)]
3.40 + self.update_dtstamp()
3.41 + self.set_sequence(False)
3.42 + self.send_message("REPLY", get_address(self.user), from_organiser=False)
3.43 + return True
3.44
3.45 return False
3.46