# HG changeset patch # User Paul Boddie # Date 1411425682 -7200 # Node ID b703d61888edcabba0f42a233139bf28b9d359fd # Parent 3da072846ee29e913db9379419c221d5b1b2dd0e Added a convenience method for requiring organisers and attendees. Simplified the free/busy request handling slightly. diff -r 3da072846ee2 -r b703d61888ed imip_agent.py --- a/imip_agent.py Tue Sep 23 00:10:42 2014 +0200 +++ b/imip_agent.py Tue Sep 23 00:41:22 2014 +0200 @@ -235,6 +235,21 @@ def filter_by_recipients(self, values): return self.recipients.intersection(map(get_address, values)) + def require_organiser_and_attendees(self): + attendee_map = self.get_value_map("ATTENDEE") + organiser = self.get_item("ORGANIZER") + + # Only provide details for recipients who are also attendees. + + attendees = {} + for attendee in map(get_uri, self.filter_by_recipients(attendee_map)): + attendees[attendee] = attendee_map[attendee] + + if not attendees and not organiser: + return None + + return organiser, attendees + class Event(Handler): "An event handler." @@ -264,7 +279,11 @@ pass def request(self): - pass + + """ + Respond to a request by preparing a reply containing accept/decline + information for each indicated attendee. + """ class Freebusy(Handler): @@ -286,17 +305,11 @@ information for each indicated attendee. """ - attendee_map = self.get_value_map("ATTENDEE") - organiser = self.get_item("ORGANIZER") - - # Only provide details for recipients who are also attendees. + oa = self.require_organiser_and_attendees() + if not oa: + return None - attendees = map(get_uri, self.filter_by_recipients(attendee_map)) - - if not attendees and not organiser: - return - - organiser, organiser_attr = organiser + (organiser, organiser_attr), attendees = oa # Construct an appropriate fragment. @@ -305,7 +318,7 @@ # Get the details for each attendee. - for attendee in attendees: + for attendee, attendee_attr in attendees.items(): freebusy = self.store.get_freebusy(attendee) if freebusy: @@ -313,7 +326,7 @@ rwrite = record.append rwrite(("ORGANIZER", organiser_attr, organiser)) - rwrite(("ATTENDEE", attendee_map[attendee], attendee)) + rwrite(("ATTENDEE", attendee_attr, attendee)) rwrite(("UID", {}, self.uid)) for start, end in freebusy: