mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
rename Option.name to Option.id
This commit is contained in:
parent
e87f8ef93a
commit
c1f0ac04c7
4 changed files with 45 additions and 45 deletions
20
src/app.py
20
src/app.py
|
@ -1099,7 +1099,7 @@ def app_install(
|
|||
raw_questions = manifest["install"]
|
||||
questions = ask_questions_and_parse_answers(raw_questions, prefilled_answers=args)
|
||||
args = {
|
||||
question.name: question.value
|
||||
question.id: question.value
|
||||
for question in questions
|
||||
if question.value is not None
|
||||
}
|
||||
|
@ -1147,7 +1147,7 @@ def app_install(
|
|||
if question.type == "password":
|
||||
continue
|
||||
|
||||
app_settings[question.name] = question.value
|
||||
app_settings[question.id] = question.value
|
||||
|
||||
_set_app_settings(app_instance_name, app_settings)
|
||||
|
||||
|
@ -1202,16 +1202,16 @@ def app_install(
|
|||
# Reinject user-provider passwords which are not in the app settings
|
||||
# (cf a few line before)
|
||||
if question.type == "password":
|
||||
env_dict[question.name] = question.value
|
||||
env_dict[question.id] = question.value
|
||||
|
||||
# We want to hav the env_dict in the log ... but not password values
|
||||
env_dict_for_logging = env_dict.copy()
|
||||
for question in questions:
|
||||
# Or should it be more generally question.redact ?
|
||||
if question.type == "password":
|
||||
del env_dict_for_logging[f"YNH_APP_ARG_{question.name.upper()}"]
|
||||
if question.name in env_dict_for_logging:
|
||||
del env_dict_for_logging[question.name]
|
||||
del env_dict_for_logging[f"YNH_APP_ARG_{question.id.upper()}"]
|
||||
if question.id in env_dict_for_logging:
|
||||
del env_dict_for_logging[question.id]
|
||||
|
||||
operation_logger.extra.update({"env": env_dict_for_logging})
|
||||
|
||||
|
@ -2358,17 +2358,17 @@ def _set_default_ask_questions(questions, script_name="install"):
|
|||
), # i18n: app_manifest_install_ask_init_admin_permission
|
||||
]
|
||||
|
||||
for question_name, question in questions.items():
|
||||
question["name"] = question_name
|
||||
for question_id, question in questions.items():
|
||||
question["id"] = question_id
|
||||
|
||||
# If this question corresponds to a question with default ask message...
|
||||
if any(
|
||||
(question.get("type"), question["name"]) == question_with_default
|
||||
(question.get("type"), question["id"]) == question_with_default
|
||||
for question_with_default in questions_with_default
|
||||
):
|
||||
# The key is for example "app_manifest_install_ask_domain"
|
||||
question["ask"] = m18n.n(
|
||||
f"app_manifest_{script_name}_ask_{question['name']}"
|
||||
f"app_manifest_{script_name}_ask_{question['id']}"
|
||||
)
|
||||
|
||||
# Also it in fact doesn't make sense for any of those questions to have an example value nor a default value...
|
||||
|
|
|
@ -33,7 +33,7 @@ from yunohost.utils.error import YunohostError, YunohostValidationError
|
|||
"""
|
||||
Argument default format:
|
||||
{
|
||||
"the_name": {
|
||||
"the_id": {
|
||||
"type": "one_of_the_available_type", // "sting" is not specified
|
||||
"ask": {
|
||||
"en": "the question in english",
|
||||
|
@ -50,7 +50,7 @@ Argument default format:
|
|||
}
|
||||
|
||||
User answers:
|
||||
{"the_name": "value", ...}
|
||||
{"the_id": "value", ...}
|
||||
"""
|
||||
|
||||
|
||||
|
@ -443,7 +443,7 @@ class BaseTest:
|
|||
|
||||
assert isinstance(option, OPTIONS[raw_option["type"]])
|
||||
assert option.type == raw_option["type"]
|
||||
assert option.name == id_
|
||||
assert option.id == id_
|
||||
assert option.ask == {"en": id_}
|
||||
assert option.readonly is (True if is_special_readonly_option else False)
|
||||
assert option.visible is True
|
||||
|
@ -1913,7 +1913,7 @@ def test_options_query_string():
|
|||
)
|
||||
|
||||
def _assert_correct_values(options, raw_options):
|
||||
form = {option.name: option.value for option in options}
|
||||
form = {option.id: option.value for option in options}
|
||||
|
||||
for k, v in results.items():
|
||||
if k == "file_id":
|
||||
|
@ -1945,7 +1945,7 @@ def test_question_string_default_type():
|
|||
|
||||
out = ask_questions_and_parse_answers(questions, answers)[0]
|
||||
|
||||
assert out.name == "some_string"
|
||||
assert out.id == "some_string"
|
||||
assert out.type == "string"
|
||||
assert out.value == "some_value"
|
||||
|
||||
|
|
|
@ -521,7 +521,7 @@ class ConfigPanel:
|
|||
f"Config panel question '{option['id']}' should be initialized with a value during install or upgrade.",
|
||||
raw_msg=True,
|
||||
)
|
||||
value = self.values[option["name"]]
|
||||
value = self.values[option["id"]]
|
||||
|
||||
# Allow to use value instead of current_value in app config script.
|
||||
# e.g. apps may write `echo 'value: "foobar"'` in the config file (which is more intuitive that `echo 'current_value: "foobar"'`
|
||||
|
@ -600,14 +600,14 @@ class ConfigPanel:
|
|||
prefilled_answers.update(self.new_values)
|
||||
|
||||
questions = ask_questions_and_parse_answers(
|
||||
{question["name"]: question for question in section["options"]},
|
||||
{question["id"]: question for question in section["options"]},
|
||||
prefilled_answers=prefilled_answers,
|
||||
current_values=self.values,
|
||||
hooks=self.hooks,
|
||||
)
|
||||
self.new_values.update(
|
||||
{
|
||||
question.name: question.value
|
||||
question.id: question.value
|
||||
for question in questions
|
||||
if question.value is not None
|
||||
}
|
||||
|
|
|
@ -245,7 +245,7 @@ class BaseOption:
|
|||
self,
|
||||
question: Dict[str, Any],
|
||||
):
|
||||
self.name = question["name"]
|
||||
self.id = question["id"]
|
||||
self.type = question.get("type", OptionType.string)
|
||||
self.visible = question.get("visible", True)
|
||||
|
||||
|
@ -255,10 +255,10 @@ class BaseOption:
|
|||
raise YunohostError(
|
||||
"config_forbidden_readonly_type",
|
||||
type=self.type,
|
||||
id=self.name,
|
||||
id=self.id,
|
||||
)
|
||||
|
||||
self.ask = question.get("ask", self.name)
|
||||
self.ask = question.get("ask", self.id)
|
||||
if not isinstance(self.ask, dict):
|
||||
self.ask = {"en": self.ask}
|
||||
|
||||
|
@ -379,14 +379,14 @@ class BaseInputOption(BaseOption):
|
|||
|
||||
def _value_pre_validator(self):
|
||||
if self.value in [None, ""] and not self.optional:
|
||||
raise YunohostValidationError("app_argument_required", name=self.name)
|
||||
raise YunohostValidationError("app_argument_required", name=self.id)
|
||||
|
||||
# we have an answer, do some post checks
|
||||
if self.value not in [None, ""]:
|
||||
if self.pattern and not re.match(self.pattern["regexp"], str(self.value)):
|
||||
raise YunohostValidationError(
|
||||
self.pattern["error"],
|
||||
name=self.name,
|
||||
name=self.id,
|
||||
value=self.value,
|
||||
)
|
||||
|
||||
|
@ -440,7 +440,7 @@ class PasswordOption(BaseInputOption):
|
|||
self.redact = True
|
||||
if self.default is not None:
|
||||
raise YunohostValidationError(
|
||||
"app_argument_password_no_default", name=self.name
|
||||
"app_argument_password_no_default", name=self.id
|
||||
)
|
||||
|
||||
def _value_pre_validator(self):
|
||||
|
@ -496,7 +496,7 @@ class NumberOption(BaseInputOption):
|
|||
option = option.__dict__ if isinstance(option, BaseOption) else option
|
||||
raise YunohostValidationError(
|
||||
"app_argument_invalid",
|
||||
name=option.get("name"),
|
||||
name=option.get("id"),
|
||||
error=m18n.n("invalid_number"),
|
||||
)
|
||||
|
||||
|
@ -508,14 +508,14 @@ class NumberOption(BaseInputOption):
|
|||
if self.min is not None and int(self.value) < self.min:
|
||||
raise YunohostValidationError(
|
||||
"app_argument_invalid",
|
||||
name=self.name,
|
||||
name=self.id,
|
||||
error=m18n.n("invalid_number_min", min=self.min),
|
||||
)
|
||||
|
||||
if self.max is not None and int(self.value) > self.max:
|
||||
raise YunohostValidationError(
|
||||
"app_argument_invalid",
|
||||
name=self.name,
|
||||
name=self.id,
|
||||
error=m18n.n("invalid_number_max", max=self.max),
|
||||
)
|
||||
|
||||
|
@ -554,7 +554,7 @@ class BooleanOption(BaseInputOption):
|
|||
|
||||
raise YunohostValidationError(
|
||||
"app_argument_choice_invalid",
|
||||
name=option.get("name"),
|
||||
name=option.get("id"),
|
||||
value=value,
|
||||
choices="yes/no",
|
||||
)
|
||||
|
@ -594,7 +594,7 @@ class BooleanOption(BaseInputOption):
|
|||
|
||||
raise YunohostValidationError(
|
||||
"app_argument_choice_invalid",
|
||||
name=option.get("name"),
|
||||
name=option.get("id"),
|
||||
value=strvalue,
|
||||
choices="yes/no",
|
||||
)
|
||||
|
@ -663,7 +663,7 @@ class WebPathOption(BaseInputOption):
|
|||
if not isinstance(value, str):
|
||||
raise YunohostValidationError(
|
||||
"app_argument_invalid",
|
||||
name=option.get("name"),
|
||||
name=option.get("id"),
|
||||
error="Argument for path should be a string.",
|
||||
)
|
||||
|
||||
|
@ -676,7 +676,7 @@ class WebPathOption(BaseInputOption):
|
|||
elif option.get("optional") is False:
|
||||
raise YunohostValidationError(
|
||||
"app_argument_invalid",
|
||||
name=option.get("name"),
|
||||
name=option.get("id"),
|
||||
error="Option is mandatory",
|
||||
)
|
||||
|
||||
|
@ -725,7 +725,7 @@ class FileOption(BaseInputOption):
|
|||
):
|
||||
raise YunohostValidationError(
|
||||
"app_argument_invalid",
|
||||
name=self.name,
|
||||
name=self.id,
|
||||
error=m18n.n("file_does_not_exist", path=str(self.value)),
|
||||
)
|
||||
|
||||
|
@ -740,7 +740,7 @@ class FileOption(BaseInputOption):
|
|||
|
||||
FileOption.upload_dirs += [upload_dir]
|
||||
|
||||
logger.debug(f"Saving file {self.name} for file question into {file_path}")
|
||||
logger.debug(f"Saving file {self.id} for file question into {file_path}")
|
||||
|
||||
def is_file_path(s):
|
||||
return isinstance(s, str) and s.startswith("/") and os.path.exists(s)
|
||||
|
@ -813,7 +813,7 @@ class BaseChoicesOption(BaseInputOption):
|
|||
if self.choices and self.value not in self.choices:
|
||||
raise YunohostValidationError(
|
||||
"app_argument_choice_invalid",
|
||||
name=self.name,
|
||||
name=self.id,
|
||||
value=self.value,
|
||||
choices=", ".join(str(choice) for choice in self.choices),
|
||||
)
|
||||
|
@ -853,13 +853,13 @@ class TagsOption(BaseChoicesOption):
|
|||
if self.choices:
|
||||
raise YunohostValidationError(
|
||||
"app_argument_choice_invalid",
|
||||
name=self.name,
|
||||
name=self.id,
|
||||
value=self.value,
|
||||
choices=", ".join(str(choice) for choice in self.choices),
|
||||
)
|
||||
raise YunohostValidationError(
|
||||
"app_argument_invalid",
|
||||
name=self.name,
|
||||
name=self.id,
|
||||
error=f"'{str(self.value)}' is not a list",
|
||||
)
|
||||
|
||||
|
@ -949,7 +949,7 @@ class UserOption(BaseChoicesOption):
|
|||
if not self.choices:
|
||||
raise YunohostValidationError(
|
||||
"app_argument_invalid",
|
||||
name=self.name,
|
||||
name=self.id,
|
||||
error="You should create a YunoHost user first.",
|
||||
)
|
||||
|
||||
|
@ -1033,9 +1033,9 @@ def prompt_or_validate_form(
|
|||
options = []
|
||||
answers = {**prefilled_answers}
|
||||
|
||||
for name, raw_option in raw_options.items():
|
||||
raw_option["name"] = name
|
||||
raw_option["value"] = answers.get(name)
|
||||
for id_, raw_option in raw_options.items():
|
||||
raw_option["id"] = id_
|
||||
raw_option["value"] = answers.get(id_)
|
||||
question_class = OPTIONS[raw_option.get("type", "string")]
|
||||
option = question_class(raw_option)
|
||||
|
||||
|
@ -1047,7 +1047,7 @@ def prompt_or_validate_form(
|
|||
else:
|
||||
raise YunohostValidationError(
|
||||
"config_action_disabled",
|
||||
action=option.name,
|
||||
action=option.id,
|
||||
help=_value_for_locale(option.help),
|
||||
)
|
||||
|
||||
|
@ -1060,7 +1060,7 @@ def prompt_or_validate_form(
|
|||
# - we doesn't want to give a specific value
|
||||
# - we want to keep the previous value
|
||||
# - we want the default value
|
||||
option.value = context[option.name] = None
|
||||
option.value = context[option.id] = None
|
||||
|
||||
continue
|
||||
|
||||
|
@ -1071,7 +1071,7 @@ def prompt_or_validate_form(
|
|||
Moulinette.display(message)
|
||||
|
||||
if isinstance(option, BaseInputOption):
|
||||
option.value = context[option.name] = option.current_value
|
||||
option.value = context[option.id] = option.current_value
|
||||
|
||||
continue
|
||||
|
||||
|
@ -1123,10 +1123,10 @@ def prompt_or_validate_form(
|
|||
|
||||
break
|
||||
|
||||
option.value = option.values[option.name] = option._value_post_validator()
|
||||
option.value = option.values[option.id] = option._value_post_validator()
|
||||
|
||||
# Search for post actions in hooks
|
||||
post_hook = f"post_ask__{option.name}"
|
||||
post_hook = f"post_ask__{option.id}"
|
||||
if post_hook in hooks:
|
||||
option.values.update(hooks[post_hook](option))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue