diff --git a/src/rougail/annotator/variable.py b/src/rougail/annotator/variable.py index 006eeb34..dc127089 100644 --- a/src/rougail/annotator/variable.py +++ b/src/rougail/annotator/variable.py @@ -53,6 +53,38 @@ class VariableAnnotator: # pylint: disable=R0903 return self.objectspace = objectspace self.convert_variable() + self.convert_test() + + def convert_variable(self): + """convert variable + """ + for families in self.objectspace.space.variables.values(): + families.doc = families.name + families.path = families.name + for family in families.family.values(): + if not hasattr(family, 'description'): + family.description = family.name + for key, value in RENAME_ATTIBUTES.items(): + setattr(family, value, getattr(family, key)) + setattr(family, key, None) + family.name = normalize_family(family.name) + if not hasattr(family, 'variable'): + continue + for variable in family.variable.values(): + if isinstance(variable, self.objectspace.leadership): + # first variable is a leader, others are follower + variable_type = 'leader' + for follower in variable.variable: + self._convert_variable(families.name, + follower, + variable_type, + ) + variable_type = 'follower' + else: + self._convert_variable(families.name, + variable, + 'variable', + ) def _convert_variable(self, namespace: str, @@ -113,33 +145,33 @@ class VariableAnnotator: # pylint: disable=R0903 self.objectspace.space.constraints.check.append(check) variable.type = 'string' - def convert_variable(self): - """convert variable + def convert_test(self): + """Convert variable tests value """ for families in self.objectspace.space.variables.values(): - families.doc = families.name - families.path = families.name for family in families.family.values(): - if not hasattr(family, 'description'): - family.description = family.name - for key, value in RENAME_ATTIBUTES.items(): - setattr(family, value, getattr(family, key)) - setattr(family, key, None) - family.name = normalize_family(family.name) if not hasattr(family, 'variable'): continue for variable in family.variable.values(): if isinstance(variable, self.objectspace.leadership): - # first variable is a leader, others are follower - variable_type = 'leader' for follower in variable.variable: - self._convert_variable(families.name, - follower, - variable_type, - ) - variable_type = 'follower' + self._convert_test(follower) else: - self._convert_variable(families.name, - variable, - 'variable', - ) + self._convert_test(variable) + + def _convert_test(self, + variable, + ) -> None: + if hasattr(variable, 'test'): + if not variable.test: + del variable.test + return + values = variable.test.split('|') + new_values = [] + for value in values: + if value == '': + value = None + else: + value = CONVERT_OPTION.get(variable.type, {}).get('func', str)(value) + new_values.append(value) + variable.test = tuple(new_values) diff --git a/src/rougail/tiramisureflector.py b/src/rougail/tiramisureflector.py index fd202672..e022f315 100644 --- a/src/rougail/tiramisureflector.py +++ b/src/rougail/tiramisureflector.py @@ -298,12 +298,6 @@ class Variable(Common): for key in self.get_attributes(self.elt): value = getattr(self.elt, key) if key in FORCE_INFORMATIONS: - if key == 'test': # pragma: no cover - value = value.split('|') - if self.object_type == 'IntOption': - value = [int(v) for v in value] - elif self.object_type == 'FloatOption': - value = [float(v) for v in value] self.informations[key] = value else: self.attrib[key] = value diff --git a/tests/dictionaries/01test/tiramisu/base.py b/tests/dictionaries/01test/tiramisu/base.py index 60330a2d..5b5a3f79 100644 --- a/tests/dictionaries/01test/tiramisu/base.py +++ b/tests/dictionaries/01test/tiramisu/base.py @@ -13,7 +13,7 @@ except: from tiramisu import * from rougail.tiramisu import ConvertDynOptionDescription option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non') -option_3.impl_set_information("test", ['test']) +option_3.impl_set_information("test", ('test',)) option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3]) option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2]) option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1]) diff --git a/tests/dictionaries/01test_multi/tiramisu/base.py b/tests/dictionaries/01test_multi/tiramisu/base.py index d2ac3c17..8f138022 100644 --- a/tests/dictionaries/01test_multi/tiramisu/base.py +++ b/tests/dictionaries/01test_multi/tiramisu/base.py @@ -13,7 +13,7 @@ except: from tiramisu import * from rougail.tiramisu import ConvertDynOptionDescription option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non') -option_3.impl_set_information("test", ['test1', 'test2']) +option_3.impl_set_information("test", ('test1', 'test2')) option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3]) option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2]) option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1]) diff --git a/tests/dictionaries/01test_multi_none/00-base.xml b/tests/dictionaries/01test_multi_none/00-base.xml new file mode 100644 index 00000000..0f21736b --- /dev/null +++ b/tests/dictionaries/01test_multi_none/00-base.xml @@ -0,0 +1,12 @@ + + + + + + non + + + + + diff --git a/tests/dictionaries/01test_multi_none/__init__.py b/tests/dictionaries/01test_multi_none/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/01test_multi_none/makedict/base.json b/tests/dictionaries/01test_multi_none/makedict/base.json new file mode 100644 index 00000000..797595b0 --- /dev/null +++ b/tests/dictionaries/01test_multi_none/makedict/base.json @@ -0,0 +1 @@ +{"rougail.general.mode_conteneur_actif": "non"} diff --git a/tests/dictionaries/01test_multi_none/tiramisu/__init__.py b/tests/dictionaries/01test_multi_none/tiramisu/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/01test_multi_none/tiramisu/base.py b/tests/dictionaries/01test_multi_none/tiramisu/base.py new file mode 100644 index 00000000..86045c7c --- /dev/null +++ b/tests/dictionaries/01test_multi_none/tiramisu/base.py @@ -0,0 +1,19 @@ +from importlib.machinery import SourceFileLoader +from importlib.util import spec_from_loader, module_from_spec +loader = SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py') +spec = spec_from_loader(loader.name, loader) +func = module_from_spec(spec) +loader.exec_module(func) +for key, value in dict(locals()).items(): + if key != ['SourceFileLoader', 'func']: + setattr(func, key, value) +try: + from tiramisu3 import * +except: + from tiramisu import * +from rougail.tiramisu import ConvertDynOptionDescription +option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non') +option_3.impl_set_information("test", (None, 'test1', 'test2')) +option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3]) +option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2]) +option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1]) diff --git a/tests/dictionaries/01test_redefine/00-base.xml b/tests/dictionaries/01test_redefine/00-base.xml new file mode 100644 index 00000000..8cb71f37 --- /dev/null +++ b/tests/dictionaries/01test_redefine/00-base.xml @@ -0,0 +1,12 @@ + + + + + + non + + + + + diff --git a/tests/dictionaries/01test_redefine/10-base.xml b/tests/dictionaries/01test_redefine/10-base.xml new file mode 100644 index 00000000..fcc7d26c --- /dev/null +++ b/tests/dictionaries/01test_redefine/10-base.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/tests/dictionaries/01test_redefine/__init__.py b/tests/dictionaries/01test_redefine/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/01test_redefine/makedict/base.json b/tests/dictionaries/01test_redefine/makedict/base.json new file mode 100644 index 00000000..797595b0 --- /dev/null +++ b/tests/dictionaries/01test_redefine/makedict/base.json @@ -0,0 +1 @@ +{"rougail.general.mode_conteneur_actif": "non"} diff --git a/tests/dictionaries/01test_redefine/tiramisu/__init__.py b/tests/dictionaries/01test_redefine/tiramisu/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/01test_redefine/tiramisu/base.py b/tests/dictionaries/01test_redefine/tiramisu/base.py new file mode 100644 index 00000000..3552e754 --- /dev/null +++ b/tests/dictionaries/01test_redefine/tiramisu/base.py @@ -0,0 +1,19 @@ +from importlib.machinery import SourceFileLoader +from importlib.util import spec_from_loader, module_from_spec +loader = SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py') +spec = spec_from_loader(loader.name, loader) +func = module_from_spec(spec) +loader.exec_module(func) +for key, value in dict(locals()).items(): + if key != ['SourceFileLoader', 'func']: + setattr(func, key, value) +try: + from tiramisu3 import * +except: + from tiramisu import * +from rougail.tiramisu import ConvertDynOptionDescription +option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non') +option_3.impl_set_information("test", ('test1',)) +option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3]) +option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2]) +option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1]) diff --git a/tests/dictionaries/01test_redefine_remove/00-base.xml b/tests/dictionaries/01test_redefine_remove/00-base.xml new file mode 100644 index 00000000..8cb71f37 --- /dev/null +++ b/tests/dictionaries/01test_redefine_remove/00-base.xml @@ -0,0 +1,12 @@ + + + + + + non + + + + + diff --git a/tests/dictionaries/01test_redefine_remove/10-base.xml b/tests/dictionaries/01test_redefine_remove/10-base.xml new file mode 100644 index 00000000..5d49a5f9 --- /dev/null +++ b/tests/dictionaries/01test_redefine_remove/10-base.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/tests/dictionaries/01test_redefine_remove/__init__.py b/tests/dictionaries/01test_redefine_remove/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/01test_redefine_remove/makedict/base.json b/tests/dictionaries/01test_redefine_remove/makedict/base.json new file mode 100644 index 00000000..797595b0 --- /dev/null +++ b/tests/dictionaries/01test_redefine_remove/makedict/base.json @@ -0,0 +1 @@ +{"rougail.general.mode_conteneur_actif": "non"} diff --git a/tests/dictionaries/01test_redefine_remove/tiramisu/__init__.py b/tests/dictionaries/01test_redefine_remove/tiramisu/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/01test_redefine_remove/tiramisu/base.py b/tests/dictionaries/01test_redefine_remove/tiramisu/base.py new file mode 100644 index 00000000..2169f85c --- /dev/null +++ b/tests/dictionaries/01test_redefine_remove/tiramisu/base.py @@ -0,0 +1,18 @@ +from importlib.machinery import SourceFileLoader +from importlib.util import spec_from_loader, module_from_spec +loader = SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py') +spec = spec_from_loader(loader.name, loader) +func = module_from_spec(spec) +loader.exec_module(func) +for key, value in dict(locals()).items(): + if key != ['SourceFileLoader', 'func']: + setattr(func, key, value) +try: + from tiramisu3 import * +except: + from tiramisu import * +from rougail.tiramisu import ConvertDynOptionDescription +option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non') +option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3]) +option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2]) +option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1])