# HG changeset patch # User Paul Boddie # Date 1411417829 -7200 # Node ID 6c4de504c4e4ed5abcd56d5eedd7aa9e5ebeab11 # Parent cd9921fc12537e71335a72e07939f3e3cb1b73bd Introduced conversion between URIs and addresses, together with dictionaries (or maps) of attendees. diff -r cd9921fc1253 -r 6c4de504c4e4 imip_agent.py --- a/imip_agent.py Mon Sep 22 22:07:27 2014 +0200 +++ b/imip_agent.py Mon Sep 22 22:30:29 2014 +0200 @@ -89,6 +89,13 @@ else: return None +def get_value_map(d, name): + items = get_attr_value(d, name, False) + if items: + return map_from_list(items) + else: + return {} + def get_value(d, name, single=True): if d.has_key(name): values = d[name] @@ -99,6 +106,16 @@ else: return None +def map_from_list(l): + items = map(lambda (v, a): (a, v), l) + return dict(items) + +def get_address(value): + return value.startswith("mailto:") and value[7:] or value + +def get_uri(value): + return value.startswith("mailto:") and value or "mailto:%s" % value + def handle_itip_part(part, recipients): method = part.get_param("method") @@ -154,11 +171,14 @@ def get_attr_value(self, name, single=True): return get_attr_value(self.details, name, single) + def get_value_map(self, name): + return get_value_map(self.details, name) + def get_value(self, name, single=True): return get_value(self.details, name, single) - def filter_by_recipients(self, attr_values): - return [a for attr, value in attendees if value in self.recipients] + def filter_by_recipients(self, values): + return self.recipients.intersection(map(get_address, values)) class Event(Handler): @@ -211,12 +231,12 @@ for each indicated attendee. """ - attendees = self.get_attr_value("ATTENDEE", False) + attendee_map = self.get_value_map("ATTENDEE") organiser = self.get_attr_value("ORGANIZER") # Only provide details for recipients who are also attendees. - attendees = self.filter_by_recipients(attendees) + attendees = map(get_uri, self.filter_by_recipients(attendee_map)) if not attendees and not organiser: return @@ -234,13 +254,13 @@ cwrite(("METHOD", {}, "REPLY")) cwrite(("VERSION", {}, "2.0")) - for attendee_attr, attendee in attendees: + for attendee in attendees: freebusy = self.store.get_freebusy(attendee) if freebusy: record = [] rwrite = record.append rwrite(("ORGANIZER", organiser_attr, organiser)) - rwrite(("ATTENDEE", attendee_attr, attendee)) + rwrite(("ATTENDEE", attendee_map[attendee], attendee)) rwrite(("UID", {}, self.uid)) for start, end in freebusy: