1.1 --- a/imip_agent.py Tue Sep 23 00:10:42 2014 +0200
1.2 +++ b/imip_agent.py Tue Sep 23 00:41:22 2014 +0200
1.3 @@ -235,6 +235,21 @@
1.4 def filter_by_recipients(self, values):
1.5 return self.recipients.intersection(map(get_address, values))
1.6
1.7 + def require_organiser_and_attendees(self):
1.8 + attendee_map = self.get_value_map("ATTENDEE")
1.9 + organiser = self.get_item("ORGANIZER")
1.10 +
1.11 + # Only provide details for recipients who are also attendees.
1.12 +
1.13 + attendees = {}
1.14 + for attendee in map(get_uri, self.filter_by_recipients(attendee_map)):
1.15 + attendees[attendee] = attendee_map[attendee]
1.16 +
1.17 + if not attendees and not organiser:
1.18 + return None
1.19 +
1.20 + return organiser, attendees
1.21 +
1.22 class Event(Handler):
1.23
1.24 "An event handler."
1.25 @@ -264,7 +279,11 @@
1.26 pass
1.27
1.28 def request(self):
1.29 - pass
1.30 +
1.31 + """
1.32 + Respond to a request by preparing a reply containing accept/decline
1.33 + information for each indicated attendee.
1.34 + """
1.35
1.36 class Freebusy(Handler):
1.37
1.38 @@ -286,17 +305,11 @@
1.39 information for each indicated attendee.
1.40 """
1.41
1.42 - attendee_map = self.get_value_map("ATTENDEE")
1.43 - organiser = self.get_item("ORGANIZER")
1.44 -
1.45 - # Only provide details for recipients who are also attendees.
1.46 + oa = self.require_organiser_and_attendees()
1.47 + if not oa:
1.48 + return None
1.49
1.50 - attendees = map(get_uri, self.filter_by_recipients(attendee_map))
1.51 -
1.52 - if not attendees and not organiser:
1.53 - return
1.54 -
1.55 - organiser, organiser_attr = organiser
1.56 + (organiser, organiser_attr), attendees = oa
1.57
1.58 # Construct an appropriate fragment.
1.59
1.60 @@ -305,7 +318,7 @@
1.61
1.62 # Get the details for each attendee.
1.63
1.64 - for attendee in attendees:
1.65 + for attendee, attendee_attr in attendees.items():
1.66 freebusy = self.store.get_freebusy(attendee)
1.67
1.68 if freebusy:
1.69 @@ -313,7 +326,7 @@
1.70 rwrite = record.append
1.71
1.72 rwrite(("ORGANIZER", organiser_attr, organiser))
1.73 - rwrite(("ATTENDEE", attendee_map[attendee], attendee))
1.74 + rwrite(("ATTENDEE", attendee_attr, attendee))
1.75 rwrite(("UID", {}, self.uid))
1.76
1.77 for start, end in freebusy: