feat(#28): default value for a calculated variable with an unknown optional variable

This commit is contained in:
egarette@silique.fr 2025-09-28 15:44:11 +02:00
parent bbcffffb82
commit 5e0af148d5
91 changed files with 927 additions and 27 deletions

View file

@ -37,7 +37,7 @@ from ..utils import (
)
from ..i18n import _
from ..error import DictConsistencyError, VariableCalculationDependencyError
from ..tiramisu import CONVERT_OPTION, RENAME_TYPE, display_xmlfiles
from ..tiramisu import CONVERT_OPTION, RENAME_TYPE, display_xmlfiles, convert_boolean
BASETYPE = Union[StrictBool, StrictInt, StrictFloat, StrictStr, None]
@ -425,6 +425,7 @@ class _VariableCalculation(Calculation):
variable: StrictStr
propertyerror: bool = True
allow_none: bool = False
optional: bool = False
def get_variable(
self,
@ -629,19 +630,41 @@ class _VariableCalculation(Calculation):
)
raise DictConsistencyError(msg, 18, self.xmlfiles)
def get_default_value_optional(self, objectspace, default):
if self.attribute_name == "default":
if self.inside_list:
expected_multiple_value = False
elif self.path in objectspace.followers:
expected_multiple_value = objectspace.multis[self.path] == "submulti"
else:
expected_multiple_value = self.path in objectspace.multis
elif self.attribute_name in PROPERTY_ATTRIBUTE:
expected_multiple_value = False
else:
expected_multiple_value = True
value_is_multi = isinstance(default, list)
if expected_multiple_value != value_is_multi:
if self.attribute_name != "default" or expected_multiple_value:
msg = _('the variable "{0}" is waiting for a list as "{1}" but the attribute "default" is not a list ("{2}")')
else:
msg = _('the variable "{0}" is not waiting for a list as "{1}" but the attribute "default" is a list ("{2}")')
msg = msg.format(self.path, self.attribute_name, default)
raise DictConsistencyError(msg, 77, self.xmlfiles)
return default
class VariableCalculation(_VariableCalculation):
attribute_name: Literal["default", "choices", "dynamic"]
optional: bool = False
description: Optional[StrictStr] = None
default: Any = undefined
def to_function(
self,
objectspace,
) -> dict:
if self.attribute_name != "default" and self.optional:
if self.attribute_name != "default" and self.optional and self.default is undefined:
msg = _(
'"{0}" attribut shall not have an "optional" attribute for variable "{1}"'
'"{0}" attribut shall not have an "optional" attribute without the "default" attribute for variable "{1}"'
).format(self.attribute_name, self.variable)
raise DictConsistencyError(msg, 33, self.xmlfiles)
(
@ -654,6 +677,8 @@ class VariableCalculation(_VariableCalculation):
and self.optional
or (objectspace.force_optional and self.attribute_name == "default")
):
if self.default is not undefined:
return self.get_default_value_optional(objectspace, self.default)
raise VariableCalculationDependencyError()
if variable_in_calculation and self.attribute_name == "default":
local_variable = objectspace.paths[self.path]
@ -677,11 +702,11 @@ class VariableCalculation(_VariableCalculation):
class VariablePropertyCalculation(_VariableCalculation):
# For python 3.9 attribute_name: Literal[*PROPERTY_ATTRIBUTE]
attribute_name: Literal["frozen", "hidden", "disabled", "mandatory"]
attribute_name: Literal[*PROPERTY_ATTRIBUTE]
when: Any = undefined
when_not: Any = undefined
description: Optional[StrictStr] = None
default: bool = False
def to_function(
self,
@ -692,6 +717,21 @@ class VariablePropertyCalculation(_VariableCalculation):
variable_in_calculation,
variable_in_calculation_identifier,
) = self.get_variable(objectspace)
if (
# self.default is not undefined and
not variable_in_calculation
and self.optional
or (objectspace.force_optional)
):
if self.default is undefined:
default = False
else:
default = self.default
if not isinstance(default, bool):
msg = _('the variable "{0}" is waiting for a boolean as "{1}" but the attribute "default" is not a boolean ("{2}")')
msg = msg.format(self.path, self.attribute_name, default)
raise DictConsistencyError(msg, 79, self.xmlfiles)
return self.get_default_value_optional(objectspace, default)
params = self.get_params(
objectspace,
variable_in_calculation_path,
@ -823,8 +863,7 @@ class IdentifierCalculation(_IdentifierCalculation):
class IdentifierPropertyCalculation(_IdentifierCalculation):
# for python 3.9 attribute_name: Literal[*PROPERTY_ATTRIBUTE]
attribute_name: Literal["frozen", "hidden", "disabled", "mandatory"]
attribute_name: Literal[*PROPERTY_ATTRIBUTE]
when: Any = undefined
when_not: Any = undefined
description: Optional[StrictStr] = None
@ -896,10 +935,7 @@ class NamespaceCalculation(Calculation):
namespace = self.namespace
if namespace:
namespace = objectspace.paths[namespace].description
return {
"function": "calc_value",
"params": {None: [namespace]},
}
return namespace
CALCULATION_TYPES = {

View file

@ -221,14 +221,28 @@ class Common:
properties = []
calc_properties = []
for property_, value in values.items():
if value is True:
properties.append(self.convert_str(property_))
elif isinstance(value, list):
for val in value:
calc_properties.append(self.calculation_value(val))
else:
calc_properties.append(self.calculation_value(value))
return "frozenset({" + ", ".join(sorted(properties) + calc_properties) + "})"
if not isinstance(value, list):
value = [value]
for val in value:
ret = self.calculation_property(val)
if isinstance(ret, bool):
properties.append(self.convert_str(property_))
elif ret is not None:
calc_properties.append(ret)
if properties or calc_properties:
return "frozenset({" + ", ".join(sorted(properties) + calc_properties) + "})"
raise Exception('ca existe alors ...')
def calculation_property(
self,
value: Union[Calculation, bool],
) -> Optional[bool]:
if isinstance(value, Calculation):
try:
return self.calculation_value(value)
except VariableCalculationDependencyError:
return None
return value
def calc_properties(
self,
@ -358,6 +372,10 @@ class Common:
) -> str:
"""Generate calculated value"""
child = function.to_function(self.objectspace)
if isinstance(child, str):
return self.convert_str(child)
elif not isinstance(child, dict):
return child
new_args = []
kwargs = []
if "params" in child:
@ -387,10 +405,10 @@ class Common:
datas: Union[Calculation, str, list],
return_a_tuple: bool = False,
) -> str:
if isinstance(datas, str):
return self.convert_str(datas)
if isinstance(datas, Calculation):
return self.calculation_value(datas)
datas = self.calculation_value(datas)
elif isinstance(datas, str):
datas = self.convert_str(datas)
if not isinstance(datas, list):
return datas
params = []
@ -399,9 +417,11 @@ class Common:
try:
params.append(self.calculation_value(data))
except VariableCalculationDependencyError:
pass
continue
elif isinstance(data, str):
params.append(self.convert_str(data))
elif isinstance(data, dict):
params.append(data)
else:
params.append(str(data))
if return_a_tuple:

View file

@ -0,0 +1,10 @@
{
"rougail.var1": {
"owner": "default",
"value": []
},
"rougail.var2": {
"owner": "default",
"value": []
}
}

View file

@ -0,0 +1,4 @@
{
"rougail.var1": [],
"rougail.var2": []
}

View file

@ -0,0 +1,10 @@
{
"rougail.var1": {
"owner": "default",
"value": []
},
"rougail.var2": {
"owner": "default",
"value": []
}
}

View file

@ -0,0 +1 @@
["rougail.var1", "rougail.var2"]

View file

@ -0,0 +1,4 @@
{
"rougail.var1": [],
"rougail.var2": []
}

View file

@ -0,0 +1,14 @@
{
"rougail.var1": {
"owner": "default",
"value": null
},
"rougail.var2": {
"owner": "default",
"value": null
},
"rougail.var3": {
"owner": "default",
"value": null
}
}

View file

@ -0,0 +1,5 @@
{
"rougail.var1": null,
"rougail.var2": null,
"rougail.var3": null
}

View file

@ -0,0 +1,14 @@
{
"rougail.var1": {
"owner": "default",
"value": null
},
"rougail.var2": {
"owner": "default",
"value": null
},
"rougail.var3": {
"owner": "default",
"value": null
}
}

View file

@ -0,0 +1 @@
["rougail.var1", "rougail.var2", "rougail.var3"]

View file

@ -0,0 +1,5 @@
{
"rougail.var1": null,
"rougail.var2": null,
"rougail.var3": null
}

View file

@ -0,0 +1,26 @@
{
"rougail.var1": {
"owner": "default",
"value": 0
},
"rougail.var2": {
"owner": "default",
"value": 0
},
"rougail.var3": {
"owner": "default",
"value": 0
},
"rougail.var4": {
"owner": "default",
"value": 10
},
"rougail.var5": {
"owner": "default",
"value": 10
},
"rougail.var6": {
"owner": "default",
"value": 10
}
}

View file

@ -0,0 +1,8 @@
{
"rougail.var1": 0,
"rougail.var2": 0,
"rougail.var3": 0,
"rougail.var4": 10,
"rougail.var5": 10,
"rougail.var6": 10
}

View file

@ -0,0 +1,26 @@
{
"rougail.var1": {
"owner": "default",
"value": 0
},
"rougail.var2": {
"owner": "default",
"value": 0
},
"rougail.var3": {
"owner": "default",
"value": 0
},
"rougail.var4": {
"owner": "default",
"value": 10
},
"rougail.var5": {
"owner": "default",
"value": 10
},
"rougail.var6": {
"owner": "default",
"value": 10
}
}

View file

@ -0,0 +1 @@
[]

View file

@ -0,0 +1,8 @@
{
"rougail.var1": 0,
"rougail.var2": 0,
"rougail.var3": 0,
"rougail.var4": 10,
"rougail.var5": 10,
"rougail.var6": 10
}

View file

@ -0,0 +1,14 @@
{
"rougail.var1": {
"owner": "default",
"value": "1.1.1.1"
},
"rougail.var2": {
"owner": "default",
"value": "1.1.1.1/24"
},
"rougail.var3": {
"owner": "default",
"value": "1.1.1.1/24"
}
}

View file

@ -0,0 +1,5 @@
{
"rougail.var1": "1.1.1.1",
"rougail.var2": "1.1.1.1/24",
"rougail.var3": "1.1.1.1/24"
}

View file

@ -0,0 +1,14 @@
{
"rougail.var1": {
"owner": "default",
"value": "1.1.1.1"
},
"rougail.var2": {
"owner": "default",
"value": "1.1.1.1/24"
},
"rougail.var3": {
"owner": "default",
"value": "1.1.1.1/24"
}
}

View file

@ -0,0 +1 @@
[]

View file

@ -0,0 +1,5 @@
{
"rougail.var1": "1.1.1.1",
"rougail.var2": "1.1.1.1/24",
"rougail.var3": "1.1.1.1/24"
}

View file

@ -0,0 +1,14 @@
{
"rougail.var1": {
"owner": "default",
"value": "1.1.1.0"
},
"rougail.var2": {
"owner": "default",
"value": "1.1.1.0/24"
},
"rougail.var3": {
"owner": "default",
"value": "1.1.1.0/24"
}
}

View file

@ -0,0 +1,5 @@
{
"rougail.var1": "1.1.1.0",
"rougail.var2": "1.1.1.0/24",
"rougail.var3": "1.1.1.0/24"
}

View file

@ -0,0 +1,14 @@
{
"rougail.var1": {
"owner": "default",
"value": "1.1.1.0"
},
"rougail.var2": {
"owner": "default",
"value": "1.1.1.0/24"
},
"rougail.var3": {
"owner": "default",
"value": "1.1.1.0/24"
}
}

View file

@ -0,0 +1 @@
[]

View file

@ -0,0 +1,5 @@
{
"rougail.var1": "1.1.1.0",
"rougail.var2": "1.1.1.0/24",
"rougail.var3": "1.1.1.0/24"
}

View file

@ -10,6 +10,6 @@ except:
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_2 = StrOption(name="variable", doc="a variable", default=Calculation(func['calc_value'], Params((ParamValue("Rougail")))), properties=frozenset({"standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_8calculation_namespace/rougail/00-base.yml'], 'type': 'string'})
option_2 = StrOption(name="variable", doc="a variable", default="Rougail", properties=frozenset({"standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_8calculation_namespace/rougail/00-base.yml'], 'type': 'string'})
optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[option_2], properties=frozenset({"standard"}), informations={'ymlfiles': ['']})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])

View file

@ -0,0 +1,13 @@
{
"rougail.my_variable": {
"owner": "default",
"value": "val1"
},
"rougail.my_calculated_variable": {
"owner": "default",
"value": [
"val1",
"value"
]
}
}

View file

@ -0,0 +1,7 @@
{
"rougail.my_variable": "val1",
"rougail.my_calculated_variable": [
"val1",
"value"
]
}

View file

@ -0,0 +1,13 @@
{
"rougail.my_variable": {
"owner": "default",
"value": "val1"
},
"rougail.my_calculated_variable": {
"owner": "default",
"value": [
"val1",
"value"
]
}
}

View file

@ -0,0 +1,7 @@
{
"rougail.my_variable": "val1",
"rougail.my_calculated_variable": [
"val1",
"value"
]
}

View file

@ -0,0 +1,16 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
try:
groups.namespace
except:
groups.addgroup('namespace')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_2 = StrOption(name="my_variable", doc="my_variable", default="val1", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_9default_calculation_multi_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_3 = StrOption(name="my_calculated_variable", doc="my_calculated_variable", multi=True, default=[Calculation(func['calc_value'], Params((ParamOption(option_2)))), "value"], default_multi=Calculation(func['calc_value'], Params((ParamOption(option_2)))), properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_9default_calculation_multi_optional_default/rougail/00-base.yml'], 'type': 'string'})
optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[option_2, option_3], properties=frozenset({"standard"}), informations={'ymlfiles': ['']})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])

View file

@ -0,0 +1,11 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_1 = StrOption(name="my_variable", doc="my_variable", default="val1", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_9default_calculation_multi_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_2 = StrOption(name="my_calculated_variable", doc="my_calculated_variable", multi=True, default=[Calculation(func['calc_value'], Params((ParamOption(option_1)))), "value"], default_multi=Calculation(func['calc_value'], Params((ParamOption(option_1)))), properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_9default_calculation_multi_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_2])

View file

@ -0,0 +1,6 @@
{
"rougail.var": {
"owner": "default",
"value": 9
}
}

View file

@ -0,0 +1,3 @@
{
"rougail.var": 9
}

View file

@ -0,0 +1,6 @@
{
"rougail.var": {
"owner": "default",
"value": 9
}
}

View file

@ -0,0 +1 @@
[]

View file

@ -0,0 +1,3 @@
{
"rougail.var": 9
}

View file

@ -0,0 +1,50 @@
{
"rougail.var1": {
"owner": "default",
"value": [
0
]
},
"rougail.var2": {
"owner": "default",
"value": [
0
]
},
"rougail.var3": {
"owner": "default",
"value": [
0
]
},
"rougail.var4": {
"owner": "default",
"value": [
10
]
},
"rougail.var5": {
"owner": "default",
"value": [
10
]
},
"rougail.var6": {
"owner": "default",
"value": [
10
]
},
"rougail.var7": {
"owner": "default",
"value": [
0
]
},
"rougail.var8": {
"owner": "default",
"value": [
0
]
}
}

View file

@ -0,0 +1,26 @@
{
"rougail.var1": [
0
],
"rougail.var2": [
0
],
"rougail.var3": [
0
],
"rougail.var4": [
10
],
"rougail.var5": [
10
],
"rougail.var6": [
10
],
"rougail.var7": [
0
],
"rougail.var8": [
0
]
}

View file

@ -0,0 +1,50 @@
{
"rougail.var1": {
"owner": "default",
"value": [
0
]
},
"rougail.var2": {
"owner": "default",
"value": [
0
]
},
"rougail.var3": {
"owner": "default",
"value": [
0
]
},
"rougail.var4": {
"owner": "default",
"value": [
10
]
},
"rougail.var5": {
"owner": "default",
"value": [
10
]
},
"rougail.var6": {
"owner": "default",
"value": [
10
]
},
"rougail.var7": {
"owner": "default",
"value": [
0
]
},
"rougail.var8": {
"owner": "default",
"value": [
0
]
}
}

View file

@ -0,0 +1 @@
[]

View file

@ -0,0 +1,26 @@
{
"rougail.var1": [
0
],
"rougail.var2": [
0
],
"rougail.var3": [
0
],
"rougail.var4": [
10
],
"rougail.var5": [
10
],
"rougail.var6": [
10
],
"rougail.var7": [
0
],
"rougail.var8": [
0
]
}

View file

@ -0,0 +1,6 @@
{
"rougail.variable": {
"owner": "default",
"value": "c"
}
}

View file

@ -0,0 +1,3 @@
{
"rougail.variable": "c"
}

View file

@ -0,0 +1,6 @@
{
"rougail.variable": {
"owner": "default",
"value": "c"
}
}

View file

@ -0,0 +1,3 @@
{
"rougail.variable": "c"
}

View file

@ -0,0 +1,15 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
try:
groups.namespace
except:
groups.addgroup('namespace')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_2 = ChoiceOption(name="variable", doc="a variable", values=("a", "b", "c"), default="c", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/01_9choice_variable_optional/rougail/00-base.yml'], 'type': 'choice'})
optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[option_2], properties=frozenset({"standard"}), informations={'ymlfiles': ['']})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])

View file

@ -0,0 +1,10 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_1 = ChoiceOption(name="variable", doc="a variable", values=("a", "b", "c"), default="c", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/01_9choice_variable_optional/rougail/00-base.yml'], 'type': 'choice'})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1])

View file

@ -0,0 +1,6 @@
{
"rougail.int": {
"owner": "default",
"value": 10
}
}

View file

@ -0,0 +1,3 @@
{
"rougail.int": 10
}

View file

@ -0,0 +1,6 @@
{
"rougail.int": {
"owner": "default",
"value": 10
}
}

View file

@ -0,0 +1,3 @@
{
"rougail.int": 10
}

View file

@ -0,0 +1,22 @@
{
"rougail.condition": {
"owner": "default",
"value": false
},
"rougail.var1": {
"owner": "default",
"value": null
},
"rougail.var2": {
"owner": "default",
"value": null
},
"rougail.var3": {
"owner": "default",
"value": null
},
"rougail.var4": {
"owner": "default",
"value": null
}
}

View file

@ -0,0 +1,7 @@
{
"rougail.condition": false,
"rougail.var1": null,
"rougail.var2": null,
"rougail.var3": null,
"rougail.var4": null
}

View file

@ -0,0 +1,22 @@
{
"rougail.condition": {
"owner": "default",
"value": false
},
"rougail.var1": {
"owner": "default",
"value": null
},
"rougail.var2": {
"owner": "default",
"value": null
},
"rougail.var3": {
"owner": "default",
"value": null
},
"rougail.var4": {
"owner": "default",
"value": null
}
}

View file

@ -0,0 +1,5 @@
{
"rougail.condition": false,
"rougail.var3": null,
"rougail.var4": null
}

View file

@ -0,0 +1,19 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
try:
groups.namespace
except:
groups.addgroup('namespace')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_2 = BoolOption(name="condition", doc="a condition", default=False, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'boolean'})
option_3 = StrOption(name="var1", doc="a first variable", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_4 = StrOption(name="var2", doc="a first variable", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_5 = StrOption(name="var3", doc="a second variable", properties=frozenset({"force_default_on_freeze", "standard", Calculation(func['variable_to_property'], Params((ParamValue("hidden"), ParamOption(option_2)), kwargs={'when': ParamValue(True), 'inverse': ParamValue(False)}), help_function=func['variable_to_property']), Calculation(func['variable_to_property'], Params((ParamValue("frozen"), ParamOption(option_2)), kwargs={'when': ParamValue(True), 'inverse': ParamValue(False)}), help_function=func['variable_to_property'])}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_6 = StrOption(name="var4", doc="a forth variable", properties=frozenset({"force_default_on_freeze", "standard", Calculation(func['variable_to_property'], Params((ParamValue("hidden"), ParamOption(option_2)), kwargs={'when': ParamValue(True), 'inverse': ParamValue(False)}), help_function=func['variable_to_property']), Calculation(func['variable_to_property'], Params((ParamValue("frozen"), ParamOption(option_2)), kwargs={'when': ParamValue(True), 'inverse': ParamValue(False)}), help_function=func['variable_to_property'])}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'string'})
optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[option_2, option_3, option_4, option_5, option_6], properties=frozenset({"standard"}), informations={'ymlfiles': ['']})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])

View file

@ -0,0 +1,14 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_1 = BoolOption(name="condition", doc="a condition", default=False, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'boolean'})
option_2 = StrOption(name="var1", doc="a first variable", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_3 = StrOption(name="var2", doc="a first variable", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_4 = StrOption(name="var3", doc="a second variable", properties=frozenset({"force_default_on_freeze", "standard", Calculation(func['variable_to_property'], Params((ParamValue("hidden"), ParamOption(option_1)), kwargs={'when': ParamValue(True), 'inverse': ParamValue(False)}), help_function=func['variable_to_property']), Calculation(func['variable_to_property'], Params((ParamValue("frozen"), ParamOption(option_1)), kwargs={'when': ParamValue(True), 'inverse': ParamValue(False)}), help_function=func['variable_to_property'])}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_5 = StrOption(name="var4", doc="a forth variable", properties=frozenset({"force_default_on_freeze", "standard", Calculation(func['variable_to_property'], Params((ParamValue("hidden"), ParamOption(option_1)), kwargs={'when': ParamValue(True), 'inverse': ParamValue(False)}), help_function=func['variable_to_property']), Calculation(func['variable_to_property'], Params((ParamValue("frozen"), ParamOption(option_1)), kwargs={'when': ParamValue(True), 'inverse': ParamValue(False)}), help_function=func['variable_to_property'])}), informations={'ymlfiles': ['../rougail-tests/structures/04_5disabled_calculation_optional_default/rougail/00-base.yml'], 'type': 'string'})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_2, option_3, option_4, option_5])

View file

@ -0,0 +1,22 @@
{
"rougail.leader.leader": {
"owner": "default",
"value": [
"a",
"b",
"c"
]
},
"rougail.leader.follower1": {
"owner": [
"default",
"default",
"default"
],
"value": [
0,
1,
2
]
}
}

View file

@ -0,0 +1,16 @@
{
"rougail.leader.leader": [
{
"rougail.leader.leader": "a",
"rougail.leader.follower1": 0
},
{
"rougail.leader.leader": "b",
"rougail.leader.follower1": 1
},
{
"rougail.leader.leader": "c",
"rougail.leader.follower1": 2
}
]
}

View file

@ -0,0 +1,22 @@
{
"rougail.leader.leader": {
"owner": "default",
"value": [
"a",
"b",
"c"
]
},
"rougail.leader.follower1": {
"owner": [
"default",
"default",
"default"
],
"value": [
0,
1,
2
]
}
}

View file

@ -0,0 +1,16 @@
{
"rougail.leader.leader": [
{
"rougail.leader.leader": "a",
"rougail.leader.follower1": 0
},
{
"rougail.leader.leader": "b",
"rougail.leader.follower1": 1
},
{
"rougail.leader.leader": "c",
"rougail.leader.follower1": 2
}
]
}

View file

@ -0,0 +1,19 @@
{
"rougail.leadership.leader": {
"owner": "default",
"value": [
"a",
"b"
]
},
"rougail.leadership.follower": {
"owner": [
"error",
"default"
],
"value": [
"cannot access to option \"a follower\" at index \"0\" because has property \"disabled\" (the first follower)",
"value"
]
}
}

View file

@ -0,0 +1,11 @@
{
"rougail.leadership.leader": [
{
"rougail.leadership.leader": "a"
},
{
"rougail.leadership.leader": "b",
"rougail.leadership.follower": "value"
}
]
}

View file

@ -0,0 +1,19 @@
{
"rougail.leadership.leader": {
"owner": "default",
"value": [
"a",
"b"
]
},
"rougail.leadership.follower": {
"owner": [
"error",
"default"
],
"value": [
"cannot access to option \"a follower\" at index \"0\" because has property \"disabled\" (the first follower)",
"value"
]
}
}

View file

@ -0,0 +1,11 @@
{
"rougail.leadership.leader": [
{
"rougail.leadership.leader": "a"
},
{
"rougail.leadership.leader": "b",
"rougail.leadership.follower": "value"
}
]
}

View file

@ -0,0 +1,10 @@
{
"rougail.dyna.var": {
"owner": "default",
"value": "val"
},
"rougail.dynb.var": {
"owner": "default",
"value": "val"
}
}

View file

@ -0,0 +1,4 @@
{
"rougail.dyna.var": "val",
"rougail.dynb.var": "val"
}

View file

@ -0,0 +1,10 @@
{
"rougail.dyna.var": {
"owner": "default",
"value": "val"
},
"rougail.dynb.var": {
"owner": "default",
"value": "val"
}
}

View file

@ -0,0 +1,4 @@
{
"rougail.dyna.var": "val",
"rougail.dynb.var": "val"
}

View file

@ -0,0 +1,16 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
try:
groups.namespace
except:
groups.addgroup('namespace')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_3 = StrOption(name="var", doc="a variable inside dynamic family", default="val", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/60_0family_dynamic_variable_optional/rougail/00-base.yml'], 'type': 'string'})
optiondescription_2 = ConvertDynOptionDescription(name="dyn{{ identifier }}", doc="a dynamic family", identifiers=["a", "b"], children=[option_3], properties=frozenset({"standard"}), informations={'dynamic_variable': 'rougail.unknown_var', 'ymlfiles': ['../rougail-tests/structures/60_0family_dynamic_variable_optional/rougail/00-base.yml']})
optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[optiondescription_2], properties=frozenset({"standard"}), informations={'ymlfiles': ['']})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])

View file

@ -0,0 +1,11 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_2 = StrOption(name="var", doc="a variable inside dynamic family", default="val", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/60_0family_dynamic_variable_optional/rougail/00-base.yml'], 'type': 'string'})
optiondescription_1 = ConvertDynOptionDescription(name="dyn{{ identifier }}", doc="a dynamic family", identifiers=["a", "b"], children=[option_2], properties=frozenset({"standard"}), informations={'dynamic_variable': 'unknown_var', 'ymlfiles': ['../rougail-tests/structures/60_0family_dynamic_variable_optional/rougail/00-base.yml']})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])

View file

@ -0,0 +1,10 @@
---
version: 1.1
my_variable:
default: val1
my_calculated_variable:
multi: true
default:
variable: _.my_variable_unexists
optional: true
default: value

View file

@ -0,0 +1,10 @@
---
version: 1.1
my_variable:
default: val1
my_calculated_variable:
default:
variable: _.my_variable_unexists
optional: true
default:
- value

View file

@ -0,0 +1,9 @@
---
version: 1.1
variable:
description: a variable
choices:
variable: _.unknown_variable
optional: true
default: c

View file

@ -0,0 +1,13 @@
%YAML 1.2
---
version: 1.1
"dyn{{ identifier }}":
description: a dynamic family
dynamic:
variable: _.unknown_var
optional: true
default: a
var: val # a variable inside dynamic family
...

View file

@ -47,7 +47,7 @@ excludes = set([
])
test_ok -= excludes
test_raise -= excludes
# test_ok = ['04_5validators_multi3']
# test_ok = ['01_9choice_variable_optional']
#test_ok = []
# test_raise = ['80unknown_default_variable_inside_dynamic_family']
#test_raise = []

View file

@ -31,7 +31,7 @@ excludes = set([])
# excludes = set(['60_5family_dynamic_variable_outside_sub_suffix'])
test_ok -= excludes
test_ok = ['44_9calculated_default_leadership_leader']
# test_ok = ['04_5disabled_calculation_optional_default']
test_ok = list(test_ok)