mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
[mod] DRY, remove big copy/pasta
This commit is contained in:
parent
3806e2a908
commit
f8d99e52e3
1 changed files with 13 additions and 132 deletions
|
@ -2005,139 +2005,12 @@ def _parse_args_from_manifest(manifest, action, args={}, auth=None):
|
|||
args -- A dictionnary of arguments to parse
|
||||
|
||||
"""
|
||||
from yunohost.domain import (domain_list, _get_maindomain,
|
||||
domain_url_available, _normalize_domain_path)
|
||||
from yunohost.user import user_info
|
||||
|
||||
args_dict = OrderedDict()
|
||||
try:
|
||||
action_args = manifest['arguments'][action]
|
||||
except KeyError:
|
||||
logger.debug("no arguments found for '%s' in manifest", action)
|
||||
else:
|
||||
for arg in action_args:
|
||||
arg_name = arg['name']
|
||||
arg_type = arg.get('type', 'string')
|
||||
arg_default = arg.get('default', None)
|
||||
arg_choices = arg.get('choices', [])
|
||||
arg_value = None
|
||||
|
||||
# Transpose default value for boolean type and set it to
|
||||
# false if not defined.
|
||||
if arg_type == 'boolean':
|
||||
arg_default = 1 if arg_default else 0
|
||||
|
||||
# Attempt to retrieve argument value
|
||||
if arg_name in args:
|
||||
arg_value = args[arg_name]
|
||||
else:
|
||||
if 'ask' in arg:
|
||||
# Retrieve proper ask string
|
||||
ask_string = _value_for_locale(arg['ask'])
|
||||
|
||||
# Append extra strings
|
||||
if arg_type == 'boolean':
|
||||
ask_string += ' [0 | 1]'
|
||||
elif arg_choices:
|
||||
ask_string += ' [{0}]'.format(' | '.join(arg_choices))
|
||||
if arg_default is not None:
|
||||
ask_string += ' (default: {0})'.format(arg_default)
|
||||
|
||||
# Check for a password argument
|
||||
is_password = True if arg_type == 'password' else False
|
||||
|
||||
if arg_type == 'domain':
|
||||
arg_default = _get_maindomain()
|
||||
ask_string += ' (default: {0})'.format(arg_default)
|
||||
msignals.display(m18n.n('domains_available'))
|
||||
for domain in domain_list(auth)['domains']:
|
||||
msignals.display("- {}".format(domain))
|
||||
|
||||
try:
|
||||
input_string = msignals.prompt(ask_string, is_password)
|
||||
except NotImplementedError:
|
||||
input_string = None
|
||||
if (input_string == '' or input_string is None) \
|
||||
and arg_default is not None:
|
||||
arg_value = arg_default
|
||||
else:
|
||||
arg_value = input_string
|
||||
elif arg_default is not None:
|
||||
arg_value = arg_default
|
||||
|
||||
# Validate argument value
|
||||
if (arg_value is None or arg_value == '') \
|
||||
and not arg.get('optional', False):
|
||||
raise MoulinetteError(errno.EINVAL,
|
||||
m18n.n('app_argument_required', name=arg_name))
|
||||
elif arg_value is None:
|
||||
args_dict[arg_name] = ''
|
||||
continue
|
||||
|
||||
# Validate argument choice
|
||||
if arg_choices and arg_value not in arg_choices:
|
||||
raise MoulinetteError(errno.EINVAL,
|
||||
m18n.n('app_argument_choice_invalid',
|
||||
name=arg_name, choices=', '.join(arg_choices)))
|
||||
|
||||
# Validate argument type
|
||||
if arg_type == 'domain':
|
||||
if arg_value not in domain_list(auth)['domains']:
|
||||
raise MoulinetteError(errno.EINVAL,
|
||||
m18n.n('app_argument_invalid',
|
||||
name=arg_name, error=m18n.n('domain_unknown')))
|
||||
elif arg_type == 'user':
|
||||
try:
|
||||
user_info(auth, arg_value)
|
||||
except MoulinetteError as e:
|
||||
raise MoulinetteError(errno.EINVAL,
|
||||
m18n.n('app_argument_invalid',
|
||||
name=arg_name, error=e.strerror))
|
||||
elif arg_type == 'app':
|
||||
if not _is_installed(arg_value):
|
||||
raise MoulinetteError(errno.EINVAL,
|
||||
m18n.n('app_argument_invalid',
|
||||
name=arg_name, error=m18n.n('app_unknown')))
|
||||
elif arg_type == 'boolean':
|
||||
if isinstance(arg_value, bool):
|
||||
arg_value = 1 if arg_value else 0
|
||||
else:
|
||||
try:
|
||||
arg_value = int(arg_value)
|
||||
if arg_value not in [0, 1]:
|
||||
raise ValueError()
|
||||
except (TypeError, ValueError):
|
||||
raise MoulinetteError(errno.EINVAL,
|
||||
m18n.n('app_argument_choice_invalid',
|
||||
name=arg_name, choices='0, 1'))
|
||||
args_dict[arg_name] = arg_value
|
||||
|
||||
# END loop over action_args...
|
||||
|
||||
# If there's only one "domain" and "path", validate that domain/path
|
||||
# is an available url and normalize the path.
|
||||
|
||||
domain_args = [arg["name"] for arg in action_args
|
||||
if arg.get("type", "string") == "domain"]
|
||||
path_args = [arg["name"] for arg in action_args
|
||||
if arg.get("type", "string") == "path"]
|
||||
|
||||
if len(domain_args) == 1 and len(path_args) == 1:
|
||||
|
||||
domain = args_dict[domain_args[0]]
|
||||
path = args_dict[path_args[0]]
|
||||
domain, path = _normalize_domain_path(domain, path)
|
||||
|
||||
# Check the url is available
|
||||
if not domain_url_available(auth, domain, path):
|
||||
raise MoulinetteError(errno.EINVAL,
|
||||
m18n.n('app_location_unavailable'))
|
||||
|
||||
# (We save this normalized path so that the install script have a
|
||||
# standard path format to deal with no matter what the user inputted)
|
||||
args_dict[path_args[0]] = path
|
||||
|
||||
return args_dict
|
||||
return _parse_action_args_in_yunohost_format(args, action_args, auth)
|
||||
|
||||
|
||||
def _parse_args_for_action(action, args={}, auth=None):
|
||||
|
@ -2153,10 +2026,6 @@ def _parse_args_for_action(action, args={}, auth=None):
|
|||
args -- A dictionnary of arguments to parse
|
||||
|
||||
"""
|
||||
from yunohost.domain import (domain_list, _get_maindomain,
|
||||
domain_url_available, _normalize_domain_path)
|
||||
from yunohost.user import user_info
|
||||
|
||||
args_dict = OrderedDict()
|
||||
|
||||
if 'arguments' not in action:
|
||||
|
@ -2165,6 +2034,18 @@ def _parse_args_for_action(action, args={}, auth=None):
|
|||
|
||||
action_args = action['arguments']
|
||||
|
||||
return _parse_action_args_in_yunohost_format(args, action_args, auth)
|
||||
|
||||
|
||||
def _parse_action_args_in_yunohost_format(args, action_args, auth=None):
|
||||
"""Parse arguments store in either manifest.json or actions.json
|
||||
"""
|
||||
from yunohost.domain import (domain_list, _get_maindomain,
|
||||
domain_url_available, _normalize_domain_path)
|
||||
from yunohost.user import user_info
|
||||
|
||||
args_dict = OrderedDict()
|
||||
|
||||
for arg in action_args:
|
||||
arg_name = arg['name']
|
||||
arg_type = arg.get('type', 'string')
|
||||
|
|
Loading…
Add table
Reference in a new issue