1.1 --- a/imiptools/client.py Wed May 20 16:56:43 2015 +0200
1.2 +++ b/imiptools/client.py Wed May 20 18:39:06 2015 +0200
1.3 @@ -122,8 +122,14 @@
1.4 attendee_attr["PARTSTAT"] = partstat
1.5 if attendee_attr.has_key("RSVP"):
1.6 del attendee_attr["RSVP"]
1.7 - if self.messenger and self.messenger.sender != get_address(self.user):
1.8 - attendee_attr["SENT-BY"] = get_uri(self.messenger.sender)
1.9 + self.update_sender(attendee_attr)
1.10 return attendee_attr
1.11
1.12 + def update_sender(self, attr):
1.13 +
1.14 + "Update the SENT-BY attribute of the 'attr' sender metadata."
1.15 +
1.16 + if self.messenger and self.messenger.sender != get_address(self.user):
1.17 + attr["SENT-BY"] = get_uri(self.messenger.sender)
1.18 +
1.19 # vim: tabstop=4 expandtab shiftwidth=4
2.1 --- a/imiptools/handlers/person.py Wed May 20 16:56:43 2015 +0200
2.2 +++ b/imiptools/handlers/person.py Wed May 20 18:39:06 2015 +0200
2.3 @@ -19,13 +19,11 @@
2.4 this program. If not, see <http://www.gnu.org/licenses/>.
2.5 """
2.6
2.7 -from imiptools.data import get_uri, uri_values, values_from_items
2.8 from imiptools.handlers import Handler
2.9 -from imiptools.handlers.common import CommonFreebusy
2.10 +from imiptools.handlers.common import CommonFreebusy, Outgoing
2.11 from imiptools.period import FreeBusyPeriod, Period, replace_overlapping
2.12 -from imiptools.profile import Preferences
2.13
2.14 -class PersonHandler(Handler):
2.15 +class PersonHandler(Handler, Outgoing):
2.16
2.17 "Handling mechanisms specific to people."
2.18
2.19 @@ -80,15 +78,10 @@
2.20 self.store.dequeue_request(self.user, self.uid, self.recurrenceid)
2.21
2.22 # No return message will occur to update the free/busy
2.23 - # information, so this is done here.
2.24 -
2.25 - freebusy = self.store.get_freebusy(self.user)
2.26 - self.remove_from_freebusy(freebusy)
2.27 + # information, so this is done here using outgoing message
2.28 + # functionality.
2.29
2.30 - self.store.set_freebusy(self.user, freebusy)
2.31 -
2.32 - if self.publisher and self.is_sharing():
2.33 - self.publisher.set_freebusy(self.user, freebusy)
2.34 + self.remove_event_from_freebusy(from_organiser)
2.35
2.36 self.update_freebusy_from_organiser(organiser_item)
2.37
3.1 --- a/imipweb/handler.py Wed May 20 16:56:43 2015 +0200
3.2 +++ b/imipweb/handler.py Wed May 20 18:39:06 2015 +0200
3.3 @@ -21,11 +21,9 @@
3.4
3.5 from imiptools.client import Client
3.6 from imiptools.data import get_address, get_uri, make_freebusy, \
3.7 - to_part, uri_item, uri_items, uri_values
3.8 + to_part, uri_item, uri_values
3.9 from imiptools.dates import format_datetime, get_timestamp
3.10 from imiptools.handlers import Handler
3.11 -from imiptools.period import update_freebusy
3.12 -from imipweb.data import event_period_from_period
3.13
3.14 class ManagerHandler(Handler):
3.15
3.16 @@ -76,15 +74,16 @@
3.17
3.18 freebusy = self.store.get_freebusy(self.user)
3.19
3.20 - # Replace the non-updated free/busy details for this event with
3.21 - # newer details (since the outgoing handler updates this user's
3.22 - # free/busy details).
3.23 + # Since the outgoing handler updates this user's free/busy details,
3.24 + # the stored details will probably not have the updated details at
3.25 + # this point, so we update our copy for serialisation as the bundled
3.26 + # free/busy object.
3.27
3.28 self.update_freebusy(freebusy,
3.29 self.obj.get_periods(self.get_tzid(), self.get_window_end()))
3.30
3.31 - user_attr = self.messenger and self.messenger.sender != get_address(self.user) and \
3.32 - {"SENT-BY" : get_uri(self.messenger.sender)} or {}
3.33 + user_attr = {}
3.34 + self.update_sender(user_attr)
3.35
3.36 parts.append(to_part("PUBLISH", [
3.37 make_freebusy(freebusy, uid, self.user, user_attr)
3.38 @@ -101,7 +100,7 @@
3.39 def process_received_request(self):
3.40
3.41 """
3.42 - Process the current request for the given 'user'. Return whether any
3.43 + Process the current request for the current user. Return whether any
3.44 action was taken.
3.45 """
3.46
3.47 @@ -109,14 +108,14 @@
3.48
3.49 attendee_attr = self.update_participation(self.obj)
3.50
3.51 - if attendee_attr:
3.52 - self.obj["ATTENDEE"] = [(self.user, attendee_attr)]
3.53 - self.update_dtstamp()
3.54 - self.set_sequence(False)
3.55 - self.send_message("REPLY", get_address(self.user), from_organiser=False)
3.56 - return True
3.57 + if not attendee_attr:
3.58 + return False
3.59
3.60 - return False
3.61 + self.obj["ATTENDEE"] = [(self.user, attendee_attr)]
3.62 + self.update_dtstamp()
3.63 + self.set_sequence(False)
3.64 + self.send_message("REPLY", get_address(self.user), from_organiser=False)
3.65 + return True
3.66
3.67 def process_created_request(self, method, to_cancel=None, to_unschedule=None):
3.68
3.69 @@ -128,11 +127,11 @@
3.70 messages is provided.
3.71 """
3.72
3.73 + # Here, the organiser should be the current user.
3.74 +
3.75 organiser, organiser_attr = uri_item(self.obj.get_item("ORGANIZER"))
3.76
3.77 - if self.messenger and self.messenger.sender != get_address(organiser):
3.78 - organiser_attr["SENT-BY"] = get_uri(self.messenger.sender)
3.79 -
3.80 + self.update_sender(organiser_attr)
3.81 self.update_dtstamp()
3.82 self.set_sequence(True)
3.83