imip-agent

imiptools/handlers/common.py

502:ee8848449822
2015-04-07 Paul Boddie Only remove an event from the free/busy record if cancelling the whole thing, not if only removing attendees.
     1 #!/usr/bin/env python     2      3 """     4 Common handler functionality for different entities.     5      6 Copyright (C) 2014, 2015 Paul Boddie <paul@boddie.org.uk>     7      8 This program is free software; you can redistribute it and/or modify it under     9 the terms of the GNU General Public License as published by the Free Software    10 Foundation; either version 3 of the License, or (at your option) any later    11 version.    12     13 This program is distributed in the hope that it will be useful, but WITHOUT    14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS    15 FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more    16 details.    17     18 You should have received a copy of the GNU General Public License along with    19 this program.  If not, see <http://www.gnu.org/licenses/>.    20 """    21     22 from imiptools.data import get_address, get_uri, make_freebusy, to_part    23 from imiptools.dates import format_datetime    24     25 class CommonFreebusy:    26     27     "Common free/busy mix-in."    28     29     def request(self):    30     31         """    32         Respond to a request by preparing a reply containing free/busy    33         information for each indicated attendee.    34         """    35     36         oa = self.require_organiser_and_attendees()    37         if not oa:    38             return    39     40         (organiser, organiser_attr), attendees = oa    41     42         # Get the details for each attendee.    43     44         responses = []    45         rwrite = responses.append    46     47         # For replies, the organiser and attendee are preserved.    48     49         for attendee, attendee_attr in attendees.items():    50             freebusy = self.store.get_freebusy(attendee)    51     52             # Indicate the actual sender of the reply.    53     54             if self.messenger:    55                 attendee_attr["SENT-BY"] = get_uri(self.messenger.sender)    56     57             dtstart = format_datetime(self.obj.get_utc_datetime("DTSTART"))    58             dtend = format_datetime(self.obj.get_utc_datetime("DTEND"))    59     60             rwrite(make_freebusy(freebusy, self.uid, organiser, organiser_attr, attendee, attendee_attr, dtstart, dtend))    61     62         # Return the reply.    63     64         self.add_result("REPLY", [get_address(organiser)], to_part("REPLY", responses))    65     66 # vim: tabstop=4 expandtab shiftwidth=4