mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
[fix] Multiple fixes in config panel
This commit is contained in:
parent
4c46f41036
commit
4547a6ec07
2 changed files with 55 additions and 34 deletions
|
@ -189,12 +189,18 @@ _ynh_panel_show() {
|
||||||
|
|
||||||
_ynh_panel_validate() {
|
_ynh_panel_validate() {
|
||||||
# Change detection
|
# Change detection
|
||||||
|
ynh_script_progression --message="Checking what changed in the new configuration..." --weight=1
|
||||||
local is_error=true
|
local is_error=true
|
||||||
#for changed_status in "${!changed[@]}"
|
#for changed_status in "${!changed[@]}"
|
||||||
for short_setting in "${!old[@]}"
|
for short_setting in "${!old[@]}"
|
||||||
do
|
do
|
||||||
changed[$short_setting]=false
|
changed[$short_setting]=false
|
||||||
[ -z ${!short_setting+x} ] && continue
|
if [ -z ${!short_setting+x} ]; then
|
||||||
|
# Assign the var with the old value in order to allows multiple
|
||||||
|
# args validation
|
||||||
|
declare "$short_setting"="${old[$short_setting]}"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
if [ ! -z "${file_hash[${short_setting}]}" ] ; then
|
if [ ! -z "${file_hash[${short_setting}]}" ] ; then
|
||||||
file_hash[old__$short_setting]=""
|
file_hash[old__$short_setting]=""
|
||||||
file_hash[new__$short_setting]=""
|
file_hash[new__$short_setting]=""
|
||||||
|
@ -217,30 +223,32 @@ _ynh_panel_validate() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Run validation if something is changed
|
|
||||||
if [[ "$is_error" == "false" ]]
|
|
||||||
then
|
|
||||||
|
|
||||||
for short_setting in "${!old[@]}"
|
|
||||||
do
|
|
||||||
[[ "${changed[$short_setting]}" == "false" ]] && continue
|
|
||||||
local result=""
|
|
||||||
if type -t validate__$short_setting | grep -q '^function$' 2>/dev/null; then
|
|
||||||
result="$(validate__$short_setting)"
|
|
||||||
fi
|
|
||||||
if [ -n "$result" ]
|
|
||||||
then
|
|
||||||
local key="YNH_ERROR_${$short_setting}"
|
|
||||||
ynh_return "$key: $result"
|
|
||||||
is_error=true
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$is_error" == "true" ]]
|
if [[ "$is_error" == "true" ]]
|
||||||
then
|
then
|
||||||
ynh_die ""
|
ynh_die "Nothing has changed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run validation if something is changed
|
||||||
|
ynh_script_progression --message="Validating the new configuration..." --weight=1
|
||||||
|
|
||||||
|
for short_setting in "${!old[@]}"
|
||||||
|
do
|
||||||
|
[[ "${changed[$short_setting]}" == "false" ]] && continue
|
||||||
|
local result=""
|
||||||
|
if type -t validate__$short_setting | grep -q '^function$' 2>/dev/null; then
|
||||||
|
result="$(validate__$short_setting)"
|
||||||
|
fi
|
||||||
|
if [ -n "$result" ]
|
||||||
|
then
|
||||||
|
local key="YNH_ERROR_${short_setting}"
|
||||||
|
ynh_return "$key: $result"
|
||||||
|
is_error=true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "$is_error" == "true" ]]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -266,11 +274,22 @@ ynh_panel_run() {
|
||||||
declare -Ag changed=()
|
declare -Ag changed=()
|
||||||
declare -Ag file_hash=()
|
declare -Ag file_hash=()
|
||||||
declare -Ag sources=()
|
declare -Ag sources=()
|
||||||
|
|
||||||
ynh_panel_get
|
|
||||||
case $1 in
|
case $1 in
|
||||||
show) ynh_panel_get && ynh_panel_show;;
|
show)
|
||||||
apply) ynh_panel_get && ynh_panel_validate && ynh_panel_apply;;
|
ynh_panel_get
|
||||||
|
ynh_panel_show
|
||||||
|
;;
|
||||||
|
apply)
|
||||||
|
max_progression=4
|
||||||
|
ynh_script_progression --message="Reading config panel description and current configuration..." --weight=1
|
||||||
|
ynh_panel_get
|
||||||
|
|
||||||
|
ynh_panel_validate
|
||||||
|
|
||||||
|
ynh_script_progression --message="Applying the new configuration..." --weight=1
|
||||||
|
ynh_panel_apply
|
||||||
|
ynh_script_progression --message="Configuration of $app completed" --last
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1769,7 +1769,7 @@ def app_config_show(operation_logger, app, panel='', full=False):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Call config script to extract current values
|
# Call config script to extract current values
|
||||||
parsed_values = _call_config_script(app, 'show')
|
parsed_values = _call_config_script(operation_logger, app, 'show')
|
||||||
|
|
||||||
# # Check and transform values if needed
|
# # Check and transform values if needed
|
||||||
# options = [option for _, _, option in _get_options_iterator(config_panel)]
|
# options = [option for _, _, option in _get_options_iterator(config_panel)]
|
||||||
|
@ -1820,7 +1820,7 @@ def app_config_get(operation_logger, app, key):
|
||||||
raise YunohostError("app_config_no_panel")
|
raise YunohostError("app_config_no_panel")
|
||||||
|
|
||||||
# Call config script to extract current values
|
# Call config script to extract current values
|
||||||
parsed_values = _call_config_script(app, 'show')
|
parsed_values = _call_config_script(operation_logger, app, 'show')
|
||||||
|
|
||||||
logger.debug("Searching value")
|
logger.debug("Searching value")
|
||||||
short_key = key.split('.')[-1]
|
short_key = key.split('.')[-1]
|
||||||
|
@ -1891,7 +1891,7 @@ def app_config_set(operation_logger, app, key=None, value=None, args=None):
|
||||||
env = {key: value[0] for key, value in args_dict.items()}
|
env = {key: value[0] for key, value in args_dict.items()}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
errors = _call_config_script(app, 'apply', env=env)
|
errors = _call_config_script(operation_logger, app, 'apply', env=env)
|
||||||
# Here again, calling hook_exec could fail miserably, or get
|
# Here again, calling hook_exec could fail miserably, or get
|
||||||
# manually interrupted (by mistake or because script was stuck)
|
# manually interrupted (by mistake or because script was stuck)
|
||||||
except (KeyboardInterrupt, EOFError, Exception):
|
except (KeyboardInterrupt, EOFError, Exception):
|
||||||
|
@ -1917,7 +1917,7 @@ def _get_options_iterator(config_panel):
|
||||||
yield (panel, section, option)
|
yield (panel, section, option)
|
||||||
|
|
||||||
|
|
||||||
def _call_config_script(app, action, env={}):
|
def _call_config_script(operation_logger, app, action, env={}):
|
||||||
from yunohost.hook import hook_exec
|
from yunohost.hook import hook_exec
|
||||||
|
|
||||||
# Add default config script if needed
|
# Add default config script if needed
|
||||||
|
@ -1933,7 +1933,7 @@ ynh_panel_run $1
|
||||||
write_to_file(config_script, default_script)
|
write_to_file(config_script, default_script)
|
||||||
|
|
||||||
# Call config script to extract current values
|
# Call config script to extract current values
|
||||||
logger.debug("Calling 'show' action from config script")
|
logger.debug(f"Calling '{action}' action from config script")
|
||||||
app_id, app_instance_nb = _parse_app_instance_name(app)
|
app_id, app_instance_nb = _parse_app_instance_name(app)
|
||||||
env.update({
|
env.update({
|
||||||
"app_id": app_id,
|
"app_id": app_id,
|
||||||
|
@ -1941,9 +1941,11 @@ ynh_panel_run $1
|
||||||
"app_instance_nb": str(app_instance_nb),
|
"app_instance_nb": str(app_instance_nb),
|
||||||
})
|
})
|
||||||
|
|
||||||
_, parsed_values = hook_exec(
|
ret, parsed_values = hook_exec(
|
||||||
config_script, args=[action], env=env
|
config_script, args=[action], env=env
|
||||||
)
|
)
|
||||||
|
if ret != 0:
|
||||||
|
operation_logger.error(parsed_values)
|
||||||
return parsed_values
|
return parsed_values
|
||||||
|
|
||||||
|
|
||||||
|
@ -3047,7 +3049,7 @@ class FileArgumentParser(YunoHostArgumentFormatParser):
|
||||||
question.value = {
|
question.value = {
|
||||||
'content': user_answers[question.name],
|
'content': user_answers[question.name],
|
||||||
'filename': user_answers.get(f"{question.name}[name]", question.name),
|
'filename': user_answers.get(f"{question.name}[name]", question.name),
|
||||||
} if user_answers[question.name] else None
|
} if user_answers.get(question.name) else None
|
||||||
return question
|
return question
|
||||||
|
|
||||||
def _post_parse_value(self, question):
|
def _post_parse_value(self, question):
|
||||||
|
|
Loading…
Add table
Reference in a new issue