Compare commits

..

4 commits

353 changed files with 982 additions and 1152 deletions

View file

@ -1,3 +1,14 @@
## 0.2.0a19 (2025-11-21)
### Feat
- undocumented_modes is now a variable
### Fix
- black
- do not display empty console
## 0.2.0a18 (2025-11-07)
### Feat

View file

@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2025-10-04 14:49+0200\n"
"PO-Revision-Date: 2025-10-04 14:50+0200\n"
"POT-Creation-Date: 2025-11-08 22:16+0100\n"
"PO-Revision-Date: 2025-11-08 22:17+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
@ -16,69 +16,73 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 3.7\n"
#: src/rougail/output_console/__init__.py:81
#: src/rougail/output_console/__init__.py:90
msgid "Error in config: {0}"
msgstr "Erreur dans la config : {0}"
#: src/rougail/output_console/__init__.py:109
#: src/rougail/output_console/__init__.py:120
msgid "The following variables are mandatory but have no value:"
msgstr "Les variables suivantes sont obligatoire mais n'ont pas de valeur :"
#: src/rougail/output_console/__init__.py:114
#: src/rougail/output_console/__init__.py:126
msgid "The following variables are inaccessible but are empty and mandatory:"
msgstr ""
"Les variables suivantes sont inaccessibles mais sont vides et obligatoires :"
#: src/rougail/output_console/__init__.py:201
#: src/rougail/output_console/__init__.py:212
msgid "Variable"
msgstr "Variable"
#: src/rougail/output_console/__init__.py:203
#: src/rougail/output_console/__init__.py:214
msgid "Undocumented variable"
msgstr "Variable non documentée"
#: src/rougail/output_console/__init__.py:205
#: src/rougail/output_console/__init__.py:216
msgid "Undocumented but modified variable"
msgstr "Variable non documentée mais modifiée"
#: src/rougail/output_console/__init__.py:207
#: src/rougail/output_console/__init__.py:218
msgid "Unmodifiable variable"
msgstr "Variable non modifiable"
#: src/rougail/output_console/__init__.py:210
#: src/rougail/output_console/__init__.py:221
msgid "Default value"
msgstr "Valeur par défaut"
#: src/rougail/output_console/__init__.py:212
#: src/rougail/output_console/__init__.py:223
msgid "Modified value"
msgstr "Valeur modifiée"
#: src/rougail/output_console/__init__.py:214
#: src/rougail/output_console/__init__.py:225
msgid "Original default value"
msgstr "Valeur par défaut d'origine"
#: src/rougail/output_console/__init__.py:218
#: src/rougail/output_console/__init__.py:229
msgid "Caption"
msgstr "Légende"
#: src/rougail/output_console/__init__.py:225
#: src/rougail/output_console/__init__.py:248
msgid "Layers"
msgstr "Couches"
#: src/rougail/output_console/__init__.py:255
msgid "ERRORS"
msgstr "ERREURS"
#: src/rougail/output_console/__init__.py:254
#: src/rougail/output_console/__init__.py:283
msgid "WARNINGS"
msgstr "AVERTISSEMENTS"
#: src/rougail/output_console/__init__.py:265
#: src/rougail/output_console/__init__.py:294
msgid "Variables:"
msgstr "Variables :"
#: src/rougail/output_console/__init__.py:296
#: src/rougail/output_console/__init__.py:416
#: src/rougail/output_console/__init__.py:325
#: src/rougail/output_console/__init__.py:485
msgid "{0}:"
msgstr "{0} :"
#: src/rougail/output_console/__init__.py:422
#: src/rougail/output_console/__init__.py:491
msgid "{0}: {1}"
msgstr "{0} : {1}"
@ -92,8 +96,7 @@ msgstr "Voir les secrets plutôt que de les obscurcir"
#: src/rougail/output_console/config.py:40
msgid "test mandatories variables before display in console"
msgstr ""
"Test les variables obligatoires avant de les afficher dans la console"
msgstr "Test les variables obligatoires avant de les afficher dans la console"
#: src/rougail/output_console/config.py:50
msgid ""

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2025-10-04 14:50+0200\n"
"POT-Creation-Date: 2025-11-08 22:17+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -15,68 +15,72 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
#: src/rougail/output_console/__init__.py:81
#: src/rougail/output_console/__init__.py:90
msgid "Error in config: {0}"
msgstr ""
#: src/rougail/output_console/__init__.py:109
#: src/rougail/output_console/__init__.py:120
msgid "The following variables are mandatory but have no value:"
msgstr ""
#: src/rougail/output_console/__init__.py:114
#: src/rougail/output_console/__init__.py:126
msgid "The following variables are inaccessible but are empty and mandatory:"
msgstr ""
#: src/rougail/output_console/__init__.py:201
#: src/rougail/output_console/__init__.py:212
msgid "Variable"
msgstr ""
#: src/rougail/output_console/__init__.py:203
#: src/rougail/output_console/__init__.py:214
msgid "Undocumented variable"
msgstr ""
#: src/rougail/output_console/__init__.py:205
#: src/rougail/output_console/__init__.py:216
msgid "Undocumented but modified variable"
msgstr ""
#: src/rougail/output_console/__init__.py:207
#: src/rougail/output_console/__init__.py:218
msgid "Unmodifiable variable"
msgstr ""
#: src/rougail/output_console/__init__.py:210
#: src/rougail/output_console/__init__.py:221
msgid "Default value"
msgstr ""
#: src/rougail/output_console/__init__.py:212
#: src/rougail/output_console/__init__.py:223
msgid "Modified value"
msgstr ""
#: src/rougail/output_console/__init__.py:214
#: src/rougail/output_console/__init__.py:225
msgid "Original default value"
msgstr ""
#: src/rougail/output_console/__init__.py:218
#: src/rougail/output_console/__init__.py:229
msgid "Caption"
msgstr ""
#: src/rougail/output_console/__init__.py:225
#: src/rougail/output_console/__init__.py:248
msgid "Layers"
msgstr ""
#: src/rougail/output_console/__init__.py:255
msgid "ERRORS"
msgstr ""
#: src/rougail/output_console/__init__.py:254
#: src/rougail/output_console/__init__.py:283
msgid "WARNINGS"
msgstr ""
#: src/rougail/output_console/__init__.py:265
#: src/rougail/output_console/__init__.py:294
msgid "Variables:"
msgstr ""
#: src/rougail/output_console/__init__.py:296
#: src/rougail/output_console/__init__.py:416
#: src/rougail/output_console/__init__.py:325
#: src/rougail/output_console/__init__.py:485
msgid "{0}:"
msgstr ""
#: src/rougail/output_console/__init__.py:422
#: src/rougail/output_console/__init__.py:491
msgid "{0}: {1}"
msgstr ""

