Compare commits

..

3 commits

17 changed files with 147 additions and 30 deletions

View file

@ -1,3 +1,10 @@
## 0.2.0a27 (2025-10-31)
### Fix
- remove all warnings!
- update tests with new output_doc module
## 0.2.0a26 (2025-10-29)
### Fix

View file

@ -4,7 +4,7 @@ requires = ["flit_core >=3.8.0,<4"]
[project]
name = "rougail.cli"
version = "0.2.0a26"
version = "0.2.0a27"
authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}]
readme = "README.md"
description = "CLI for Rougail"

View file

@ -20,6 +20,7 @@ import os
from warnings import filterwarnings
from pathlib import Path
from sys import exit
from warnings import warn
from tiramisu_cmdline_parser import TiramisuCmdlineParser
from tiramisu.error import PropertiesOptionError
@ -59,8 +60,7 @@ def _main(arguments, do_not_print):
return list(versions)
for version in versions:
print(version)
else:
manage_warnings(rougailconfig["cli.warnings"])
exit()
config, err_warn = load_user_datas(rougailconfig)
output = get_output(rougailconfig, config, err_warn)
if do_not_print:
@ -89,9 +89,15 @@ def load_cmd_user_datas(rougailconfig, arguments):
env_prefix = ENV_PREFIX
else:
env_prefix = None
user_data = rougailconfig_load(rougailconfig, config_file, env_prefix, True, display_warnings=cmd_config.option("cli.warnings").value.get(), raise_on_error=False, _arguments=arguments, _generate=False)
# replays to display errors if needed
user_data = rougailconfig_load(rougailconfig, config_file, env_prefix, True, _arguments=arguments, _generate=False)
display_warnings = rougailconfig["cli.warnings"]
manage_warnings(display_warnings)
if not cmd_config.option("cli.versions").value.get():
if display_warnings and user_data["warnings"]:
for warning in user_data["warnings"]:
warn(warning)
if manage_warnings:
# replays to display errors if needed
parser = TiramisuCmdlineParser(
cmd_config,
short_name_max_len=2,
@ -101,8 +107,9 @@ def load_cmd_user_datas(rougailconfig, arguments):
raise Exception(user_data["errors"][0])
cmd_config.property.setdefault(origin_prop, "read_write", "append")
cmd_config.property.remove("not_for_commandline")
cmd_config.property.read_only()
cmd_config.property.remove("not_for_commandline")
return cmd_config

View file

@ -1 +1 @@
__version__ = "0.2.0a26"
__version__ = "0.2.0a27"

View file

@ -15,7 +15,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Mtools. If not, see <http://www.gnu.org/licenses/>.
"""
from warnings import warn
from rougail.user_datas import UserDatas
@ -23,8 +22,6 @@ def load(rougailconfig: "RougailConfig",
yaml_file: str=None,
env_prefix: str=None,
commandline: bool=False,
display_warnings: bool=True,
raise_on_error: bool=True,
_arguments=None,
_generate=True
):
@ -41,11 +38,6 @@ def load(rougailconfig: "RougailConfig",
if commandline:
user_datas.extend(from_cmdline(cmd_config, _arguments))
user_data = UserDatas(cmd_config).user_datas(user_datas)
if display_warnings and user_data["warnings"]:
for warning in user_data["warnings"]:
warn(warning)
if raise_on_error and user_data["errors"]:
raise Exception(user_data["errors"][0])
cmd_config.property.importation(origin_prop)
return user_data

View file

@ -0,0 +1,8 @@
---
version: 1.1
my_variable:
redefine: true
validators: # validators in jinja without description makes warnings
- jinja: |-
{{ _.my_variable != "my_value" }}

View file

@ -0,0 +1 @@
["family \"configuration rougail-json\" is disabled, \"test mandatories variables before display in json\" will be ignored when loading from the YAML file \"warnings.yml\""]

View file

@ -0,0 +1,7 @@
---
main_structural_directories:
- structures
doc:
output_format: console
json:
mandatory: true

View file

@ -0,0 +1 @@
[]

View file

@ -0,0 +1,9 @@
---
main_structural_directories:
- structures
doc:
output_format: console
json:
mandatory: true
cli:
warnings: false

View file

@ -0,0 +1 @@
["family \"configuration rougail-json\" is disabled, \"test mandatories variables before display in json\" will be ignored when loading from the YAML file \"warnings3.yml\"", "\"validators\" is a calculation for my_variable but has no description in \"structures/file.yml\" and \"structures_warnings/file.yml\""]

View file

@ -0,0 +1,8 @@
---
main_structural_directories:
- structures
- structures_warnings
doc:
output_format: console
json:
mandatory: true

View file

@ -0,0 +1 @@
[]

View file

@ -0,0 +1,10 @@
---
main_structural_directories:
- structures
- structures_warnings
doc:
output_format: console
json:
mandatory: true
cli:
warnings: false

View file

@ -1 +1 @@
"{\n \"my_variable\": {\n \"type\": \"variable\",\n \"default\": {\n \"name\": \"Default\",\n \"values\": \"my_value\"\n },\n \"properties\": [\n {\n \"type\": \"type\",\n \"name\": \"string\"\n },\n {\n \"type\": \"property\",\n \"name\": \"mandatory\"\n }\n ],\n \"path\": \"my_variable\",\n \"names\": [\n \"my_variable\"\n ],\n \"description\": \"A description.\"\n }\n}"
"{\n \"my_variable\": {\n \"type\": \"variable\",\n \"default\": {\n \"name\": \"Default\",\n \"values\": \"my_value\"\n },\n \"properties\": [\n {\n \"type\": \"type\",\n \"name\": \"string\"\n },\n {\n \"type\": \"property\",\n \"name\": \"mandatory\"\n }\n ],\n \"path\": \"my_variable\",\n \"names\": [\n \"my_variable\"\n ],\n \"description\": \"A description.\",\n \"gen_examples\": [\n \"my_value\"\n ],\n \"mandatory_without_value\": false\n }\n}"

View file

@ -1 +1 @@
"{\n \"my_variable\": {\n \"type\": \"variable\",\n \"default\": {\n \"name\": \"Default\",\n \"values\": \"my_value\"\n },\n \"properties\": [\n {\n \"type\": \"type\",\n \"name\": \"string\"\n },\n {\n \"type\": \"property\",\n \"name\": \"mandatory\"\n }\n ],\n \"path\": \"my_variable\",\n \"names\": [\n \"my_variable\"\n ],\n \"description\": \"A description.\"\n }\n}"
"{\n \"my_variable\": {\n \"type\": \"variable\",\n \"default\": {\n \"name\": \"Default\",\n \"values\": \"my_value\"\n },\n \"properties\": [\n {\n \"type\": \"type\",\n \"name\": \"string\"\n },\n {\n \"type\": \"property\",\n \"name\": \"mandatory\"\n }\n ],\n \"path\": \"my_variable\",\n \"names\": [\n \"my_variable\"\n ],\n \"description\": \"A description.\",\n \"gen_examples\": [\n \"my_value\"\n ],\n \"mandatory_without_value\": false\n }\n}"

View file

@ -1,4 +1,5 @@
import os
import warnings
from pathlib import Path
from contextlib import chdir
from json import dumps, loads
@ -80,7 +81,7 @@ def test_cli_version_user_data_disabled_2():
fh.write(dumps(ret[1]))
with filename.open() as fh:
data = loads(fh.read())
assert ret == (True, data)
assert ret == (True, data), filename
def test_cli_rougailcli():
@ -119,3 +120,67 @@ def test_cli_rougailcli_mix():
with filename.open() as fh:
data = loads(fh.read())
assert ret == (True, data)
def test_cli_rougailcli_warning():
with chdir(test_dir / 'rougailcli_file'):
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'warnings.yml'
with warnings.catch_warnings(record=True) as rougail_wn:
warnings.simplefilter("always", UserWarning)
main(["-o", "doc", "--doc.output_format", "asciidoc"], do_not_print=True)
ret = [str(w.message) for w in rougail_wn]
filename = Path('warnings.txt')
if not filename.is_file():
with filename.open('w') as fh:
fh.write(dumps([str(w.message) for w in rougail_wn]))
with filename.open() as fh:
data = loads(fh.read())
assert ret == data, str(filename.absolute())
def test_cli_rougailcli_not_warning():
with chdir(test_dir / 'rougailcli_file'):
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'warnings2.yml'
with warnings.catch_warnings(record=True) as rougail_wn:
warnings.simplefilter("always", UserWarning)
main(["-o", "doc", "--doc.output_format", "asciidoc"], do_not_print=True)
filename = Path('warnings2.txt')
ret = [str(w.message) for w in rougail_wn]
if not filename.is_file():
with filename.open('w') as fh:
fh.write(dumps(ret))
with filename.open() as fh:
data = loads(fh.read())
assert ret == data, str(filename.absolute())
def test_cli_rougailcli_warning2():
with chdir(test_dir / 'rougailcli_file'):
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'warnings3.yml'
with warnings.catch_warnings(record=True) as rougail_wn:
warnings.simplefilter("always", UserWarning)
main(["-o", "doc", "--doc.output_format", "asciidoc"], do_not_print=True)
ret = [str(w.message) for w in rougail_wn]
filename = Path('warnings3.txt')
if not filename.is_file():
with filename.open('w') as fh:
fh.write(dumps([str(w.message) for w in rougail_wn]))
with filename.open() as fh:
data = loads(fh.read())
assert ret == data, str(filename.absolute())
def test_cli_rougailcli_not_warning2():
with chdir(test_dir / 'rougailcli_file'):
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'warnings4.yml'
with warnings.catch_warnings(record=True) as rougail_wn:
warnings.simplefilter("always", UserWarning)
main(["-o", "doc", "--doc.output_format", "asciidoc"], do_not_print=True)
filename = Path('warnings4.txt')
ret = [str(w.message) for w in rougail_wn]
if not filename.is_file():
with filename.open('w') as fh:
fh.write(dumps(ret))
with filename.open() as fh:
data = loads(fh.read())
assert ret == data, str(filename.absolute())