diff --git a/src/rougail/cli/__main__.py b/src/rougail/cli/__main__.py index b64b9fd..2d87ac4 100644 --- a/src/rougail/cli/__main__.py +++ b/src/rougail/cli/__main__.py @@ -164,7 +164,8 @@ def load_user_datas(rougailconfig): user_data_names = rougailconfig["step.user_data"] except PropertiesOptionError: user_data_names = [] - if rougailconfig["cli.layers"]: + has_layers = rougailconfig["cli.layers"] + if has_layers: layers = [[ud] for ud in user_data_names] last_layers = len(layers) - 1 else: @@ -172,8 +173,8 @@ def load_user_datas(rougailconfig): last_layers = 0 rougail = Rougail(rougailconfig) layer_name = "_".join(layers[-1]) - config = rougail.run(name=layer_name) - metaconfig = config + subconfig = rougail.run(name=layer_name) + metaconfig = subconfig if last_layers: for layer in layers[:-1]: layer_name = "_".join(layer) @@ -181,11 +182,13 @@ def load_user_datas(rougailconfig): metaconfig.owner.set(metaconfig.path()) subconfig = metaconfig err_warn = {"errors": [], "warnings": []} + invalid_user_datas_error = rougailconfig["cli.invalid_user_datas_error"] + unknown_user_datas_error = rougailconfig["cli.unknown_user_datas_error"] + interactive_user_datas = {} for idx, layer in enumerate(layers): if idx: subconfig = subconfig.config("_".join(layer)) - config.owner.set(subconfig.path()) - subconfig.property.read_write() + subconfig.owner.set(subconfig.path()) # data user user_datas = [] for user_data_name in layer: @@ -199,22 +202,33 @@ def load_user_datas(rougailconfig): _('cannot find "user_data" module "{0}"').format(user_data_name) ) module = load_modules("rougail.user_data_" + user_data_name, str(path)) + rougail_user_datas = module.RougailUserData + if hasattr(rougail_user_datas, 'interactive_user_datas') and rougail_user_datas.interactive_user_datas: + interactive_user_datas[user_data_name] = rougail_user_datas + continue + elif interactive_user_datas: + raise Exception(_(f'interactive user datas "{0}" is loader before uninteractive user datas "{1}"').format(list(interactive_user_datas), user_data_name)) user_datas.extend( - module.RougailUserData( + rougail_user_datas( subconfig, rougailconfig=rougailconfig, ).run() ) - if user_datas: - new_err_warn = UserDatas(subconfig).user_datas(user_datas) - for level, datas in new_err_warn.items(): - if datas: - err_warn[level].updates(datas) - subconfig = metaconfig - for idx, layer in enumerate(layers): - if idx: + if user_datas: + new_err_warn = UserDatas(subconfig).user_datas(user_datas, invalid_user_datas_error=invalid_user_datas_error, unknown_user_datas_error=unknown_user_datas_error) + for level, datas in new_err_warn.items(): + if datas: + err_warn[level].updates(datas) + for layer, rougail_user_datas in interactive_user_datas.items(): + if has_layers and len(layers) > 1: subconfig = subconfig.config("_".join(layer)) - return metaconfig, config, err_warn + subconfig.owner.set(subconfig.path()) + rougail_user_datas( + subconfig, + rougailconfig=rougailconfig, + ).run() + + return metaconfig, subconfig, err_warn def get_output(rougailconfig, metaconfig, config, err_warn): diff --git a/src/rougail/cli/config.py b/src/rougail/cli/config.py index c8729b8..ae556e2 100644 --- a/src/rougail/cli/config.py +++ b/src/rougail/cli/config.py @@ -41,6 +41,10 @@ cli: versions: false # {_('Displays Rougail version and all its components')} + invalid_user_datas_error: false # {_("Invalid value in user datas is not allowed")} + + unknown_user_datas_error: false # {_("Unknown variable in user datas is not allowed")} + layers: description: {_('Open each user datas in separate layers')} default: false