# HG changeset patch # User Paul Boddie # Date 1432130103 -7200 # Node ID fb085348317e8ea8a80f6fcf84021fbaea118b45 # Parent 4a707cba0ae75e057351b3aed6d242da385952aa Made common participation modification more flexible and adopted common participation and free/busy updating in the Web handler. diff -r 4a707cba0ae7 -r fb085348317e imiptools/client.py --- a/imiptools/client.py Wed May 20 15:06:33 2015 +0200 +++ b/imiptools/client.py Wed May 20 15:55:03 2015 +0200 @@ -109,14 +109,17 @@ # Common operations on calendar data. - def update_participation(self, obj, partstat): + def update_participation(self, obj, partstat=None): """ Update the participation in 'obj' of the user with the given 'partstat'. """ attendee_attr = uri_dict(obj.get_value_map("ATTENDEE")).get(self.user) - attendee_attr["PARTSTAT"] = partstat + if not attendee_attr: + return None + if partstat: + attendee_attr["PARTSTAT"] = partstat if attendee_attr.has_key("RSVP"): del attendee_attr["RSVP"] if self.messenger and self.messenger.sender != get_address(self.user): diff -r 4a707cba0ae7 -r fb085348317e imiptools/handlers/__init__.py --- a/imiptools/handlers/__init__.py Wed May 20 15:06:33 2015 +0200 +++ b/imiptools/handlers/__init__.py Wed May 20 15:55:03 2015 +0200 @@ -84,9 +84,6 @@ except OSError: self.publisher = None - def get_definitive_object(self, from_organiser): - return from_organiser and self.obj or self.get_object() - def set_object(self, obj): self.obj = obj self.uid = self.obj.get_uid() @@ -176,7 +173,7 @@ """ update_freebusy(freebusy, periods, - transp or self.obj.get_value("TRANSP"), + transp or self.obj.get_value("TRANSP") or "OPAQUE", self.uid, recurrenceid, self.obj.get_value("SUMMARY"), self.obj.get_value("ORGANIZER")) @@ -286,6 +283,11 @@ return identity in uri_values((obj or self.obj).get_values("ATTENDEE")) def can_schedule(self, freebusy, periods): + + """ + Indicate whether within 'freebusy' the given 'periods' can be scheduled. + """ + return can_schedule(freebusy, periods, self.uid, self.recurrenceid) def filter_by_senders(self, mapping): @@ -420,6 +422,16 @@ return self._get_object(self.uid, self.recurrenceid) + def get_definitive_object(self, from_organiser): + + """ + Return an object considered definitive for the current transaction, + using 'from_organiser' to select the current transaction's object if + true, or selecting a stored object if false. + """ + + return from_organiser and self.obj or self.get_object() + def get_parent_object(self): """ diff -r 4a707cba0ae7 -r fb085348317e imipweb/handler.py --- a/imipweb/handler.py Wed May 20 15:06:33 2015 +0200 +++ b/imipweb/handler.py Wed May 20 15:55:03 2015 +0200 @@ -80,12 +80,8 @@ # newer details (since the outgoing handler updates this user's # free/busy details). - update_freebusy(freebusy, - self.obj.get_periods(self.get_tzid(), self.get_window_end()), - self.obj.get_value("TRANSP") or "OPAQUE", - self.uid, self.recurrenceid, - self.obj.get_value("SUMMARY"), - organiser) + self.update_freebusy(freebusy, + self.obj.get_periods(self.get_tzid(), self.get_window_end())) user_attr = self.messenger and self.messenger.sender != get_address(self.user) and \ {"SENT-BY" : get_uri(self.messenger.sender)} or {} @@ -111,21 +107,14 @@ # Reply only on behalf of this user. - for attendee, attendee_attr in uri_items(self.obj.get_items("ATTENDEE")): + attendee_attr = self.update_participation(self.obj) - if attendee == self.user: - if attendee_attr.has_key("RSVP"): - del attendee_attr["RSVP"] - if self.messenger and self.messenger.sender != get_address(attendee): - attendee_attr["SENT-BY"] = get_uri(self.messenger.sender) - self.obj["ATTENDEE"] = [(attendee, attendee_attr)] - - self.update_dtstamp() - self.set_sequence(False) - - self.send_message("REPLY", get_address(attendee), from_organiser=False) - - return True + if attendee_attr: + self.obj["ATTENDEE"] = [(self.user, attendee_attr)] + self.update_dtstamp() + self.set_sequence(False) + self.send_message("REPLY", get_address(self.user), from_organiser=False) + return True return False