most of the implementation for the config handler done
parent
eadb0632c1
commit
71df883a84
|
@ -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
|
||||
|
Reference in New Issue