diff --git a/locale/fr/LC_MESSAGES/rougail_cli.po b/locale/fr/LC_MESSAGES/rougail_cli.po index 61b3e32..800fee5 100644 --- a/locale/fr/LC_MESSAGES/rougail_cli.po +++ b/locale/fr/LC_MESSAGES/rougail_cli.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2025-05-12 08:44+0200\n" -"PO-Revision-Date: 2025-05-12 08:44+0200\n" +"POT-Creation-Date: 2025-05-14 08:22+0200\n" +"PO-Revision-Date: 2025-05-14 08:22+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -16,15 +16,15 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" "X-Generator: Poedit 3.5\n" -#: src/rougail/cli/__main__.py:151 +#: src/rougail/cli/__main__.py:170 msgid "cannot find \"user_data\" module \"{0}\"" msgstr "ne peut trouve le module \"user_data\" \"{0}\"" -#: src/rougail/cli/__main__.py:195 +#: src/rougail/cli/__main__.py:214 msgid "cannot find cli file for \"output_name\" module \"{0}\"" msgstr "ne peut trouve le fichier cli pour le module \"output_name\" \"{0}\"" -#: src/rougail/cli/__main__.py:221 +#: src/rougail/cli/__main__.py:240 msgid "ERROR: {0}" msgstr "ERREUR : {0}" @@ -37,11 +37,15 @@ msgid "Loads command line parameters from a file" msgstr "Charger les paramètres de la ligne de commande depuis un fichier" #: src/rougail/cli/config.py:39 -msgid "Display debug informations" +msgid "Displays debug informations" msgstr "Afficher les informations de debug" #: src/rougail/cli/config.py:43 -msgid "Display Rougail version and all componants" +msgid "Displays command line option warnings informations" +msgstr "Afficher les avertissements de chargement des options de la ligne de commande" + +#: src/rougail/cli/config.py:47 +msgid "Displays Rougail version and all its components" msgstr "Afficher la version de Rougail et de tous ces composants" #~ msgid "do not display debug informations" diff --git a/locale/rougail_cli.pot b/locale/rougail_cli.pot index 488892c..d192443 100644 --- a/locale/rougail_cli.pot +++ b/locale/rougail_cli.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2025-05-12 08:44+0200\n" +"POT-Creation-Date: 2025-05-14 08:25+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,15 +15,15 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: src/rougail/cli/__main__.py:151 +#: src/rougail/cli/__main__.py:170 msgid "cannot find \"user_data\" module \"{0}\"" msgstr "" -#: src/rougail/cli/__main__.py:195 +#: src/rougail/cli/__main__.py:214 msgid "cannot find cli file for \"output_name\" module \"{0}\"" msgstr "" -#: src/rougail/cli/__main__.py:221 +#: src/rougail/cli/__main__.py:240 msgid "ERROR: {0}" msgstr "" @@ -36,10 +36,14 @@ msgid "Loads command line parameters from a file" msgstr "" #: src/rougail/cli/config.py:39 -msgid "Display debug informations" +msgid "Displays debug informations" msgstr "" #: src/rougail/cli/config.py:43 -msgid "Display Rougail version and all componants" +msgid "Displays command line option warnings informations" +msgstr "" + +#: src/rougail/cli/config.py:47 +msgid "Displays Rougail version and all its components" msgstr "" diff --git a/src/rougail/cli/__main__.py b/src/rougail/cli/__main__.py index c877247..9e031f3 100644 --- a/src/rougail/cli/__main__.py +++ b/src/rougail/cli/__main__.py @@ -16,6 +16,7 @@ You should have received a copy of the GNU General Public License along with Mtools. If not, see . """ +import os from warnings import warn from pathlib import Path from sys import exit @@ -41,6 +42,9 @@ except ImportError: from .i18n import _ +ENV_PREFIX = "ROUGAILCLI" + + def _main(arguments, do_not_print): rougailconfig = get_rougail_config( backward_compatibility=False, add_extra_options=False @@ -57,7 +61,10 @@ def _main(arguments, do_not_print): } fake_user_datas = [] if RougailUserDataYaml: - config_file = cmd_config.forcepermissive.option("cli.config_file").value.get() + cli_config_file_key = f"{ENV_PREFIX}_CLI.CONFIG_FILE" + config_file = os.environ.pop(cli_config_file_key, None) + if not config_file: + config_file = cmd_config.forcepermissive.option("cli.config_file").value.get() if Path(config_file).is_file(): fake_rougail_config = { "step.user_data": "yaml", @@ -70,7 +77,7 @@ def _main(arguments, do_not_print): if RougailUserDataEnvironment: fake_rougail_config = { "step.user_data": "environment", - "environment.default_environment_name": "ROUGAILCLI", + "environment.default_environment_name": ENV_PREFIX, } fake_user_datas.extend( RougailUserDataEnvironment( @@ -89,7 +96,7 @@ def _main(arguments, do_not_print): parser.parse_args(arguments) if user_datas: user_data = UserDatas(cmd_config).user_datas(user_datas, user_datas_type="values") - if user_data["warnings"]: + if user_data["warnings"] and cmd_config.option("cli.warnings").value.get(): for warning in user_data["warnings"]: warn(warning) if user_data["errors"]: diff --git a/src/rougail/cli/config.py b/src/rougail/cli/config.py index 6c4564a..0310c73 100644 --- a/src/rougail/cli/config.py +++ b/src/rougail/cli/config.py @@ -36,11 +36,15 @@ cli: default: .rougailcli.yml debug: - description: {_('Display debug informations')} + description: {_('Displays debug informations')} default: false + warnings: + description: {_('Displays command line option warnings informations')} + default: true + versions: - description: {_('Display Rougail version and all componants')} + description: {_('Displays Rougail version and all its components')} default: false load_config: diff --git a/src/rougail/cli/locale/fr/LC_MESSAGES/rougail_cli.mo b/src/rougail/cli/locale/fr/LC_MESSAGES/rougail_cli.mo index e3fa0f9..0ae6d5c 100644 Binary files a/src/rougail/cli/locale/fr/LC_MESSAGES/rougail_cli.mo and b/src/rougail/cli/locale/fr/LC_MESSAGES/rougail_cli.mo differ diff --git a/tests/rougailcli_file/.rougailcli.yml b/tests/rougailcli_file/.rougailcli.yml new file mode 100644 index 0000000..2568449 --- /dev/null +++ b/tests/rougailcli_file/.rougailcli.yml @@ -0,0 +1,7 @@ +--- +main_dictionaries: + - structures +step: + output: doc +doc: + output_format: json diff --git a/tests/rougailcli_file/alt_rougailcli.yml b/tests/rougailcli_file/alt_rougailcli.yml new file mode 100644 index 0000000..1818ce1 --- /dev/null +++ b/tests/rougailcli_file/alt_rougailcli.yml @@ -0,0 +1,7 @@ +--- +main_dictionaries: + - structures +step: + output: doc +doc: + output_format: console diff --git a/tests/rougailcli_file/console.txt b/tests/rougailcli_file/console.txt new file mode 100644 index 0000000..c9f2c9b --- /dev/null +++ b/tests/rougailcli_file/console.txt @@ -0,0 +1 @@ +"\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503\u001b[1m \u001b[0m\u001b[1mVariable \u001b[0m\u001b[1m \u001b[0m\u2503\u001b[1m \u001b[0m\u001b[1mDescription \u001b[0m\u001b[1m \u001b[0m\u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 \u001b[1mmy_variable\u001b[0m \u2502 A description. \u2502\n\u2502 \u001b[1;7m string \u001b[0m \u001b[1;7m mandatory \u001b[0m \u2502 \u001b[1mDefault\u001b[0m: my_value \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n" \ No newline at end of file diff --git a/tests/rougailcli_file/structures/file.yml b/tests/rougailcli_file/structures/file.yml new file mode 100644 index 0000000..a211e78 --- /dev/null +++ b/tests/rougailcli_file/structures/file.yml @@ -0,0 +1,4 @@ +--- +version: 1.1 + +my_variable: my_value # a description diff --git a/tests/rougailcli_file/yaml.txt b/tests/rougailcli_file/yaml.txt new file mode 100644 index 0000000..2d132fa --- /dev/null +++ b/tests/rougailcli_file/yaml.txt @@ -0,0 +1 @@ +"{\n \"my_variable\": {\n \"type\": \"variable\",\n \"default\": \"my_value\",\n \"properties\": [\n {\n \"type\": \"type\",\n \"name\": \"string\"\n },\n {\n \"type\": \"property\",\n \"name\": \"mandatory\"\n }\n ],\n \"paths\": [\n \"my_variable\"\n ],\n \"names\": [\n \"my_variable\"\n ],\n \"descriptions\": [\n \"A description.\"\n ]\n }\n}" \ No newline at end of file diff --git a/tests/test_load.py b/tests/test_load.py index 4e311dc..776e0f0 100644 --- a/tests/test_load.py +++ b/tests/test_load.py @@ -1,3 +1,4 @@ +import os from pathlib import Path from contextlib import chdir from json import dumps, loads @@ -78,3 +79,28 @@ def test_cli_version_user_data_disabled(): with filename.open() as fh: data = loads(fh.read()) assert ret == (True, data) + + +def test_cli_rougailcli(): + with chdir(test_dir / 'rougailcli_file'): + ret = main([], do_not_print=True) + filename = Path('yaml.txt') + if not filename.is_file(): + with filename.open('w') as fh: + fh.write(dumps(ret[1])) + with filename.open() as fh: + data = loads(fh.read()) + assert ret == (True, data) + + +def test_cli_alt_rougailcli(): + with chdir(test_dir / 'rougailcli_file'): + os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'alt_rougailcli.yml' + ret = main([], do_not_print=True) + filename = Path('console.txt') + if not filename.is_file(): + with filename.open('w') as fh: + fh.write(dumps(ret[1])) + with filename.open() as fh: + data = loads(fh.read()) + assert ret == (True, data)