# HG changeset patch # User Paul Boddie # Date 1423516718 -3600 # Node ID 22a5023b2794f051215d78b8be24fdd647f636e1 # Parent ee744ec3aaab0476c2a1dd8a57357dc33ac0293f Modify manager-originating free/busy information to include updated event details. diff -r ee744ec3aaab -r 22a5023b2794 imip_manager.py --- a/imip_manager.py Mon Feb 09 20:11:02 2015 +0100 +++ b/imip_manager.py Mon Feb 09 22:18:38 2015 +0100 @@ -40,7 +40,8 @@ from imiptools.period import add_day_start_points, add_empty_days, add_slots, \ convert_periods, get_freebusy_details, \ get_scale, have_conflict, get_slots, get_spans, \ - partition_by_day, remove_from_freebusy, update_freebusy + partition_by_day, remove_from_freebusy, update_freebusy, \ + _update_freebusy from imiptools.profile import Preferences import imip_store import markup @@ -107,7 +108,24 @@ path = self.get_path() return "%s/%s" % (path.rstrip("/"), path_info.lstrip("/")) -class ManagerHandler(Handler): +class Common: + + "Common handler and manager methods." + + def __init__(self, user): + self.user = user + self.preferences = None + + def get_preferences(self): + if not self.preferences: + self.preferences = Preferences(self.user) + return self.preferences + + def get_tzid(self): + prefs = self.get_preferences() + return prefs.get("TZID") or get_default_timezone() + +class ManagerHandler(Handler, Common): """ A content handler for use by the manager, as opposed to operating within the @@ -116,8 +134,9 @@ def __init__(self, obj, user, messenger): Handler.__init__(self, messenger=messenger) + Common.__init__(self, user) + self.set_object(obj) - self.user = user self.organiser = self.obj.get_value("ORGANIZER") self.attendees = self.obj.get_values("ATTENDEE") @@ -157,6 +176,16 @@ uid = "imip-agent-%s-%s" % (utcnow, get_address(self.user)) 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). + + tzid = self.get_tzid() + + _update_freebusy(freebusy, self.obj.get_periods_for_freebusy(tzid), + self.obj.get_value("TRANSP") or "OPAQUE", self.obj.get_value("UID")) + user_attr = self.messenger and self.messenger.sender != get_address(self.user) and \ {"SENT-BY" : get_uri(self.messenger.sender)} or {} @@ -221,19 +250,18 @@ self.send_message(method, get_address(self.organiser), for_organiser=True) return True -class Manager: +class Manager(Common): "A simple manager application." def __init__(self, messenger=None): self.messenger = messenger or Messenger() - self.encoding = "utf-8" self.env = CGIEnvironment(self.encoding) user = self.env.get_user() - self.user = user and get_uri(user) or None - self.preferences = None + Common.__init__(self, user and get_uri(user) or None) + self.locale = None self.requests = None @@ -283,15 +311,6 @@ self.locale = self.get_preferences().get("LANG", "C") return self.locale - def get_preferences(self): - if not self.preferences: - self.preferences = Preferences(self.user) - return self.preferences - - def get_tzid(self): - prefs = self.get_preferences() - return prefs.get("TZID") or get_default_timezone() - # Prettyprinting of dates and times. def format_date(self, dt, format): diff -r ee744ec3aaab -r 22a5023b2794 imiptools/content.py --- a/imiptools/content.py Mon Feb 09 20:11:02 2015 +0100 +++ b/imiptools/content.py Mon Feb 09 22:18:38 2015 +0100 @@ -173,7 +173,8 @@ remove_from_freebusy_for_other(freebusy, user, other, self.uid, self.store) def update_freebusy(self, freebusy, attendee, periods): - return update_freebusy(freebusy, attendee, periods, self.obj.get_value("TRANSP"), self.uid, self.store) + update_freebusy(freebusy, attendee, periods, self.obj.get_value("TRANSP"), + self.uid, self.store) def update_freebusy_from_participant(self, user, participant_item, tzid):