diff --git a/src/rougail/annotator/variable.py b/src/rougail/annotator/variable.py index baa1af4bb..a03b1ad42 100644 --- a/src/rougail/annotator/variable.py +++ b/src/rougail/annotator/variable.py @@ -29,7 +29,7 @@ from tiramisu.error import display_list from rougail.i18n import _ from rougail.utils import calc_multi_for_type_variable from rougail.error import DictConsistencyError -from rougail.convert.object_model import Calculation, VariableCalculation +from rougail.convert.object_model import Calculation, VariableCalculation, IndexCalculation from rougail.tiramisu import display_xmlfiles, RENAME_TYPE from warnings import warn @@ -118,19 +118,28 @@ class Annotator(Walk): # pylint: disable=R0903 warning = f'the variable "{ variable.path }" has a depreciated type "{variable.type}", please use "{RENAME_TYPE[variable.type]}" instead in {display_xmlfiles(variable.xmlfiles)}' warn(warning) variable.type = RENAME_TYPE[variable.type] + if variable.type == 'cidr': + warning = f'the variable "{ variable.path }" has a depreciated type "{variable.type}", please use type "ip" with attribute cidr=True instead in {display_xmlfiles(variable.xmlfiles)}' + warn(warning) + if variable.type == 'network_cidr': + warning = f'the variable "{ variable.path }" has a depreciated type "{variable.type}", please use type "network" with attribute cidr=True instead in {display_xmlfiles(variable.xmlfiles)}' + warn(warning) self.objectspace.informations.add( variable.path, "ymlfiles", variable.xmlfiles ) - if variable.version != "1.0" and isinstance( - variable.default, VariableCalculation - ): - calculated_variable_path, calculated_variable, identifier = ( - variable.default.get_variable(self.objectspace) - ) - else: - calculated_variable = None - if variable.version != "1.0" and calculated_variable is not None: - self._default_variable_copy_informations(variable, calculated_variable) + if variable.version != "1.0" and variable.type is None: + if isinstance( + variable.default, IndexCalculation + ): + variable.type = 'integer' + elif isinstance( + variable.default, VariableCalculation + ): + calculated_variable_path, calculated_variable, identifier = ( + variable.default.get_variable(self.objectspace) + ) + if calculated_variable is not None: + self._default_variable_copy_informations(variable, calculated_variable) self._convert_variable(variable) def _convert_variable_inference( @@ -201,12 +210,6 @@ class Annotator(Walk): # pylint: disable=R0903 variable, calculated_variable, ) -> None: - # if a variable has a variable as default value, that means the type/params or multi should has same value - if ( - not isinstance(variable.default, VariableCalculation) - or variable.type is not None - ): - return # copy type and params variable.type = calculated_variable.type if variable.params is None and calculated_variable.params is not None: diff --git a/tests/dictionaries/00_2default_calculated_variable/tiramisu/base.py b/tests/dictionaries/00_2default_calculated_variable/tiramisu/base.py new file mode 100644 index 000000000..4786a3ff8 --- /dev/null +++ b/tests/dictionaries/00_2default_calculated_variable/tiramisu/base.py @@ -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 = DomainnameOption(name="var1", doc="a first variable", multi=True, type="domainname", allow_ip=True, properties=frozenset({"basic", "mandatory"}), informations={'ymlfiles': ['../rougail-tests/structures/00_2default_calculated_variable/rougail/00-base.yml'], 'type': 'domainname'}) +option_3 = DomainnameOption(name="var2", doc="a second variable", multi=True, default=Calculation(func['calc_value'], Params((ParamOption(option_2)), kwargs={'__internal_multi': ParamValue(True)})), type="domainname", allow_ip=False, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_2default_calculated_variable/rougail/00-base.yml'], 'type': 'domainname'}) +optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[option_2, option_3], properties=frozenset({"basic"}), informations={'ymlfiles': ['']}) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1]) diff --git a/tests/dictionaries/00_2default_calculated_variable/tiramisu/no_namespace.py b/tests/dictionaries/00_2default_calculated_variable/tiramisu/no_namespace.py new file mode 100644 index 000000000..fe083721b --- /dev/null +++ b/tests/dictionaries/00_2default_calculated_variable/tiramisu/no_namespace.py @@ -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 = DomainnameOption(name="var1", doc="a first variable", multi=True, type="domainname", allow_ip=True, properties=frozenset({"basic", "mandatory"}), informations={'ymlfiles': ['../rougail-tests/structures/00_2default_calculated_variable/rougail/00-base.yml'], 'type': 'domainname'}) +option_2 = DomainnameOption(name="var2", doc="a second variable", multi=True, default=Calculation(func['calc_value'], Params((ParamOption(option_1)), kwargs={'__internal_multi': ParamValue(True)})), type="domainname", allow_ip=False, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_2default_calculated_variable/rougail/00-base.yml'], 'type': 'domainname'}) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_2]) diff --git a/tests/dictionaries/00_6ip/tiramisu/base.py b/tests/dictionaries/00_6ip/tiramisu/base.py new file mode 100644 index 000000000..99c970d35 --- /dev/null +++ b/tests/dictionaries/00_6ip/tiramisu/base.py @@ -0,0 +1,17 @@ +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 = IPOption(name="var1", doc="an IP", default="1.1.1.1", allow_reserved=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6ip/rougail/00-base.yml'], 'type': 'ip'}) +option_3 = IPOption(name="var2", doc="an IP in CIDR format", default="1.1.1.1/24", allow_reserved=True, cidr=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6ip/rougail/00-base.yml'], 'type': 'ip', 'examples': ('192.168.0.128/25',)}) +option_4 = IPOption(name="var3", doc="an IP in CIDR format with obsolete CIDR type", default="1.1.1.1/24", cidr=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6ip/rougail/00-base.yml'], 'type': 'cidr'}) +optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[option_2, option_3, option_4], properties=frozenset({"standard"}), informations={'ymlfiles': ['']}) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1]) diff --git a/tests/dictionaries/00_6ip/tiramisu/no_namespace.py b/tests/dictionaries/00_6ip/tiramisu/no_namespace.py new file mode 100644 index 000000000..d10dc0c51 --- /dev/null +++ b/tests/dictionaries/00_6ip/tiramisu/no_namespace.py @@ -0,0 +1,12 @@ +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 = IPOption(name="var1", doc="an IP", default="1.1.1.1", allow_reserved=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6ip/rougail/00-base.yml'], 'type': 'ip'}) +option_2 = IPOption(name="var2", doc="an IP in CIDR format", default="1.1.1.1/24", allow_reserved=True, cidr=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6ip/rougail/00-base.yml'], 'type': 'ip', 'examples': ('192.168.0.128/25',)}) +option_3 = IPOption(name="var3", doc="an IP in CIDR format with obsolete CIDR type", default="1.1.1.1/24", cidr=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6ip/rougail/00-base.yml'], 'type': 'cidr'}) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_2, option_3]) diff --git a/tests/dictionaries/00_6network/tiramisu/base.py b/tests/dictionaries/00_6network/tiramisu/base.py new file mode 100644 index 000000000..d9f273c0f --- /dev/null +++ b/tests/dictionaries/00_6network/tiramisu/base.py @@ -0,0 +1,17 @@ +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 = NetworkOption(name="var1", doc="an network", default="1.1.1.0", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6network/rougail/00-base.yml'], 'type': 'network'}) +option_3 = NetworkOption(name="var2", doc="an network in CIDR format", default="1.1.1.0/24", cidr=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6network/rougail/00-base.yml'], 'type': 'network'}) +option_4 = NetworkOption(name="var3", doc="an network in CIDR format with obsolete CIDR type", default="1.1.1.0/24", cidr=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6network/rougail/00-base.yml'], 'type': 'network_cidr'}) +optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[option_2, option_3, option_4], properties=frozenset({"standard"}), informations={'ymlfiles': ['']}) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1]) diff --git a/tests/dictionaries/00_6network/tiramisu/no_namespace.py b/tests/dictionaries/00_6network/tiramisu/no_namespace.py new file mode 100644 index 000000000..358a23ed0 --- /dev/null +++ b/tests/dictionaries/00_6network/tiramisu/no_namespace.py @@ -0,0 +1,12 @@ +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 = NetworkOption(name="var1", doc="an network", default="1.1.1.0", properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6network/rougail/00-base.yml'], 'type': 'network'}) +option_2 = NetworkOption(name="var2", doc="an network in CIDR format", default="1.1.1.0/24", cidr=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6network/rougail/00-base.yml'], 'type': 'network'}) +option_3 = NetworkOption(name="var3", doc="an network in CIDR format with obsolete CIDR type", default="1.1.1.0/24", cidr=True, properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/00_6network/rougail/00-base.yml'], 'type': 'network_cidr'}) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_2, option_3]) diff --git a/tests/dictionaries/40_2leadership_calculation_index/tiramisu/no_namespace.py b/tests/dictionaries/40_2leadership_calculation_index/tiramisu/no_namespace.py new file mode 100644 index 000000000..bd72ac312 --- /dev/null +++ b/tests/dictionaries/40_2leadership_calculation_index/tiramisu/no_namespace.py @@ -0,0 +1,12 @@ +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="leader", doc="a leader", multi=True, default=["a", "b", "c"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/40_2leadership_calculation_index/rougail/00-base.yml'], 'type': 'string'}) +option_3 = IntOption(name="follower1", doc="a follower", multi=True, default=Calculation(func['calc_value'], Params((ParamIndex()))), properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/40_2leadership_calculation_index/rougail/00-base.yml'], 'type': 'integer'}) +optiondescription_1 = Leadership(name="leader", doc="a leadership", children=[option_2, option_3], properties=frozenset({"standard"}), informations={'ymlfiles': ['../rougail-tests/structures/40_2leadership_calculation_index/rougail/00-base.yml']}) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1]) diff --git a/tests/dictionaries/40_2leadership_calculation_index_2/tiramisu/base.py b/tests/dictionaries/40_2leadership_calculation_index_2/tiramisu/base.py new file mode 100644 index 000000000..7d8cc9ead --- /dev/null +++ b/tests/dictionaries/40_2leadership_calculation_index_2/tiramisu/base.py @@ -0,0 +1,17 @@ +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="leader", doc="a leader", multi=True, default=["a", "b", "c"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/40_2leadership_calculation_index_2/rougail/00-base.yml'], 'type': 'string'}) +option_4 = IntOption(name="follower1", doc="a follower", multi=True, default=Calculation(func['calc_value'], Params((ParamIndex()))), properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/40_2leadership_calculation_index_2/rougail/00-base.yml'], 'type': 'integer'}) +optiondescription_2 = Leadership(name="leader", doc="a leadership", children=[option_3, option_4], properties=frozenset({"standard"}), informations={'ymlfiles': ['../rougail-tests/structures/40_2leadership_calculation_index_2/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]) diff --git a/tests/dictionaries/40_2leadership_calculation_index_2/tiramisu/no_namespace.py b/tests/dictionaries/40_2leadership_calculation_index_2/tiramisu/no_namespace.py new file mode 100644 index 000000000..06131b110 --- /dev/null +++ b/tests/dictionaries/40_2leadership_calculation_index_2/tiramisu/no_namespace.py @@ -0,0 +1,12 @@ +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="leader", doc="a leader", multi=True, default=["a", "b", "c"], properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/40_2leadership_calculation_index_2/rougail/00-base.yml'], 'type': 'string'}) +option_3 = IntOption(name="follower1", doc="a follower", multi=True, default=Calculation(func['calc_value'], Params((ParamIndex()))), properties=frozenset({"mandatory", "standard"}), informations={'ymlfiles': ['../rougail-tests/structures/40_2leadership_calculation_index_2/rougail/00-base.yml'], 'type': 'integer'}) +optiondescription_1 = Leadership(name="leader", doc="a leadership", children=[option_2, option_3], properties=frozenset({"standard"}), informations={'ymlfiles': ['../rougail-tests/structures/40_2leadership_calculation_index_2/rougail/00-base.yml']}) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])