# HG changeset patch # User Paul Boddie # Date 1418941496 -3600 # Node ID 33a8c753637c75e424d6822580749bead5ee17be # Parent cba0ca85b83eb14f2303bbad390b7abe88d3c797 Support event cancellations issued by a person. diff -r cba0ca85b83e -r 33a8c753637c imiptools/handlers/person_outgoing.py --- a/imiptools/handlers/person_outgoing.py Thu Dec 18 22:18:53 2014 +0100 +++ b/imiptools/handlers/person_outgoing.py Thu Dec 18 23:24:56 2014 +0100 @@ -12,17 +12,32 @@ "Handling mechanisms specific to people." - def _record(self, objtype, from_organiser=True, update_freebusy=False): + def _get_identity(self, objtype, from_organiser=True): - # Get the identity of interest in a usable form. + """ + Get the identity of interest in a usable form for any unprocessed + object. + """ - identity, attr = uri_item(self.get_item(from_organiser and "ORGANIZER" or "ATTENDEE")) + identity, attr = item = uri_item(self.get_item(from_organiser and "ORGANIZER" or "ATTENDEE")) # Check for event using UID. if not self.have_new_object(identity, objtype): + return None + + return item + + def _record(self, objtype, from_organiser=True, update_freebusy=False): + + "Record free/busy and object information." + + item = self._get_identity(objtype, from_organiser) + if not item: return False + identity, attr = item + # Store the object. self.store.set_event(identity, self.uid, to_node( @@ -49,6 +64,21 @@ return True + def _remove(self, objtype, from_organiser=True): + + "Remove free/busy information for any unprocessed object." + + item = self._get_identity(objtype, from_organiser) + if not item: + return False + + identity, attr = item + + freebusy = self.store.get_freebusy(identity) or [] + self.remove_from_freebusy(freebusy, identity) + + return True + class Event(PersonHandler): "An event handler." @@ -57,7 +87,7 @@ pass def cancel(self): - pass + self._remove("VEVENT", True) def counter(self): pass @@ -98,7 +128,7 @@ pass def cancel(self): - pass + self._remove("VJOURNAL", True) def publish(self): self._record("VJOURNAL", True) @@ -111,7 +141,7 @@ pass def cancel(self): - pass + self._remove("VTODO", True) def counter(self): pass