from snaplogic.common.config.configobj import ConfigObj
def modify_config_contents(original_dict, changes):
"""
Rewrite the server config file with specified params.
@param original_dict: The config dictionary that needs to be patched with the changes
@type original_dict: ConfigObj or dict
@param changes: The changes that should be applied.
@type changes: dict
"""
for k in changes:
if k in original_dict:
# We need to merge in the changes
if isinstance(original_dict[k], dict):
modify_config_contents(original_dict[k], changes[k])
continue
elif changes[k] and isinstance(changes[k], list) and (changes[k][0] == '+'):
# We have a list which needs to be appended to whatever the config file currently
# has. Please note that in ConfigObj, a list is just a list of strings.
if original_dict[k]:
l = changes[k][1:]
if isinstance(original_dict[k], list):
original_dict[k].extend(l)
else:
l.insert(0, original_dict[k])
original_dict[k] = l
continue
# For all other cases, just overwrite the current value of the dict entry.
original_dict[k] = changes[k]
def modify_config_file(fname, changes, new_file_name):
conf = ConfigObj(fname)
modify_config_contents(conf, changes)
conf.filename = new_file_name
conf.write()
|