# HG changeset patch # User Paul Boddie # Date 1508188875 -7200 # Node ID fe50d2b3760a4a707934cf23e0dae85825c2c28b # Parent 66c8a5c98b25da1a171a7b517625d0fa65582179 Introduced a function to transfer delegates between attendee mappings, making them genuine attendees in the target mapping. diff -r 66c8a5c98b25 -r fe50d2b3760a imiptools/client.py --- a/imiptools/client.py Mon Oct 16 23:11:23 2017 +0200 +++ b/imiptools/client.py Mon Oct 16 23:21:15 2017 +0200 @@ -24,8 +24,8 @@ from imiptools.data import Object, check_delegation, get_address, \ get_sender_identities, get_uri, \ get_window_end, is_new_object, make_freebusy, \ - make_uid, to_part, uri_dict, uri_item, uri_items, \ - uri_parts, uri_values + make_uid, to_part, update_attendees_with_delegates, \ + uri_dict, uri_item, uri_items, uri_parts, uri_values from imiptools.dates import check_permitted_values, format_datetime, \ get_datetime, get_default_timezone, \ get_duration, get_time, get_timestamp, \ @@ -547,32 +547,21 @@ # Get attendee details in a usable form. - attendee_map = uri_dict(obj.get_value_map("ATTENDEE")) + stored_attendees = uri_dict(obj.get_value_map("ATTENDEE")) for attendee, attendee_attr in attendees.items(): # Update attendance in the loaded object for any recognised # attendees. - if attendee_map.has_key(attendee): - attendee_map[attendee] = attendee_attr - - # Check for delegated attendees. - - for attendee, attendee_attr in attendees.items(): + if stored_attendees.has_key(attendee): + stored_attendees[attendee] = attendee_attr - # Identify delegates and check the delegation using the updated - # attendee information. - - if not attendee_map.has_key(attendee) and \ - attendee_attr.has_key("DELEGATED-FROM") and \ - check_delegation(attendee_map, attendee, attendee_attr): - - attendee_map[attendee] = attendee_attr + update_attendees_with_delegates(stored_attendees, attendees) # Set the new details and store the object. - obj["ATTENDEE"] = attendee_map.items() + obj["ATTENDEE"] = stored_attendees.items() # Set a specific recurrence or the complete event if not an additional # occurrence. diff -r 66c8a5c98b25 -r fe50d2b3760a imiptools/data.py --- a/imiptools/data.py Mon Oct 16 23:11:23 2017 +0200 +++ b/imiptools/data.py Mon Oct 16 23:21:15 2017 +0200 @@ -1198,4 +1198,24 @@ return to_timezone(start or datetime.now(), tzid) + timedelta(days) +def update_attendees_with_delegates(stored_attendees, attendees): + + """ + Update the 'stored_attendees' mapping with delegate information from the + given 'attendees' mapping. + """ + + # Check for delegated attendees. + + for attendee, attendee_attr in attendees.items(): + + # Identify delegates and check the delegation using the updated + # attendee information. + + if not stored_attendees.has_key(attendee) and \ + attendee_attr.has_key("DELEGATED-FROM") and \ + check_delegation(stored_attendees, attendee, attendee_attr): + + stored_attendees[attendee] = attendee_attr + # vim: tabstop=4 expandtab shiftwidth=4