# -*- coding: utf-8 -*- """Module allowing to command and control plugs""" import spc300 import non_spc300 import list_utils import power_strip def get_mac_address(key): """Gives the MAC address corresponding to a power strip key""" return get_module(key).get_mac_address(key) def get_model(key): """Gives the model corresponding to a power strip key""" return get_module(key).get_model(key) def get_version(key): """Gives the version corresponding to a power strip key""" return get_module(key).get_version(key) def is_spc300(key): return get_module(key) == spc300 def switch_off(keys): if type(keys) != list: keys = [keys] for power_plug_key in get_power_plugs_keys(keys): power_strip.switch("off", power_plug_key) def switch_off_all(): """We switch off all the plugs""" switch_off(get_keys()) def switch_on(key): get_module(key).switch_on(key) def switch_on_all(excluded_keys): """We switch on all the plugs except the excluded ones""" keys = list_utils.substract(spc300.config["plugs"].keys(), excluded_keys) spc300.switch_on(keys) keys = list_utils.substract(non_spc300.config["plugs"].keys(), excluded_keys) non_spc300.switch_on(keys) def restart_all(first_restarted_plug): # We switch off all the plugs switch_off_all() # We switch on the first plug switch_on(first_restarted_plug) # We switch on all the other plugs switch_on_all([first_restarted_plug]) def get_keys(): return spc300.config["plugs"].keys() + non_spc300.config["plugs"].keys() def get_module(key): """Check if a plug is an SPC300 plug""" if key in spc300.config["plugs"].keys(): return spc300 if key in non_spc300.config["plugs"].keys(): return non_spc300 assert False, (key, spc300.config["plugs"].keys(), non_spc300.config["plugs"].keys()) def get_power_plug_key(key): return (key[0], key[1]) def get_all_power_plugs_keys(keys): return map(get_power_plug_key, keys) def get_power_plugs_keys(keys): power_plugs_keys = get_all_power_plugs_keys(keys) return list_utils.drop_duplicates(power_plugs_keys) def duplicated_power_plugs_keys_are_absent(keys): return get_all_power_plugs_keys(keys) == get_power_plugs_keys(keys) def check_version_in_directory(key, directory): version = get_version(key) # If the version contains several terms, we keep only the first one, # assuming that it is the most representative if hasattr(version, '__iter__'): version = version[0] print "The version of the plug is", version print "The results are going to be dumped in the directory", \ directory if version not in directory: raw_input("""\n\ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! WARNING: the version of the driver on the plug !! is not included in the name of the !! directory where the results are going !! to be dumped !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""") def check_plc_rom(key): if is_spc300(key) and spc300.plc_rom_is_present(key): raw_input("""\n\ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! WARNING: a file plc.rom is present on the plug !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""") def get_active(power_plugs_off, plugs): dictionnary = {} for key, value in plugs.items(): if is_active(power_plugs_off, key): dictionnary[key] = value return dictionnary def is_active(power_plugs_off, key): for (power_strip_key, power_plug_keys) in power_plugs_off: for power_plug_key in power_plug_keys: if (power_strip_key, power_plug_key) == get_power_plug_key(key): return False return True if __name__ == "__main__": assert True == is_active([(1, [])], (1, 2, "master")) assert False == is_active([(1, [2])], (1, 2, "master")) assert True == is_active([(2, [2])], (1, 2, "master")) assert {(1, 2, "master"):"foo"} == get_active([(1, [])], {(1, 2, "master"):"foo"}) assert {(1, 2, "master"):"foo"} == get_active([(2, [2])], {(1, 2, "master"):"foo", (2, 2, "master"):"foo", }) assert {} == get_active([(1, [2]), (2, [2])], {(1, 2, "master"):"foo", (2, 2, "master"):"foo", }) assert [] == get_all_power_plugs_keys([]) assert [(1, 2)] == get_all_power_plugs_keys([(1, 2)]) assert [(1, 2)] == get_all_power_plugs_keys([(1, 2, 3)]) assert [(1, 2), (1, 2)] == get_all_power_plugs_keys([(1, 2, 3), (1, 2)]) assert [(1, 2), (1, 2), (1, 3)] == get_all_power_plugs_keys([(1, 2, 3), (1, 2), (1, 3)]) assert [] == get_power_plugs_keys([]) assert [(1, 2)] == get_power_plugs_keys([(1, 2)]) assert [(1, 2)] == get_power_plugs_keys([(1, 2, 3)]) assert [(1, 2)] == get_power_plugs_keys([(1, 2, 3), (1, 2)]) assert [(1, 2), (1, 3)] == get_power_plugs_keys([(1, 2, 3), (1, 2), (1, 3)]) assert False == duplicated_power_plugs_keys_are_absent([(1, 2, 3), (1, 2), (1, 3)]) assert True == duplicated_power_plugs_keys_are_absent([(1, 2, 3), (1, 3)])