From 437664e95ac49286e107796dd5c1638f6311a014 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Fri, 6 Mar 2026 08:15:21 +0100 Subject: [PATCH] feat: better mandatories support (centralized) --- src/rougail/cli/__main__.py | 13 +++++++++---- src/rougail/cli/config.py | 11 ++++++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/rougail/cli/__main__.py b/src/rougail/cli/__main__.py index 854a995..f90bba3 100644 --- a/src/rougail/cli/__main__.py +++ b/src/rougail/cli/__main__.py @@ -27,7 +27,7 @@ from tiramisu.error import PropertiesOptionError from tiramisu import MetaConfig from rougail import Rougail -from rougail.user_data import UserData +from rougail.user_data import UserData, mandatories from rougail.config import get_rougail_config from rougail.utils import load_modules from rougail.error import RougailWarning @@ -63,6 +63,10 @@ def _main(arguments, do_not_print): print(version) exit() layer_datas, metaconfig, config, err_warn = load_user_data(rougailconfig) + if config and (not rougailconfig["cli.load_config"] or not rougailconfig["cli.read_write"]): + config.property.read_only() + if rougailconfig["cli.mandatory"]: + mandatories(config, err_warn["errors"]) output = get_output(rougailconfig, metaconfig, config, @@ -106,7 +110,10 @@ def load_cmd_user_data(rougailconfig, arguments): for warning in user_data["warnings"]: if isinstance(warning, dict): for w, var in warning.items(): - warn(UserWarning(f'unable to load "{var.option.impl_get_display_name(var)}", {str(w)}')) + if var: + warn(UserWarning(f'unable to load "{var.option.impl_get_display_name(var)}", {str(w)}')) + else: + warn(UserWarning(f'{str(w)}')) else: warn(warning) if manage_warnings: @@ -288,8 +295,6 @@ def load_user_data(rougailconfig): def get_output(rougailconfig, metaconfig, config, err_warn, layer_datas): # output - if config and (not rougailconfig["cli.load_config"] or not rougailconfig["cli.read_write"]): - config.property.read_only() output_name = rougailconfig["step.output"] path = Path(__file__).parent.parent / ("output_" + output_name) / "__init__.py" if not path.is_file(): diff --git a/src/rougail/cli/config.py b/src/rougail/cli/config.py index 0429960..4bc5467 100644 --- a/src/rougail/cli/config.py +++ b/src/rougail/cli/config.py @@ -26,7 +26,6 @@ def get_rougail_config( options = f""" tiramisu_cache: redefine: true - hidden: true default: variable: _.cli.tiramisu_cache @@ -100,6 +99,16 @@ cli: read_write: false # {_('Configuration in output step is in read_write mode')} + mandatory: + description: {_('test mandatories variables')} + help: |- + {_("The configuration must be valid before process output. It's better to validate the values at the beginning of the process.")} + type: boolean + default: + jinja: |- + {{{{ cli.read_write == false }}}} + description: {_('if "cli.read_write" is false')} + description_type: description: {_('Type of variables description')} alternative_name: cd