imip-agent

imiptools/handlers/scheduling/common.py

1309:644b7e259059
2017-10-14 Paul Boddie Support BCC sending suppression so that routines requesting it can still be used with senders that will not support it, usually because there are no outgoing routing destinations for those senders.
     1 #!/usr/bin/env python     2      3 """     4 Common scheduling functionality.     5      6 Copyright (C) 2016, 2017 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 def standard_responses(handler, response):    23     24     """    25     Using 'handler' to translate descriptions, return a tuple containing the    26     'response' and a suitable description.    27     """    28     29     _ = handler.get_translator()    30     31     if response == "ACCEPTED":    32         return response, _("The recipient has scheduled the requested period.")    33     elif response == "COUNTER":    34         return response, _("The recipient has suggested a different period.")    35     elif response == "DELEGATED":    36         return response, _("The recipient has delegated the requested period.")    37     else:    38         return response, _("The recipient is unavailable in the requested period.")    39     40 def get_scheduling_conflicts(handler, freebusy, users, attendee=False):    41     42     """    43     Use the 'handler' to obtain scheduling conflicts within the given 'freebusy'    44     collection involving the given 'users', with the organiser of each period    45     being tested against the users unless 'attendee' is set to a true value    46     (thus testing the attendee of each period against the users instead).    47     48     Return a dictionary mapping users to the number of conflicts (or concurrent    49     scheduling instances) each user experiences for the current object of the    50     'handler'.    51     """    52     53     conflicts = {}    54     55     for user in users:    56         conflicts[user] = 0    57     58     overlapping = freebusy.get_overlapping(handler.get_periods(handler.obj, future_only=True))    59     60     # Where scheduling cannot occur, find the busy potential users.    61     62     if overlapping:    63         for p in overlapping:    64             involved = attendee and p.attendee or p.organiser    65             if conflicts.has_key(involved):    66                 conflicts[involved] += 1    67     68     return conflicts    69     70 # vim: tabstop=4 expandtab shiftwidth=4