View file

@ -4,7 +4,7 @@ requires = ["flit_core >=3.8.0,<4"]
[project]
name = "rougail.output_console"
version = "0.2.0a18"
version = "0.2.0a19"
authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}]
readme = "README.md"
description = "Rougail output console"

View file

@ -35,26 +35,25 @@ from .__version__ import __version__
class RougailOutputConsole:
variable_hidden_color = "orange1"
variable_advanced_color = "bright_blue"
variable_advanced_and_modified_color = "red1"
variable_undocumented_color = "bright_blue"
variable_undocumented_and_modified_color = "red1"
value_unmodified_color = "gold1"
value_default_color = "green"
def __init__(
self,
config: "Config",
metaconfig = None,
metaconfig=None,
*,
rougailconfig: "RougailConfig" = None,
user_data_errors: Optional[list] = None,
user_data_warnings: Optional[list] = None,
config_owner_is_path: bool = False,
layer_datas = None,
**kwargs
layer_datas=None,
**kwargs,
) -> None:
if rougailconfig is None:
from rougail import RougailConfig
rougailconfig = RougailConfig
self.rougailconfig = rougailconfig
self.config = config
@ -64,10 +63,14 @@ class RougailOutputConsole:
self.is_mandatory = self.rougailconfig["console.mandatory"]
self.show_secrets = self.rougailconfig["console.show_secrets"]
self.key_is_description = self.rougailconfig["console.key_is_description"]
try:
self.undocumented_modes = set(self.rougailconfig["console.undocumented_modes"])
except Exception:
self.undocumented_modes = set()
self.variable_default_enable = False
self.variable_hidden_enable = False
self.variable_advanced_enable = False
self.variable_advanced_and_modified_enable = False
self.variable_undocumented_enable = False
self.variable_undocumented_and_modified_enable = False
self.value_modified_enable = False
self.value_unmodified_enable = False
self.value_default_enable = False
@ -102,14 +105,16 @@ class RougailOutputConsole:
else:
parent = self.config
current_options = options
for child_path in option.path().split('.'):
for child_path in option.path().split("."):
child = parent.option(child_path)
if self.key_is_description:
description = child.description(uncalculated=True)
else:
description = child.path(uncalculated=True)
if child.isdynamic() and "{{ identifier }}" in description:
description = description.replace('{{ identifier }}', child.identifiers()[-1])
description = description.replace(
"{{ identifier }}", child.identifiers()[-1]
)
if child.isoptiondescription():
current_options = current_options.setdefault(description, {})
@ -117,21 +122,28 @@ class RougailOutputConsole:
else:
current_options.setdefault(None, []).append(description)
if options:
self.errors.append({_("The following variables are mandatory but have no value:"): options})
self.errors.append(
{_("The following variables are mandatory but have no value:"): options}
)
elif options_with_error:
if self.key_is_description:
variables = [option.description() for option in options_with_error]
else:
variables = [option.path() for option in options_with_error]
self.errors.append({_(
"The following variables are inaccessible but are empty and mandatory:"
): variables})
self.errors.append(
{
_(
"The following variables are inaccessible but are empty and mandatory:"
): variables
}
)
def exporter(self) -> bool:
if self.is_mandatory:
ori_properties = self.config.property.exportation()
self.config.property.read_write()
self.mandatory()
if not self.user_data_errors and not self.errors:
self.mandatory()
self.config.property.importation(ori_properties)
warnings = self.user_data_warnings + self.warnings
if warnings:
@ -150,8 +162,9 @@ class RougailOutputConsole:
self.root,
)
self.config.information.set("path_in_description", old_path_in_description)
self.header()
self.end()
if self.output.tree.children:
self.header()
self.end()
return True
def run(self) -> str:
@ -209,10 +222,10 @@ class RougailOutputConsole:
caption_line = ""
if self.variable_default_enable:
caption_line += _("Variable") + "\n"
if self.variable_advanced_enable:
caption_line += f'[{self.variable_advanced_color}]{_("Undocumented variable")}[/{self.variable_advanced_color}]\n'
if self.variable_advanced_and_modified_enable:
caption_line += f'[{self.variable_advanced_and_modified_color}]{_("Undocumented but modified variable")}[/{self.variable_advanced_and_modified_color}]\n'
if self.variable_undocumented_enable:
caption_line += f'[{self.variable_undocumented_color}]{_("Undocumented variable")}[/{self.variable_undocumented_color}]\n'
if self.variable_undocumented_and_modified_enable:
caption_line += f'[{self.variable_undocumented_and_modified_color}]{_("Undocumented but modified variable")}[/{self.variable_undocumented_and_modified_color}]\n'
if self.variable_hidden_enable:
caption_line += f'[{self.variable_hidden_color}]{_("Unmodifiable variable")}[/{self.variable_hidden_color}]\n'
header_value = ""
@ -295,6 +308,7 @@ class RougailOutputConsole:
self,
yaml,
self.key_is_description,
self.undocumented_modes,
no_icon=True,
)
return self.output
@ -311,6 +325,7 @@ class OutputFamily:
root,
_yaml,
key_is_description,
undocumented_modes,
*,
is_leader: bool = False,
no_icon: bool = False,
@ -337,6 +352,7 @@ class OutputFamily:
self.root = root
self._yaml = _yaml
self.key_is_description = key_is_description
self.undocumented_modes = undocumented_modes
def add_family(
self,
@ -346,9 +362,9 @@ class OutputFamily:
if "hidden" in properties:
self.root.variable_hidden_enable = True
color = self.root.variable_hidden_color
elif "advanced" in properties:
self.root.variable_advanced_enable = True
color = self.root.variable_advanced_color
elif self.undocumented_modes & properties:
self.root.variable_undocumented_enable = True
color = self.root.variable_undocumented_color
else:
self.root.variable_default_enable = True
color = None
@ -358,15 +374,19 @@ class OutputFamily:
key_name = option.name()
return OutputFamily(
self.colorize(
[{"value": key_name,
"color": color,
"loaded_from": None,
}]
[
{
"value": key_name,
"color": color,
"loaded_from": None,
}
]
),
self.tree,
self.root,
self._yaml,
self.key_is_description,
self.undocumented_modes,
)
def add_variable(
@ -376,21 +396,23 @@ class OutputFamily:
properties = option.property.get()
color = None
variable_color = None
advanced = False
undocumented = self.undocumented_modes & properties
hidden = False
if "hidden" in properties:
self.root.variable_hidden_enable = True
variable_color = self.root.variable_hidden_color
elif "advanced" in properties:
# FIXME "advanced should be an properties example!
advanced = True
if undocumented:
self.root.variable_undocumented_enable = True
variable_color = self.root.variable_undocumented_color
else:
self.root.variable_hidden_enable = True
variable_color = self.root.variable_hidden_color
elif undocumented:
self.root.variable_undocumented_and_modified_enable = True
variable_color = self.root.variable_undocumented_and_modified_color
else:
self.root.variable_default_enable = True
values = []
collect_values = []
if not option.owner.isdefault():
if advanced:
self.root.variable_advanced_and_modified_enable = True
variable_color = self.root.variable_advanced_and_modified_color
self.root.value_modified_enable = True
follower_index = option.index()
if follower_index is not None:
@ -401,13 +423,18 @@ class OutputFamily:
loaded_from = option.information.get("loaded_from", None)
if value is undefined:
value = option.value.get()
values.append({"value": value,
"color": color,
"loaded_from": loaded_from,
})
values.append(
{
"value": value,
"color": color,
"loaded_from": loaded_from,
}
)
suboption = option
subconfig = self.root.config
if "force_store_value" not in option.property.get() and option.information.get("default_value_makes_sense", True):
if "force_store_value" not in option.property.get() and option.information.get(
"default_value_makes_sense", True
):
while True:
default_value = suboption.value.default()
if leader_index is not None:
@ -416,10 +443,16 @@ class OutputFamily:
else:
default_value = None
is_root_metaconfig = False
if subconfig is None or not subconfig.path() or "." not in subconfig.path():
if (
subconfig is None
or not subconfig.path()
or "." not in subconfig.path()
):
is_root_metaconfig = True
subconfig = self.get_subconfig_with_default_value(suboption)
if ((values and default_value is None) or default_value == []) and is_root_metaconfig:
if (
(values and default_value is None) or default_value == []
) and is_root_metaconfig:
break
if not values:
self.root.value_unmodified_enable = True
@ -427,9 +460,6 @@ class OutputFamily:
else:
self.root.value_default_enable = True
color = self.root.value_default_color
if advanced:
self.root.variable_advanced_enable = True
variable_color = self.root.variable_advanced_color
index = option.index()
parent_option = subconfig.option(option.path(), index)
if is_root_metaconfig:
@ -441,10 +471,13 @@ class OutputFamily:
else:
key = "loaded_from"
loaded_from = parent_option.information.get(key, None)
values.append({"value": default_value,
"color": color,
"loaded_from": loaded_from,
})
values.append(
{
"value": default_value,
"color": color,
"loaded_from": loaded_from,
}
)
if is_root_metaconfig:
break
elif not values:
@ -461,19 +494,25 @@ class OutputFamily:
else:
self.root.value_default_enable = True
color = self.root.value_default_color
values.append({"value": None,
"color": color,
"loaded_from": loaded_from,
})
values.append(
{
"value": None,
"color": color,
"loaded_from": loaded_from,
}
)
if self.key_is_description:
key_name = option.description()
else:
key_name = option.name()
key = self.colorize(
[{"value": key_name,
"color": variable_color,
"loaded_from": None,
}]
[
{
"value": key_name,
"color": variable_color,
"loaded_from": None,
}
]
)
value = self.colorize(
values,
@ -501,14 +540,14 @@ class OutputFamily:
break
else:
subconfig = self.root.metaconfig
for child in default_owner.split('.')[1:]:
for child in default_owner.split(".")[1:]:
subconfig = subconfig.config(child)
return subconfig
def colorize(
self,
values,
option = None,
option=None,
) -> str:
multi = False
ret = []
@ -560,7 +599,11 @@ class OutputFamily:
value: Any,
) -> str:
"""Dump variable, means transform bool, ... to yaml string"""
if value is not None and not self.root.show_secrets and option.type() == "password":
if (
value is not None
and not self.root.show_secrets
and option.type() == "password"
):
return "*" * 10
if isinstance(value, str):
return value

View file

@ -1 +1 @@
__version__ = "0.2.0a18"
__version__ = "0.2.0a19"

View file

@ -48,6 +48,23 @@ console:
{{% endif %}}
key_is_description: true # {_("In tree the key is the family or variable description inside of it's name")}
undocumented_modes:
description: {_('Variables with those modes are not documented')}
multi: true
mandatory: false
disabled:
jinja: |
{{% if not modes_level %}}
there is no mode
{{% endif %}}
description: {_('disabled when there is no mode available')}
validators:
- jinja: |
{{% if _.undocumented_modes not in modes_level %}}
this mode is not available
{{% endif %}}
description: {_('verify if disable modes already exists')}
"""
return {
"name": "console",

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -0,0 +1,13 @@
╭────────────── Caption ───────────────╮
│ Variable Modified value │
(⏳ Original default value)
╰──────────────────────────────────────╯
Variables:
┣━━ 📓 var1:
┃ ┣━━ string1 ◀ loaded from rougail-test (val1)
┃ ┣━━ string2 ◀ loaded from rougail-test (val2)
┃ ┗━━ string3 ◀ loaded from rougail-test (val3)
┗━━ 📓 var2:
 ┣━━ string1 ◀ loaded from rougail-test (val4)
 ┣━━ string2 ◀ loaded from rougail-test (val5)
 ┗━━ string3 ◀ loaded from rougail-test

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -0,0 +1,14 @@
╭────────────── Caption ───────────────╮
│ Variable Modified value │
(⏳ Original default value)
╰──────────────────────────────────────╯
Variables:
┗━━ 📂 rougail
 ┣━━ 📓 var1:
 ┃ ┣━━ string1 ◀ loaded from rougail-test (val1)
 ┃ ┣━━ string2 ◀ loaded from rougail-test (val2)
 ┃ ┗━━ string3 ◀ loaded from rougail-test (val3)
 ┗━━ 📓 var2:
  ┣━━ string1 ◀ loaded from rougail-test (val4)
  ┣━━ string2 ◀ loaded from rougail-test (val5)
  ┗━━ string3 ◀ loaded from rougail-test

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -0,0 +1,14 @@
╭────────────── Caption ───────────────╮
│ Variable Modified value │
(⏳ Original default value)
╰──────────────────────────────────────╯
Variables:
┗━━ 📂 Rougail
 ┣━━ 📓 the variable:
 ┃ ┣━━ string1 ◀ loaded from rougail-test (val1)
 ┃ ┣━━ string2 ◀ loaded from rougail-test (val2)
 ┃ ┗━━ string3 ◀ loaded from rougail-test (val3)
 ┗━━ 📓 the variable:
  ┣━━ string1 ◀ loaded from rougail-test (val4)
  ┣━━ string2 ◀ loaded from rougail-test (val5)
  ┗━━ string3 ◀ loaded from rougail-test

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -0,0 +1,12 @@
╭─────── Caption ────────╮
│ Variable Default value │
╰────────────────────────╯
Variables:
┗━━ 📂 rougail
 ┣━━ 📓 var1:
 ┃ ┣━━ val1
 ┃ ┣━━ val2
 ┃ ┗━━ val3
 ┗━━ 📓 var2:
  ┣━━ val4
  ┗━━ val5

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -0,0 +1,12 @@
╭─────── Caption ────────╮
│ Variable Default value │
╰────────────────────────╯
Variables:
┗━━ 📂 Rougail
 ┣━━ 📓 the variable:
 ┃ ┣━━ val1
 ┃ ┣━━ val2
 ┃ ┗━━ val3
 ┗━━ 📓 the variable:
  ┣━━ val4
  ┗━━ val5

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -0,0 +1,14 @@
╭────────────── Caption ───────────────╮
│ Variable Modified value │
(⏳ Original default value)
╰──────────────────────────────────────╯
Variables:
┗━━ 📂 rougail
 ┣━━ 📓 var1:
 ┃ ┣━━ string1 ◀ loaded from rougail-test (val1)
 ┃ ┣━━ string2 ◀ loaded from rougail-test (val2)
 ┃ ┗━━ string3 ◀ loaded from rougail-test (val3)
 ┗━━ 📓 var2:
  ┣━━ string1 ◀ loaded from rougail-test (val4)
  ┣━━ string2 ◀ loaded from rougail-test (val5)
  ┗━━ string3 ◀ loaded from rougail-test

View file

@ -1,4 +0,0 @@
╭─ Caption ─╮
│ │
╰───────────╯
Variables:

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.version

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ empty
 ┗━━ rougail
  ┗━━ rougail.empty

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a first variable
  ┗━━ a second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a first variable
  ┗━━ a second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,6 +1,6 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a first variable
  ┣━━ a second variable
  ┗━━ a new variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┣━━ rougail.var2
  ┗━━ rougail.var3

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a first variable
  ┗━━ a second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a variable
  ┗━━ a variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ the first variable
  ┗━━ the second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ the first variable
  ┗━━ the second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ the first variable
 ┗━━ rougail
  ┗━━ rougail.custom1

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a port variable
 ┗━━ rougail
  ┗━━ rougail.variable1

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ the first variable
 ┗━━ rougail
  ┗━━ rougail.secret1

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ the first variable
 ┗━━ rougail
  ┗━━ rougail.secret1

View file

@ -1,6 +1,6 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ the first variable
  ┣━━ the second variable
  ┗━━ the third variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┣━━ rougail.var2
  ┗━━ rougail.var3

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ the first variable
  ┗━━ the second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ the first variable
  ┗━━ the second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ the first <variable>
  ┗━━ the second <variable>
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,6 +1,6 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ the first variable
  ┣━━ the third variable
  ┗━━ the sixth variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┣━━ rougail.var3
  ┗━━ rougail.var6

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a first variable
 ┗━━ rougail
  ┗━━ rougail.variable1

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.var

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a first variable
  ┗━━ a second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ my_calculated_variable
 ┗━━ rougail
  ┗━━ rougail.my_calculated_variable

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a first variable
  ┗━━ a second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a first variable
  ┗━━ a second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a first custom variable
 ┗━━ rougail
  ┗━━ rougail.custom1

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ the first variable
 ┗━━ rougail
  ┗━━ rougail.var

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ the second variable
 ┗━━ rougail
  ┗━━ rougail.var1

View file

@ -1,6 +1,6 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ the first variable
  ┣━━ the second variable
  ┗━━ the third variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┣━━ rougail.var2
  ┗━━ rougail.var3

View file

@ -0,0 +1,12 @@
╭─────── Caption ────────╮
│ Variable Default value │
╰────────────────────────╯
Variables:
┗━━ 📂 rougail
 ┣━━ 📓 var1:
 ┃ ┣━━ val1
 ┃ ┣━━ val2
 ┃ ┗━━ val3
 ┗━━ 📓 var2:
  ┣━━ val4
  ┗━━ val5

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a second variable
 ┗━━ rougail
  ┗━━ rougail.variable2

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ the first variable
  ┗━━ the second variable
 ┗━━ rougail
  ┣━━ rougail.var1
  ┗━━ rougail.var2

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a second variable
 ┗━━ rougail
  ┗━━ rougail.var2

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a third variable
 ┗━━ rougail
  ┗━━ rougail.var3

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a first variable
  ┗━━ a second variable
 ┗━━ rougail
  ┣━━ rougail.variable1
  ┗━━ rougail.variable2

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a first variable
 ┗━━ rougail
  ┗━━ rougail.variable1

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a first variable
  ┗━━ a second variable
 ┗━━ rougail
  ┣━━ rougail.variable1
  ┗━━ rougail.variable2

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ An integer
 ┗━━ rougail
  ┗━━ rougail.int

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ Redefined
 ┗━━ rougail
  ┗━━ rougail.var

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ family
   ┗━━ var1
 ┗━━ rougail
  ┗━━ rougail.family
   ┗━━ rougail.family.var1

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ new description
   ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.family
   ┗━━ rougail.family.variable

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a family
   ┗━━ redefine help
 ┗━━ rougail
  ┗━━ rougail.family
   ┗━━ rougail.family.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.variable

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a third variable
 ┗━━ rougail
  ┗━━ rougail.var3

View file

@ -1,7 +1,7 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ new description
  ┃ ┗━━ a variable
  ┗━━ a second family
   ┗━━ a second variable
 ┗━━ rougail
  ┣━━ rougail.family1
  ┃ ┗━━ rougail.family1.variable1
  ┗━━ rougail.family2
   ┗━━ rougail.family2.variable2

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ Description
 ┗━━ rougail
  ┗━━ rougail.var

View file

@ -1,6 +1,6 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ A family
   ┣━━ The first variable
   ┗━━ The second variable
 ┗━━ rougail
  ┗━━ rougail.family
   ┣━━ rougail.family.var1
   ┗━━ rougail.family.var2

View file

@ -1,6 +1,6 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a family
   ┗━━ a sub family
    ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.family
   ┗━━ rougail.family.subfamily
    ┗━━ rougail.family.subfamily.variable

View file

@ -1,9 +1,9 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┣━━ a variable
  ┗━━ a family
   ┣━━ a first variable
   ┣━━ a second variable
   ┗━━ a sub family
    ┗━━ a variable
 ┗━━ rougail
  ┣━━ rougail.variable
  ┗━━ rougail.family
   ┣━━ rougail.family.variable1
   ┣━━ rougail.family.variable2
   ┗━━ rougail.family.subfamily
    ┗━━ rougail.family.subfamily.variable

View file

@ -1,6 +1,6 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ family
   ┣━━ a first variable
   ┗━━ a second variable
 ┗━━ rougail
  ┗━━ rougail.family
   ┣━━ rougail.family.var1
   ┗━━ rougail.family.var2

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ possibly hidden family
   ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.family
   ┗━━ rougail.family.var1

View file

@ -1,6 +1,6 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ possibly hidden family
   ┗━━ subfamily
    ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.family
   ┗━━ rougail.family.subfamily
    ┗━━ rougail.family.subfamily.var1

View file

@ -1,6 +1,6 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ possibly hidden family
   ┗━━ a subfamily
    ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.family
   ┗━━ rougail.family.sub_family
    ┗━━ rougail.family.sub_family.var1

View file

@ -1,4 +1,4 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a variable
 ┗━━ rougail
  ┗━━ rougail.var

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a family
   ┗━━ a first integer
 ┗━━ rougail
  ┗━━ rougail.general
   ┗━━ rougail.general.int

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a leadership
   ┗━━ a leader
 ┗━━ rougail
  ┗━━ rougail.leader
   ┗━━ rougail.leader.leader

View file

@ -1,5 +1,5 @@
🛑 ERRORS
┗━━ The following variables are mandatory but have no value:
 ┗━━ Rougail
  ┗━━ a leadership
   ┗━━ a leader
 ┗━━ rougail
  ┗━━ rougail.leadership
   ┗━━ rougail.leadership.leader

Some files were not shown because too many files have changed in this diff Show more