1 #!/usr/bin/env python 2 3 """ 4 Common scheduling functionality. 5 6 Copyright (C) 2015, 2016 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.handlers.scheduling.manifest import scheduling_functions 23 24 def apply_scheduling_functions(functions, handler): 25 26 """ 27 Apply the given scheduling 'functions' in the current object of the given 28 'handler'. 29 """ 30 31 response = "ACCEPTED" 32 33 for fn in functions: 34 35 # NOTE: Should signal an error for incorrectly configured resources. 36 37 if not fn: 38 return "DECLINED" 39 40 # Keep evaluating scheduling functions, stopping only if one 41 # declines or gives a null response. 42 43 else: 44 result = fn(handler) 45 46 # Return a negative result immediately. 47 48 if not result or result == "DECLINED": 49 return result 50 51 # Modify the eventual response from acceptance if a countering 52 # result is obtained. 53 54 elif response == "ACCEPTED": 55 response = result 56 57 return response 58 59 # vim: tabstop=4 expandtab shiftwidth=4