diff --git a/lib/launcher/python/cfghandler.py b/lib/launcher/python/cfghandler.py index e69de29..3ba8f59 100644 --- a/lib/launcher/python/cfghandler.py +++ b/lib/launcher/python/cfghandler.py @@ -0,0 +1,125 @@ +import json, os, errno + +# self-explanatory +default_config = {} + +# This will contain the current configuration after loading the file and +# combining it with the default configuration. All changes will be done here +config = None + +# The file to work with +config_file_path = None + +################################################################################ +# file interaction +################################################################################ + +# set the config file to use +def set_file_path(file_path): + global config_file_path + # error handling + if os.path.exists(file_path): + if os.path.isdir(file_path): + raise IOError(errno.EISDIR, "Is a directory", file_path) + if os.access(file_path, os.R_OK) and os.access(file_path, os.W_OK): + pass + else: + raise IOError(errno.EACCES, "Read AND write permissions required", file_path) + else: + config_file = open(file_path, "w") + config_file.write("{}") + config_file.close() + # actually setting the file path + config_file_path = file_path + +# loads the json file at file_path and updates the default configuration with it +# overwrites any existing configuration adjustments +# TODO: handle None as file name (raise an exception) +def load(): + global config_file_path + global config + global default_config + # read the config file + config_file = open(config_file_path,"r") + config_string = config_file.read() + config_file.close() + # combine with default config + config = default_config.copy() + config.update(json.loads(config_string)) + + +# stores the current configuration to the file at file_path +# TODO: handle None (raise an exception) +def store(): + global config + global config_file_path + if not config is None: + config_file = open(config_file_path, "w") + config_file.write(json.dumps(config)) + config_file.close() + +################################################################################ +# default config / config setup +# These functions should be used BEFORE loading the config file +################################################################################ + +#defines a new option group in the default config +# TODO: handle existing groups (raise an exception) +def define_group(group): + global default_config + default_config.update({group : {}}) + +# defines a new option in the default config +# TODO: handle existing options (raise an exception) +def define_option(group, name, default_value): + global default_config + default_config[group].update({name : default_value}) + +# self-explanatory +def clear_definitions(): + global default_config + default_config = {} + +################################################################################ +# adjust an existing configuration for new needs +################################################################################ + +# remove the given option from the configuration and return the value to allow +# for conversion if desired +# TODO: implement +def remove_option(group, name): + pass + +# move the value of an option to another place +# TODO: implement +def rename_option(old_group, old_name, new_group, new_name): + pass + +# remove an entire group from the configuration, never to be seen again +# TODO: implement +def remove_group(group): + pass + +# self-explanatory +# TODO: implement +def rename_group(old_group, new_group): + pass + +################################################################################ +# config interaction +################################################################################ + +# get the value of the given option +def fetch(group, name): + global config + if config is None: + load() + return config[group][name] + +# set the value of a config option +def set(group, name, value): + global config + if config is None: + load() + config[group][name] = value +