# HG changeset patch # User Paul Boddie # Date 1427303066 -3600 # Node ID f226476643ffce3036100b67038b135df30596cc # Parent ab91c238fbb6f13e675c0c7dee76b65c1fa23acd Moved attendee update code into a new client utilities module. diff -r ab91c238fbb6 -r f226476643ff imip_manager.py --- a/imip_manager.py Wed Mar 25 17:57:42 2015 +0100 +++ b/imip_manager.py Wed Mar 25 18:04:26 2015 +0100 @@ -31,6 +31,7 @@ sys.path.append(LIBRARY_PATH) +from imiptools.client import update_attendees from imiptools.data import get_address, get_uri, get_window_end, make_freebusy, \ Object, to_part, \ uri_dict, uri_item, uri_items, uri_values @@ -78,39 +79,6 @@ def get_window_end(self): return get_window_end(self.get_tzid(), self.get_window_size()) - def update_attendees(self, obj, added, removed): - - """ - Update the attendees in 'obj' with the given 'added' and 'removed' - attendee lists. A list is returned containing the attendees whose - attendance should be cancelled. - """ - - to_cancel = [] - - if added or removed: - attendees = uri_items(obj.get_items("ATTENDEE") or []) - - if removed: - remaining = [] - - for attendee, attendee_attr in attendees: - if attendee in removed: - if attendee_attr.get("PARTSTAT") in ("ACCEPTED", "TENTATIVE"): - to_cancel.append((attendee, attendee_attr)) - else: - remaining.append((attendee, attendee_attr)) - - attendees = remaining - - if added: - for attendee in added: - attendees.append((attendee, {"PARTSTAT" : "NEEDS-ACTION", "RSVP" : "TRUE"})) - - obj["ATTENDEE"] = attendees - - return to_cancel - class ManagerHandler(Common, Handler): """ @@ -239,7 +207,7 @@ # Update the attendees in the event. - to_cancel = self.update_attendees(self.obj, added, removed) + to_cancel = update_attendees(self.obj, added, removed) self.update_dtstamp() self.set_sequence(update) @@ -646,7 +614,7 @@ # Save single user events. elif save: - to_cancel = self.update_attendees(obj, added, removed) + to_cancel = update_attendees(obj, added, removed) self.store.set_event(self.user, uid, recurrenceid, node=obj.to_node()) self.update_freebusy(uid, recurrenceid, obj) self.remove_request(uid, recurrenceid) diff -r ab91c238fbb6 -r f226476643ff imiptools/client.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imiptools/client.py Wed Mar 25 18:04:26 2015 +0100 @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +""" +Common calendar client utilities. + +Copyright (C) 2014, 2015 Paul Boddie + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see . +""" + +from imiptools.data import uri_items + +def update_attendees(obj, added, removed): + + """ + Update the attendees in 'obj' with the given 'added' and 'removed' + attendee lists. A list is returned containing the attendees whose + attendance should be cancelled. + """ + + to_cancel = [] + + if added or removed: + attendees = uri_items(obj.get_items("ATTENDEE") or []) + + if removed: + remaining = [] + + for attendee, attendee_attr in attendees: + if attendee in removed: + if attendee_attr.get("PARTSTAT") in ("ACCEPTED", "TENTATIVE"): + to_cancel.append((attendee, attendee_attr)) + else: + remaining.append((attendee, attendee_attr)) + + attendees = remaining + + if added: + for attendee in added: + attendees.append((attendee, {"PARTSTAT" : "NEEDS-ACTION", "RSVP" : "TRUE"})) + + obj["ATTENDEE"] = attendees + + return to_cancel + +# vim: tabstop=4 expandtab shiftwidth=4