feat: support leadership inside types

This commit is contained in:
egarette@silique.fr 2026-03-18 20:48:37 +01:00
parent e5f1b8a84e
commit 21f416b7b8
10 changed files with 265 additions and 2 deletions

View file

@ -68,8 +68,6 @@ def to_dict_family(family_name, paths, parents, families, root=True):
variable = paths[variable_path]
variable_name = variable.name
if variable_path in families:
if variable.type == "leadership":
raise DictConsistencyError(_("type is not compatible with leadership family"), 86, variable.xmlfiles)
if variable_name in ret:
ret["_" + variable_name] = ret.pop(variable_name)
ret[variable_name] = to_dict_family(variable.path, paths, parents, families, False)

View file

@ -139,3 +139,11 @@ def test_type_error_version():
def test_type_family_name_description():
type_variable("family_name_description")
def test_type_leadership():
type_variable("leadership")
def test_type_leadership_namespace():
type_variable("leadership", namespace=True)

View file

@ -0,0 +1,33 @@
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
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="a_leader", doc="My first variable", multi=True, default=["a value"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_4 = StrOption(name="a_first_follower", doc="My second variable", multi=True, default_multi="an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_5 = StrOption(name="a_second_follower", doc="My third variable", multi=True, default_multi="again an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
optiondescription_2 = Leadership(name="my_leadership", doc="my_leadership", children=[option_3, option_4, option_5], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml']})
optiondescription_1 = OptionDescription(name="my_leadership_1", doc="My family type", children=[optiondescription_2], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
option_8 = StrOption(name="a_leader", doc="My first variable", multi=True, default=["a value"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_9 = StrOption(name="a_first_follower", doc="My second variable", multi=True, default_multi="a modified value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml'], 'type': 'string'})
option_10 = StrOption(name="a_second_follower", doc="My third variable", multi=True, default_multi="again an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
optiondescription_7 = Leadership(name="my_leadership", doc="my_leadership", children=[option_8, option_9, option_10], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
optiondescription_6 = OptionDescription(name="my_leadership_2", doc="My family type", children=[optiondescription_7], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
option_13 = StrOption(name="a_leader", doc="My first variable", multi=True, default=["a value"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_14 = StrOption(name="a_first_follower", doc="My second variable", multi=True, default_multi="an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_15 = StrOption(name="a_second_follower", doc="My third variable", multi=True, default_multi="again an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_16 = StrOption(name="a_new_follower", doc="a description", multi=True, default_multi="a value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/structures/leadership/00_structure.yml'], 'type': 'string'})
optiondescription_12 = Leadership(name="my_leadership", doc="my_leadership", children=[option_13, option_14, option_15, option_16], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
optiondescription_11 = OptionDescription(name="my_leadership_3", doc="My family type", children=[optiondescription_12], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
option_19 = StrOption(name="a_leader", doc="a description", multi=True, default=["a value leader", "a second leader"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml'], 'type': 'string'})
option_20 = StrOption(name="a_first_follower", doc="My second variable", multi=True, default_multi="an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_21 = StrOption(name="a_second_follower", doc="My third variable", multi=True, default_multi="again an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
optiondescription_18 = Leadership(name="my_leadership", doc="my_leadership", children=[option_19, option_20, option_21], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
optiondescription_17 = OptionDescription(name="my_leadership_4", doc="My family type", children=[optiondescription_18], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1, optiondescription_6, optiondescription_11, optiondescription_17])

View file

@ -0,0 +1,36 @@
{
"my_leadership_1.my_leadership.a_leader": [
{
"my_leadership_1.my_leadership.a_leader": "a value",
"my_leadership_1.my_leadership.a_first_follower": "an other value",
"my_leadership_1.my_leadership.a_second_follower": "again an other value"
}
],
"my_leadership_2.my_leadership.a_leader": [
{
"my_leadership_2.my_leadership.a_leader": "a value",
"my_leadership_2.my_leadership.a_first_follower": "a modified value",
"my_leadership_2.my_leadership.a_second_follower": "again an other value"
}
],
"my_leadership_3.my_leadership.a_leader": [
{
"my_leadership_3.my_leadership.a_leader": "a value",
"my_leadership_3.my_leadership.a_first_follower": "an other value",
"my_leadership_3.my_leadership.a_second_follower": "again an other value",
"my_leadership_3.my_leadership.a_new_follower": "a value"
}
],
"my_leadership_4.my_leadership.a_leader": [
{
"my_leadership_4.my_leadership.a_leader": "a value leader",
"my_leadership_4.my_leadership.a_first_follower": "an other value",
"my_leadership_4.my_leadership.a_second_follower": "again an other value"
},
{
"my_leadership_4.my_leadership.a_leader": "a second leader",
"my_leadership_4.my_leadership.a_first_follower": "an other value",
"my_leadership_4.my_leadership.a_second_follower": "again an other value"
}
]
}

View file

@ -0,0 +1,36 @@
{
"my_leadership_1.my_leadership.a_leader": [
{
"my_leadership_1.my_leadership.a_leader": "a value",
"my_leadership_1.my_leadership.a_first_follower": "an other value",
"my_leadership_1.my_leadership.a_second_follower": "again an other value"
}
],
"my_leadership_2.my_leadership.a_leader": [
{
"my_leadership_2.my_leadership.a_leader": "a value",
"my_leadership_2.my_leadership.a_first_follower": "a modified value",
"my_leadership_2.my_leadership.a_second_follower": "again an other value"
}
],
"my_leadership_3.my_leadership.a_leader": [
{
"my_leadership_3.my_leadership.a_leader": "a value",
"my_leadership_3.my_leadership.a_first_follower": "an other value",
"my_leadership_3.my_leadership.a_second_follower": "again an other value",
"my_leadership_3.my_leadership.a_new_follower": "a value"
}
],
"my_leadership_4.my_leadership.a_leader": [
{
"my_leadership_4.my_leadership.a_leader": "a value leader",
"my_leadership_4.my_leadership.a_first_follower": "an other value",
"my_leadership_4.my_leadership.a_second_follower": "again an other value"
},
{
"my_leadership_4.my_leadership.a_leader": "a second leader",
"my_leadership_4.my_leadership.a_first_follower": "an other value",
"my_leadership_4.my_leadership.a_second_follower": "again an other value"
}
]
}

View file

@ -0,0 +1,34 @@
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
try:
groups.namespace
except:
groups.addgroup('namespace')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_4 = StrOption(name="a_leader", doc="My first variable", multi=True, default=["a value"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_5 = StrOption(name="a_first_follower", doc="My second variable", multi=True, default_multi="an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_6 = StrOption(name="a_second_follower", doc="My third variable", multi=True, default_multi="again an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
optiondescription_3 = Leadership(name="my_leadership", doc="my_leadership", children=[option_4, option_5, option_6], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml']})
optiondescription_2 = OptionDescription(name="my_leadership_1", doc="My family type", children=[optiondescription_3], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
option_9 = StrOption(name="a_leader", doc="My first variable", multi=True, default=["a value"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_10 = StrOption(name="a_first_follower", doc="My second variable", multi=True, default_multi="a modified value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml'], 'type': 'string'})
option_11 = StrOption(name="a_second_follower", doc="My third variable", multi=True, default_multi="again an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
optiondescription_8 = Leadership(name="my_leadership", doc="my_leadership", children=[option_9, option_10, option_11], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
optiondescription_7 = OptionDescription(name="my_leadership_2", doc="My family type", children=[optiondescription_8], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
option_14 = StrOption(name="a_leader", doc="My first variable", multi=True, default=["a value"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_15 = StrOption(name="a_first_follower", doc="My second variable", multi=True, default_multi="an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_16 = StrOption(name="a_second_follower", doc="My third variable", multi=True, default_multi="again an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_17 = StrOption(name="a_new_follower", doc="a description", multi=True, default_multi="a value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/structures/leadership/00_structure.yml'], 'type': 'string'})
optiondescription_13 = Leadership(name="my_leadership", doc="my_leadership", children=[option_14, option_15, option_16, option_17], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
optiondescription_12 = OptionDescription(name="my_leadership_3", doc="My family type", children=[optiondescription_13], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
option_20 = StrOption(name="a_leader", doc="a description", multi=True, default=["a value leader", "a second leader"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml'], 'type': 'string'})
option_21 = StrOption(name="a_first_follower", doc="My second variable", multi=True, default_multi="an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
option_22 = StrOption(name="a_second_follower", doc="My third variable", multi=True, default_multi="again an other value", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml'], 'type': 'string'})
optiondescription_19 = Leadership(name="my_leadership", doc="my_leadership", children=[option_20, option_21, option_22], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
optiondescription_18 = OptionDescription(name="my_leadership_4", doc="My family type", children=[optiondescription_19], properties=frozenset({"standard"}), informations={'ymlfiles': ['tests/types/types/leadership/00_type.yml', 'tests/types/structures/leadership/00_structure.yml']})
optiondescription_1 = OptionDescription(name="ns2", doc="NS2", group_type=groups.namespace, children=[optiondescription_2, optiondescription_7, optiondescription_12, optiondescription_18], properties=frozenset({"standard"}))
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])

View file

@ -0,0 +1,36 @@
{
"ns2.my_leadership_1.my_leadership.a_leader": [
{
"ns2.my_leadership_1.my_leadership.a_leader": "a value",
"ns2.my_leadership_1.my_leadership.a_first_follower": "an other value",
"ns2.my_leadership_1.my_leadership.a_second_follower": "again an other value"
}
],
"ns2.my_leadership_2.my_leadership.a_leader": [
{
"ns2.my_leadership_2.my_leadership.a_leader": "a value",
"ns2.my_leadership_2.my_leadership.a_first_follower": "a modified value",
"ns2.my_leadership_2.my_leadership.a_second_follower": "again an other value"
}
],
"ns2.my_leadership_3.my_leadership.a_leader": [
{
"ns2.my_leadership_3.my_leadership.a_leader": "a value",
"ns2.my_leadership_3.my_leadership.a_first_follower": "an other value",
"ns2.my_leadership_3.my_leadership.a_second_follower": "again an other value",
"ns2.my_leadership_3.my_leadership.a_new_follower": "a value"
}
],
"ns2.my_leadership_4.my_leadership.a_leader": [
{
"ns2.my_leadership_4.my_leadership.a_leader": "a value leader",
"ns2.my_leadership_4.my_leadership.a_first_follower": "an other value",
"ns2.my_leadership_4.my_leadership.a_second_follower": "again an other value"
},
{
"ns2.my_leadership_4.my_leadership.a_leader": "a second leader",
"ns2.my_leadership_4.my_leadership.a_first_follower": "an other value",
"ns2.my_leadership_4.my_leadership.a_second_follower": "again an other value"
}
]
}

View file

@ -0,0 +1,36 @@
{
"ns2.my_leadership_1.my_leadership.a_leader": [
{
"ns2.my_leadership_1.my_leadership.a_leader": "a value",
"ns2.my_leadership_1.my_leadership.a_first_follower": "an other value",
"ns2.my_leadership_1.my_leadership.a_second_follower": "again an other value"
}
],
"ns2.my_leadership_2.my_leadership.a_leader": [
{
"ns2.my_leadership_2.my_leadership.a_leader": "a value",
"ns2.my_leadership_2.my_leadership.a_first_follower": "a modified value",
"ns2.my_leadership_2.my_leadership.a_second_follower": "again an other value"
}
],
"ns2.my_leadership_3.my_leadership.a_leader": [
{
"ns2.my_leadership_3.my_leadership.a_leader": "a value",
"ns2.my_leadership_3.my_leadership.a_first_follower": "an other value",
"ns2.my_leadership_3.my_leadership.a_second_follower": "again an other value",
"ns2.my_leadership_3.my_leadership.a_new_follower": "a value"
}
],
"ns2.my_leadership_4.my_leadership.a_leader": [
{
"ns2.my_leadership_4.my_leadership.a_leader": "a value leader",
"ns2.my_leadership_4.my_leadership.a_first_follower": "an other value",
"ns2.my_leadership_4.my_leadership.a_second_follower": "again an other value"
},
{
"ns2.my_leadership_4.my_leadership.a_leader": "a second leader",
"ns2.my_leadership_4.my_leadership.a_first_follower": "an other value",
"ns2.my_leadership_4.my_leadership.a_second_follower": "again an other value"
}
]
}

View file

@ -0,0 +1,30 @@
%YAML 1.2
---
version: 1.1
my_leadership_1:
type: my_family_type_with_leadership
my_leadership_2:
type: my_family_type_with_leadership
my_leadership:
a_first_follower: a modified value
my_leadership_3:
type: my_family_type_with_leadership
my_leadership:
a_new_follower: a value # a description
my_leadership_4:
type: my_family_type_with_leadership
my_leadership:
a_leader: # a description
- a value leader
- a second leader
...

View file

@ -0,0 +1,16 @@
%YAML 1.2
---
version: 1.1
my_family_type_with_leadership: # My family type
my_leadership:
type: leadership
a_leader: # My first variable
- a value
a_first_follower: an other value # My second variable
a_second_follower: again an other value # My third variable
...