From 75fc04c5019097be902df3dae5a5d64f5bfba2cf Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Wed, 26 Mar 2025 19:32:30 +0100 Subject: [PATCH] feat: add Namespace(Param|Calculation) support --- src/rougail/output_formatter/__init__.py | 10 +++++--- .../rougail/00-base.yml | 8 ++++++ .../rougail/00-base.yml | 12 +++++++++ .../rougail/00-base.yml | 10 ++++++++ .../rougail/00-base.yml | 12 +++++++++ .../rougail/00-base.yml | 6 ++--- .../rougail/00-base.yml | 10 +++----- .../rougail/00-base.yml | 4 +-- .../rougail/00-base.yml | 4 +-- .../rougail/00-base.yml | 25 +++++++++++++++++++ .../rougail/00-base.yml | 21 ++++++++++++++++ .../rougail/00-base.yml | 22 ++++++++++++++++ .../rougail/00-base.yml | 24 ++++++++++++++++++ .../rougail/00-base.yml | 4 +-- .../rougail/00-base.yml | 4 +-- 15 files changed, 150 insertions(+), 26 deletions(-) create mode 100644 tests/results/00_8calculation_namespace/rougail/00-base.yml create mode 100644 tests/results/00_8calculation_param_namespace/rougail/00-base.yml create mode 100644 tests/results/04_5disabled_calculation_variable_multi2/rougail/00-base.yml create mode 100644 tests/results/04_5disabled_calculation_variable_multi3/rougail/00-base.yml create mode 100644 tests/results/60_0family_dynamic_forbidden_char/rougail/00-base.yml create mode 100644 tests/results/60_5family_dynamic_calc_suffix_empty_2/rougail/00-base.yml create mode 100644 tests/results/60_5family_dynamic_calc_suffix_empty_3/rougail/00-base.yml create mode 100644 tests/results/60_5family_dynamic_variable_outside_1_0/rougail/00-base.yml diff --git a/src/rougail/output_formatter/__init__.py b/src/rougail/output_formatter/__init__.py index c284a22..f4e61d0 100644 --- a/src/rougail/output_formatter/__init__.py +++ b/src/rougail/output_formatter/__init__.py @@ -31,7 +31,7 @@ from tiramisu import undefined from tiramisu.config import get_common_path from rougail.convert import RougailConvert -from rougail.object_model import Variable, Family, Calculation, JinjaCalculation, IdentifierCalculation, IdentifierPropertyCalculation, IdentifierParam, IndexCalculation, IndexParam, Param +from rougail.object_model import Variable, Family, Calculation, JinjaCalculation, IdentifierCalculation, IdentifierPropertyCalculation, NamespaceCalculation, IdentifierParam, IndexCalculation, IndexParam, NamespaceParam, Param from rougail.utils import normalize_family from .upgrade import RougailUpgrade @@ -314,8 +314,10 @@ class RougailOutputFormatter: variable = CommentedMap() if isinstance(value, (IdentifierCalculation, IdentifierPropertyCalculation)): variable["type"] = "identifier" - if isinstance(value, IndexCalculation): + elif isinstance(value, IndexCalculation): variable["type"] = "index" + elif isinstance(value, NamespaceCalculation): + variable["type"] = "namespace" for key, default in variable_attributes.items(): val = getattr(value, key) if val != default and val is not undefined: @@ -333,8 +335,10 @@ class RougailOutputFormatter: variable = CommentedMap() if isinstance(value, IdentifierParam): variable["type"] = "identifier" - if isinstance(value, IndexParam): + elif isinstance(value, IndexParam): variable["type"] = "index" + elif isinstance(value, NamespaceParam): + variable["type"] = "namespace" for key, default in param_attributes.items(): val = getattr(value, key) if val != default and val is not undefined: diff --git a/tests/results/00_8calculation_namespace/rougail/00-base.yml b/tests/results/00_8calculation_namespace/rougail/00-base.yml new file mode 100644 index 0000000..ba7231d --- /dev/null +++ b/tests/results/00_8calculation_namespace/rougail/00-base.yml @@ -0,0 +1,8 @@ +--- +version: 1.1 + +variable: + description: a variable + default: + type: namespace + mandatory: false diff --git a/tests/results/00_8calculation_param_namespace/rougail/00-base.yml b/tests/results/00_8calculation_param_namespace/rougail/00-base.yml new file mode 100644 index 0000000..90e3cf6 --- /dev/null +++ b/tests/results/00_8calculation_param_namespace/rougail/00-base.yml @@ -0,0 +1,12 @@ +--- +version: 1.1 + +variable: + description: a variable + default: + jinja: >- + {{ namespace }} + params: + namespace: + type: namespace + mandatory: false diff --git a/tests/results/04_5disabled_calculation_variable_multi2/rougail/00-base.yml b/tests/results/04_5disabled_calculation_variable_multi2/rougail/00-base.yml new file mode 100644 index 0000000..0091bd0 --- /dev/null +++ b/tests/results/04_5disabled_calculation_variable_multi2/rougail/00-base.yml @@ -0,0 +1,10 @@ +--- +version: 1.1 + +condition: [] # a condition + +variable: + description: a variable + multi: true + disabled: + variable: _.condition diff --git a/tests/results/04_5disabled_calculation_variable_multi3/rougail/00-base.yml b/tests/results/04_5disabled_calculation_variable_multi3/rougail/00-base.yml new file mode 100644 index 0000000..aff17ad --- /dev/null +++ b/tests/results/04_5disabled_calculation_variable_multi3/rougail/00-base.yml @@ -0,0 +1,12 @@ +--- +version: 1.1 + +condition: # a condition + - val1 + - val2 + +variable: + description: a variable + multi: true + disabled: + variable: _.condition diff --git a/tests/results/40_1leadership_append_follower/rougail/00-base.yml b/tests/results/40_1leadership_append_follower/rougail/00-base.yml index da49536..df1707f 100644 --- a/tests/results/40_1leadership_append_follower/rougail/00-base.yml +++ b/tests/results/40_1leadership_append_follower/rougail/00-base.yml @@ -5,10 +5,8 @@ leader: description: a leadership type: leadership - leader: - description: the leader - multi: true + leader: [] # the leader - follower1: # the follower1 + follower1: # the follower1 follower2: # the follower2 diff --git a/tests/results/40_6leadership_follower_multi/rougail/00-base.yml b/tests/results/40_6leadership_follower_multi/rougail/00-base.yml index 6a9b63d..ba9cc1d 100644 --- a/tests/results/40_6leadership_follower_multi/rougail/00-base.yml +++ b/tests/results/40_6leadership_follower_multi/rougail/00-base.yml @@ -5,13 +5,9 @@ leadership: description: A leadership type: leadership - leader: - description: The leader - multi: true + leader: [] # The leader - follower1: - description: The first follower - multi: true + follower1: [] # The first follower - follower2: # The second follower + follower2: # The second follower - value diff --git a/tests/results/44_4leadership_mandatory/rougail/00-base.yml b/tests/results/44_4leadership_mandatory/rougail/00-base.yml index eeb965e..370cafa 100644 --- a/tests/results/44_4leadership_mandatory/rougail/00-base.yml +++ b/tests/results/44_4leadership_mandatory/rougail/00-base.yml @@ -5,9 +5,7 @@ leader: description: a leadership type: leadership - leader: - description: a leader - multi: true + leader: [] # a leader follower1: description: a follower diff --git a/tests/results/44_6leadership_follower_disabled_calculation/rougail/00-base.yml b/tests/results/44_6leadership_follower_disabled_calculation/rougail/00-base.yml index 2e22dda..cb5acde 100644 --- a/tests/results/44_6leadership_follower_disabled_calculation/rougail/00-base.yml +++ b/tests/results/44_6leadership_follower_disabled_calculation/rougail/00-base.yml @@ -7,9 +7,7 @@ leader: description: a leadership type: leadership - leader: - description: a leader - multi: true + leader: [] # a leader follower: description: a follower diff --git a/tests/results/60_0family_dynamic_forbidden_char/rougail/00-base.yml b/tests/results/60_0family_dynamic_forbidden_char/rougail/00-base.yml new file mode 100644 index 0000000..d266109 --- /dev/null +++ b/tests/results/60_0family_dynamic_forbidden_char/rougail/00-base.yml @@ -0,0 +1,25 @@ +--- +version: 1.1 + +var: # A suffix variable + - val.1 + - val.2 + +dyn{{ identifier }}: + description: A dynamic family + dynamic: + variable: _.var + + var1: + description: A dynamic variable + default: + type: identifier + + var2: + description: A dynamic variable + default: + jinja: >- + {{ identifier }} + params: + identifier: + type: identifier diff --git a/tests/results/60_5family_dynamic_calc_suffix_empty_2/rougail/00-base.yml b/tests/results/60_5family_dynamic_calc_suffix_empty_2/rougail/00-base.yml new file mode 100644 index 0000000..ece3a58 --- /dev/null +++ b/tests/results/60_5family_dynamic_calc_suffix_empty_2/rougail/00-base.yml @@ -0,0 +1,21 @@ +--- +version: 1.1 + +var1: + description: A suffix variable + test: + - val1 + multi: true + mandatory: false + +dyn{{ identifier }}: + dynamic: + variable: _.var1 + + var: # A dynamic variable + +var2: + description: A variable calculated + default: + variable: _.dynval1.var + optional: true diff --git a/tests/results/60_5family_dynamic_calc_suffix_empty_3/rougail/00-base.yml b/tests/results/60_5family_dynamic_calc_suffix_empty_3/rougail/00-base.yml new file mode 100644 index 0000000..89e6963 --- /dev/null +++ b/tests/results/60_5family_dynamic_calc_suffix_empty_3/rougail/00-base.yml @@ -0,0 +1,22 @@ +--- +version: 1.1 + +var2: + description: A variable calculated + default: + variable: _.dynval1.var + optional: true + +var1: + description: A suffix variable + test: + - val1 + - val2 + multi: true + mandatory: false + +dyn{{ identifier }}: + dynamic: + variable: _.var1 + + var: # A dynamic variable diff --git a/tests/results/60_5family_dynamic_variable_outside_1_0/rougail/00-base.yml b/tests/results/60_5family_dynamic_variable_outside_1_0/rougail/00-base.yml new file mode 100644 index 0000000..889704d --- /dev/null +++ b/tests/results/60_5family_dynamic_variable_outside_1_0/rougail/00-base.yml @@ -0,0 +1,24 @@ +--- +version: 1.1 + +var: # a suffix variable + - val1 + - val2 + +my_dyn_family_{{ identifier }}: + description: a dynamic family + dynamic: + variable: _.var + propertyerror: false + + var: + description: a variable inside a dynamic family + default: + type: identifier + mandatory: false + +var2: + description: a variable + multi: true + default: + variable: _.my_dyn_family_{{ identifier }}.var diff --git a/tests/results/60_6family_dynamic_leadership/rougail/00-base.yml b/tests/results/60_6family_dynamic_leadership/rougail/00-base.yml index 60232a0..b36a29e 100644 --- a/tests/results/60_6family_dynamic_leadership/rougail/00-base.yml +++ b/tests/results/60_6family_dynamic_leadership/rougail/00-base.yml @@ -14,9 +14,7 @@ dyn{{ identifier }}: description: a leadership type: leadership - leader: - description: a leader - multi: true + leader: [] # a leader follower1: description: a follower1 diff --git a/tests/results/60_6family_dynamic_leadership_empty/rougail/00-base.yml b/tests/results/60_6family_dynamic_leadership_empty/rougail/00-base.yml index 9587f3b..05b097f 100644 --- a/tests/results/60_6family_dynamic_leadership_empty/rougail/00-base.yml +++ b/tests/results/60_6family_dynamic_leadership_empty/rougail/00-base.yml @@ -18,9 +18,7 @@ dyn{{ identifier }}: description: a leadership type: leadership - leader: - description: a leader - multi: true + leader: [] # a leader follower1: description: a follower1