Updated config and interactive mode

This commit is contained in:
Spitap
2023-09-25 11:40:26 +02:00
committed by Antoine Nguyen
parent 9f5542f07e
commit eb1a8ece55
4 changed files with 61 additions and 22 deletions

View File

@@ -185,25 +185,29 @@ def copy_from_template(template, dest, context):
fp.write(ConfigFileTemplate(buf).substitute(context))
def check_config_file(dest, interactive=False, upgrade=False, backup=False, restore=False):
def check_config_file(dest,
interactive=False,
upgrade=False,
backup=False,
restore=False):
"""Create a new installer config file if needed."""
is_present = True
if os.path.exists(dest):
return is_present, update_config(dest, False)
if upgrade:
printcolor(
error(
"You cannot upgrade an existing installation without a "
"configuration file.", RED)
"configuration file.")
sys.exit(1)
elif backup:
is_present = False
printcolor(
error(
"Your configuration file hasn't been found. A new one will be generated. "
"Please edit it with correct password for the databases !", RED)
"Please edit it with correct password for the databases !")
elif restore:
printcolor(
error(
"You cannot restore an existing installation without a "
f"configuration file. (file : {dest} has not been found...", RED)
f"configuration file. (file : {dest} has not been found...")
sys.exit(1)
printcolor(
@@ -310,10 +314,17 @@ def validate(value, config_entry):
def get_entry_value(entry, interactive):
if callable(entry["default"]):
default_value = entry["default"]()
if entry.get("default-if") is not None and interactive:
# In case in interactive we try to look for a default-if
default_entry = entry["default-if"]
else:
default_value = entry["default"]
default_entry = entry["default"]
if callable(default_entry):
default_value = default_entry()
else:
default_value = default_entry
user_value = None
if entry.get("customizable") and interactive:
while (user_value != '' and not validate(user_value, entry)):
@@ -349,13 +360,14 @@ def load_config_template(interactive):
config = configparser.ConfigParser()
# only ask about options we need, else still generate default
for section in tpl_dict:
interactive_section = interactive
if "if" in section:
config_key, value = section.get("if").split("=")
section_name, option = config_key.split(".")
interactive_section = (
config.get(section_name, option) == value and interactive)
else:
interactive_section = interactive
for condition in section.get("if"):
config_key, value = condition.split("=")
section_name, option = config_key.split(".")
interactive_section = interactive_section and (
config.get(section_name, option) == value)
config.add_section(section["name"])
for config_entry in section["values"]:
value = get_entry_value(config_entry, interactive_section)