# HG changeset patch # User Paul Boddie # Date 1432139946 -7200 # Node ID 4553e6a14c4bb70ebb6ff561caf8112e3fd80a63 # Parent 3ebdb8cea4d175ab9fb9f3cad7177a554c203a61 Consolidated SENT-BY and sender metadata definition. Made the person handler use the common free/busy operations for outgoing messages when cancelling events. diff -r 3ebdb8cea4d1 -r 4553e6a14c4b imiptools/client.py --- a/imiptools/client.py Wed May 20 16:56:43 2015 +0200 +++ b/imiptools/client.py Wed May 20 18:39:06 2015 +0200 @@ -122,8 +122,14 @@ 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): - attendee_attr["SENT-BY"] = get_uri(self.messenger.sender) + self.update_sender(attendee_attr) return attendee_attr + def update_sender(self, attr): + + "Update the SENT-BY attribute of the 'attr' sender metadata." + + if self.messenger and self.messenger.sender != get_address(self.user): + attr["SENT-BY"] = get_uri(self.messenger.sender) + # vim: tabstop=4 expandtab shiftwidth=4 diff -r 3ebdb8cea4d1 -r 4553e6a14c4b imiptools/handlers/person.py --- a/imiptools/handlers/person.py Wed May 20 16:56:43 2015 +0200 +++ b/imiptools/handlers/person.py Wed May 20 18:39:06 2015 +0200 @@ -19,13 +19,11 @@ this program. If not, see . """ -from imiptools.data import get_uri, uri_values, values_from_items from imiptools.handlers import Handler -from imiptools.handlers.common import CommonFreebusy +from imiptools.handlers.common import CommonFreebusy, Outgoing from imiptools.period import FreeBusyPeriod, Period, replace_overlapping -from imiptools.profile import Preferences -class PersonHandler(Handler): +class PersonHandler(Handler, Outgoing): "Handling mechanisms specific to people." @@ -80,15 +78,10 @@ self.store.dequeue_request(self.user, self.uid, self.recurrenceid) # No return message will occur to update the free/busy - # information, so this is done here. - - freebusy = self.store.get_freebusy(self.user) - self.remove_from_freebusy(freebusy) + # information, so this is done here using outgoing message + # functionality. - self.store.set_freebusy(self.user, freebusy) - - if self.publisher and self.is_sharing(): - self.publisher.set_freebusy(self.user, freebusy) + self.remove_event_from_freebusy(from_organiser) self.update_freebusy_from_organiser(organiser_item) diff -r 3ebdb8cea4d1 -r 4553e6a14c4b imipweb/handler.py --- a/imipweb/handler.py Wed May 20 16:56:43 2015 +0200 +++ b/imipweb/handler.py Wed May 20 18:39:06 2015 +0200 @@ -21,11 +21,9 @@ from imiptools.client import Client from imiptools.data import get_address, get_uri, make_freebusy, \ - to_part, uri_item, uri_items, uri_values + to_part, uri_item, uri_values from imiptools.dates import format_datetime, get_timestamp from imiptools.handlers import Handler -from imiptools.period import update_freebusy -from imipweb.data import event_period_from_period class ManagerHandler(Handler): @@ -76,15 +74,16 @@ freebusy = self.store.get_freebusy(self.user) - # Replace the non-updated free/busy details for this event with - # newer details (since the outgoing handler updates this user's - # free/busy details). + # Since the outgoing handler updates this user's free/busy details, + # the stored details will probably not have the updated details at + # this point, so we update our copy for serialisation as the bundled + # free/busy object. 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 {} + user_attr = {} + self.update_sender(user_attr) parts.append(to_part("PUBLISH", [ make_freebusy(freebusy, uid, self.user, user_attr) @@ -101,7 +100,7 @@ def process_received_request(self): """ - Process the current request for the given 'user'. Return whether any + Process the current request for the current user. Return whether any action was taken. """ @@ -109,14 +108,14 @@ attendee_attr = self.update_participation(self.obj) - 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 + if not attendee_attr: + return False - return False + 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 def process_created_request(self, method, to_cancel=None, to_unschedule=None): @@ -128,11 +127,11 @@ messages is provided. """ + # Here, the organiser should be the current user. + organiser, organiser_attr = uri_item(self.obj.get_item("ORGANIZER")) - if self.messenger and self.messenger.sender != get_address(organiser): - organiser_attr["SENT-BY"] = get_uri(self.messenger.sender) - + self.update_sender(organiser_attr) self.update_dtstamp() self.set_sequence(True)