From 6167e1ea2c6d0e6acdd1cfdf9fc6758afd24ea1e Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Fri, 2 May 2025 08:12:06 +0200 Subject: [PATCH] fix: support {{ suffix }} name in 1.1 format version --- src/rougail/convert.py | 4 +++- tests/dictionaries/04_5validators_multi3/tiramisu/base.py | 2 +- .../04_5validators_multi3/tiramisu/no_namespace.py | 2 +- .../makedict/after.json | 8 ++++---- .../makedict/base.json | 8 ++++---- .../makedict/before.json | 8 ++++---- .../makedict/mandatory.json | 2 +- .../makedict/read_write.json | 8 ++++---- .../60_6family_dynamic_sub_dynamic_1_0_2/tiramisu/base.py | 4 ++-- 9 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/rougail/convert.py b/src/rougail/convert.py index bd3326662..9893c7737 100644 --- a/src/rougail/convert.py +++ b/src/rougail/convert.py @@ -464,7 +464,7 @@ class ParserVariable: if obj_type == "dynamic": family_is_dynamic = True if "{{ identifier }}" not in name: - if version == "1.0" and "{{ suffix }}" in name: + if "{{ suffix }}" in name: name = name.replace("{{ suffix }}", "{{ identifier }}") path = path.replace("{{ suffix }}", "{{ identifier }}") elif "variable" in family_obj: @@ -841,6 +841,8 @@ class ParserVariable: parent_dynamic: Optional[str], version: str, ) -> None: + if "{ suffix" in variable["path"]: + raise Exception() """Add a new variable""" if not isinstance(filename, list): filename = [filename] diff --git a/tests/dictionaries/04_5validators_multi3/tiramisu/base.py b/tests/dictionaries/04_5validators_multi3/tiramisu/base.py index 75af1f6ec..c606efd84 100644 --- a/tests/dictionaries/04_5validators_multi3/tiramisu/base.py +++ b/tests/dictionaries/04_5validators_multi3/tiramisu/base.py @@ -11,6 +11,6 @@ ALLOWED_LEADER_PROPERTIES.add("basic") ALLOWED_LEADER_PROPERTIES.add("standard") ALLOWED_LEADER_PROPERTIES.add("advanced") dict_env['validators_rougail.var1'] = "{% if _.var1 != index %}\n value != than index\n{% endif %}" -option_2 = IntOption(name="var1", doc="a second variable", multi=True, default=[0, 1, 2], default_multi=0, validators=[Calculation(func['valid_with_jinja'], Params((), kwargs={'__internal_jinja': ParamValue("validators_rougail.var1"), '__internal_type': ParamValue("string"), '__internal_multi': ParamValue(False), '__internal_files': ParamValue(['../rougail-tests/structures/04_5validators_multi3/rougail/00-base.yml']), '__internal_attribute': ParamValue("validators"), '__internal_variable': ParamValue("rougail.var1"), 'index': ParamIndex(), '_.var1': ParamSelfOption(whole=False)}))], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5validators_multi3/rougail/00-base.yml'], 'type': 'number'}) +option_2 = IntOption(name="var1", doc="a second variable", multi=True, default=[0, 1, 2], default_multi=0, validators=[Calculation(func['valid_with_jinja'], Params((), kwargs={'__internal_jinja': ParamValue("validators_rougail.var1"), '__internal_type': ParamValue("string"), '__internal_multi': ParamValue(False), '__internal_files': ParamValue(['../rougail-tests/structures/04_5validators_multi3/rougail/00-base.yml']), '__internal_attribute': ParamValue("validators"), '__internal_variable': ParamValue("rougail.var1"), 'index': ParamIndex(), '_.var1': ParamSelfOption(whole=False)}))], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5validators_multi3/rougail/00-base.yml'], 'type': 'number', 'test': (0,)}) 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]) diff --git a/tests/dictionaries/04_5validators_multi3/tiramisu/no_namespace.py b/tests/dictionaries/04_5validators_multi3/tiramisu/no_namespace.py index 325b2eda8..6b6835367 100644 --- a/tests/dictionaries/04_5validators_multi3/tiramisu/no_namespace.py +++ b/tests/dictionaries/04_5validators_multi3/tiramisu/no_namespace.py @@ -7,5 +7,5 @@ ALLOWED_LEADER_PROPERTIES.add("basic") ALLOWED_LEADER_PROPERTIES.add("standard") ALLOWED_LEADER_PROPERTIES.add("advanced") dict_env['validators_var1'] = "{% if _.var1 != index %}\n value != than index\n{% endif %}" -option_1 = IntOption(name="var1", doc="a second variable", multi=True, default=[0, 1, 2], default_multi=0, validators=[Calculation(func['valid_with_jinja'], Params((), kwargs={'__internal_jinja': ParamValue("validators_var1"), '__internal_type': ParamValue("string"), '__internal_multi': ParamValue(False), '__internal_files': ParamValue(['../rougail-tests/structures/04_5validators_multi3/rougail/00-base.yml']), '__internal_attribute': ParamValue("validators"), '__internal_variable': ParamValue("var1"), 'index': ParamIndex(), '_.var1': ParamSelfOption(whole=False)}))], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5validators_multi3/rougail/00-base.yml'], 'type': 'number'}) +option_1 = IntOption(name="var1", doc="a second variable", multi=True, default=[0, 1, 2], default_multi=0, validators=[Calculation(func['valid_with_jinja'], Params((), kwargs={'__internal_jinja': ParamValue("validators_var1"), '__internal_type': ParamValue("string"), '__internal_multi': ParamValue(False), '__internal_files': ParamValue(['../rougail-tests/structures/04_5validators_multi3/rougail/00-base.yml']), '__internal_attribute': ParamValue("validators"), '__internal_variable': ParamValue("var1"), 'index': ParamIndex(), '_.var1': ParamSelfOption(whole=False)}))], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/04_5validators_multi3/rougail/00-base.yml'], 'type': 'number', 'test': (0,)}) option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1]) diff --git a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/after.json b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/after.json index 6fd52405b..d445ea9da 100644 --- a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/after.json +++ b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/after.json @@ -6,19 +6,19 @@ "val2" ] }, - "rougail.{{ suffix }}val1.{{ suffix }}val1.var": { + "rougail.val1.val1.var": { "owner": "default", "value": null }, - "rougail.{{ suffix }}val1.{{ suffix }}val2.var": { + "rougail.val1.val2.var": { "owner": "default", "value": null }, - "rougail.{{ suffix }}val2.{{ suffix }}val1.var": { + "rougail.val2.val1.var": { "owner": "default", "value": null }, - "rougail.{{ suffix }}val2.{{ suffix }}val2.var": { + "rougail.val2.val2.var": { "owner": "default", "value": null } diff --git a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/base.json b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/base.json index a4ba41033..32a4c09aa 100644 --- a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/base.json +++ b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/base.json @@ -3,8 +3,8 @@ "val1", "val2" ], - "rougail.{{ suffix }}val1.{{ suffix }}val1.var": null, - "rougail.{{ suffix }}val1.{{ suffix }}val2.var": null, - "rougail.{{ suffix }}val2.{{ suffix }}val1.var": null, - "rougail.{{ suffix }}val2.{{ suffix }}val2.var": null + "rougail.val1.val1.var": null, + "rougail.val1.val2.var": null, + "rougail.val2.val1.var": null, + "rougail.val2.val2.var": null } diff --git a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/before.json b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/before.json index 6fd52405b..d445ea9da 100644 --- a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/before.json +++ b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/before.json @@ -6,19 +6,19 @@ "val2" ] }, - "rougail.{{ suffix }}val1.{{ suffix }}val1.var": { + "rougail.val1.val1.var": { "owner": "default", "value": null }, - "rougail.{{ suffix }}val1.{{ suffix }}val2.var": { + "rougail.val1.val2.var": { "owner": "default", "value": null }, - "rougail.{{ suffix }}val2.{{ suffix }}val1.var": { + "rougail.val2.val1.var": { "owner": "default", "value": null }, - "rougail.{{ suffix }}val2.{{ suffix }}val2.var": { + "rougail.val2.val2.var": { "owner": "default", "value": null } diff --git a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/mandatory.json b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/mandatory.json index f72a2cf3f..470bcb7cc 100644 --- a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/mandatory.json +++ b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/mandatory.json @@ -1 +1 @@ -["rougail.{{ suffix }}val1.{{ suffix }}val1.var", "rougail.{{ suffix }}val1.{{ suffix }}val2.var", "rougail.{{ suffix }}val2.{{ suffix }}val1.var", "rougail.{{ suffix }}val2.{{ suffix }}val2.var"] \ No newline at end of file +["rougail.val1.val1.var", "rougail.val1.val2.var", "rougail.val2.val1.var", "rougail.val2.val2.var"] \ No newline at end of file diff --git a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/read_write.json b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/read_write.json index a4ba41033..32a4c09aa 100644 --- a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/read_write.json +++ b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/makedict/read_write.json @@ -3,8 +3,8 @@ "val1", "val2" ], - "rougail.{{ suffix }}val1.{{ suffix }}val1.var": null, - "rougail.{{ suffix }}val1.{{ suffix }}val2.var": null, - "rougail.{{ suffix }}val2.{{ suffix }}val1.var": null, - "rougail.{{ suffix }}val2.{{ suffix }}val2.var": null + "rougail.val1.val1.var": null, + "rougail.val1.val2.var": null, + "rougail.val2.val1.var": null, + "rougail.val2.val2.var": null } diff --git a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/tiramisu/base.py b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/tiramisu/base.py index ac265e681..cba053c5e 100644 --- a/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/tiramisu/base.py +++ b/tests/dictionaries/60_6family_dynamic_sub_dynamic_1_0_2/tiramisu/base.py @@ -12,7 +12,7 @@ ALLOWED_LEADER_PROPERTIES.add("standard") ALLOWED_LEADER_PROPERTIES.add("advanced") option_2 = StrOption(name="var", doc="A identifier variable", multi=True, default=["val1", "val2"], default_multi="val1", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/60_6family_dynamic_sub_dynamic_1_0_2/rougail/00-base.yml'], 'type': 'string'}) option_5 = StrOption(name="var", doc="A dynamic variable", properties=frozenset({"basic", "mandatory"}), informations={'ymlfiles': ['../rougail-tests/structures/60_6family_dynamic_sub_dynamic_1_0_2/rougail/00-base.yml'], 'type': 'string'}) -optiondescription_4 = ConvertDynOptionDescription(name="{{ suffix }}{{ identifier }}", doc="A dynamic family", identifiers=Calculation(func['calc_value'], Params((ParamOption(option_2, notraisepropertyerror=True)), kwargs={'allow_none': ParamValue(True)})), children=[option_5], properties=frozenset({"basic"}), informations={'dynamic_variable': 'rougail.var', 'ymlfiles': ['../rougail-tests/structures/60_6family_dynamic_sub_dynamic_1_0_2/rougail/00-base.yml']}) -optiondescription_3 = ConvertDynOptionDescription(name="{{ suffix }}{{ identifier }}", doc="A dynamic family", identifiers=Calculation(func['calc_value'], Params((ParamOption(option_2, notraisepropertyerror=True)), kwargs={'allow_none': ParamValue(True)})), children=[optiondescription_4], properties=frozenset({"basic"}), informations={'dynamic_variable': 'rougail.var', 'ymlfiles': ['../rougail-tests/structures/60_6family_dynamic_sub_dynamic_1_0_2/rougail/00-base.yml']}) +optiondescription_4 = ConvertDynOptionDescription(name="{{ identifier }}", doc="A dynamic family", identifiers=Calculation(func['calc_value'], Params((ParamOption(option_2, notraisepropertyerror=True)), kwargs={'allow_none': ParamValue(True)})), children=[option_5], properties=frozenset({"basic"}), informations={'dynamic_variable': 'rougail.var', 'ymlfiles': ['../rougail-tests/structures/60_6family_dynamic_sub_dynamic_1_0_2/rougail/00-base.yml']}) +optiondescription_3 = ConvertDynOptionDescription(name="{{ identifier }}", doc="A dynamic family", identifiers=Calculation(func['calc_value'], Params((ParamOption(option_2, notraisepropertyerror=True)), kwargs={'allow_none': ParamValue(True)})), children=[optiondescription_4], properties=frozenset({"basic"}), informations={'dynamic_variable': 'rougail.var', 'ymlfiles': ['../rougail-tests/structures/60_6family_dynamic_sub_dynamic_1_0_2/rougail/00-base.yml']}) optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[option_2, optiondescription_3], properties=frozenset({"basic"}), informations={'ymlfiles': ['']}) option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])