diff --git a/doc/variable/choice.md b/doc/variable/choice.md index 5f5d158e..855361be 100644 --- a/doc/variable/choice.md +++ b/doc/variable/choice.md @@ -1,6 +1,6 @@ # Les variables à choix -## Les variables à choix simple +## Une variable à choix Il est possible d'imposer une liste de valeur pour une variable particulière : @@ -12,11 +12,10 @@ Il est possible d'imposer une liste de valeur pour une variable particulière : ``` -Dans ce cas, seules les valeurs proposées sont possibles pour cette variable. Mais il est possible de mettre la valeur "None". +Dans ce cas, seules les valeurs proposées sont possibles pour cette variable. +Cette variable n'est pas obligatoire dont il est possible de mettre la valeur "None". -## Les variables à choix avec valeur - -Si on précise une valeur, la variable passe obligatoire et la valeur "None" n'est plus autorisé : +Si la variable est obligatoire ou si une valeur est précisée (la variable passe obligatoire) alors la valeur "None" n'est plus autorisé : ``` @@ -26,3 +25,67 @@ Si on précise une valeur, la variable passe obligatoire et la valeur "None" n'e val1 ``` + +## Un variable à choix typée + +Par défaut les choix sont de type "string". Il est possible de préciser des nombres, des booléens ou la valeur None : + +``` + + val1 + val2 + 3 + True + + +``` + +Comme vu précédement ajouter la valeur None n'est pas utile parce qu'elle est automatiquement ajouté si la variable n'est pas obligatoire. + +## Ajouter une option à une variable à choix existante + +Pour ajouter un choix à une variable à choix existante, rien de plus simple, juste redéfinir la variable en ajoutant le choix voulu : + +``` + + val4 + +``` + +## Redéfinir une option à choix + +Si on veut supprimer un choix ou redéfinir complètement la liste, il faut redéfinir cette variable et ajouter l'attribut "remove_choice" à "True" : + +``` + + val1 + val2 + +``` + +Dans ce cas toutes les anciens choix ne seront plus possible. Seuls les nouveaux le seront. + +## Un variable à choix provenant d'une variable + +Une variable à valeur multiple peut servir de source des choix : + +``` + + other_variable + +``` + +Dans ce cas, toutes les valeurs de la variable seront des choix utilisables par l'utilisateur. +Seul un choice de type "variable" est possible par variable. + +## Un variable à choix provenant d'une fonction + +``` + + + 0 + 10 + + 9 + +``` diff --git a/tests/dictionaries/10valid_enum_append/00-base.xml b/tests/dictionaries/10valid_enum_append/00-base.xml new file mode 100644 index 00000000..18c238b3 --- /dev/null +++ b/tests/dictionaries/10valid_enum_append/00-base.xml @@ -0,0 +1,18 @@ + + + + + + non + + + + + b + a + b + + + + + diff --git a/tests/dictionaries/10valid_enum_append/01-base.xml b/tests/dictionaries/10valid_enum_append/01-base.xml new file mode 100644 index 00000000..bf8e4389 --- /dev/null +++ b/tests/dictionaries/10valid_enum_append/01-base.xml @@ -0,0 +1,13 @@ + + + + + + c + c + + + + + + diff --git a/tests/dictionaries/10valid_enum_append/__init__.py b/tests/dictionaries/10valid_enum_append/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/10valid_enum_append/makedict/after.json b/tests/dictionaries/10valid_enum_append/makedict/after.json new file mode 100644 index 00000000..d6497f42 --- /dev/null +++ b/tests/dictionaries/10valid_enum_append/makedict/after.json @@ -0,0 +1,10 @@ +{ + "rougail.general.mode_conteneur_actif": { + "owner": "default", + "value": "non" + }, + "rougail.enumfam.enumvar": { + "owner": "default", + "value": "c" + } +} diff --git a/tests/dictionaries/10valid_enum_append/makedict/base.json b/tests/dictionaries/10valid_enum_append/makedict/base.json new file mode 100644 index 00000000..58c810c5 --- /dev/null +++ b/tests/dictionaries/10valid_enum_append/makedict/base.json @@ -0,0 +1,4 @@ +{ + "rougail.general.mode_conteneur_actif": "non", + "rougail.enumfam.enumvar": "c" +} diff --git a/tests/dictionaries/10valid_enum_append/makedict/before.json b/tests/dictionaries/10valid_enum_append/makedict/before.json new file mode 100644 index 00000000..d6497f42 --- /dev/null +++ b/tests/dictionaries/10valid_enum_append/makedict/before.json @@ -0,0 +1,10 @@ +{ + "rougail.general.mode_conteneur_actif": { + "owner": "default", + "value": "non" + }, + "rougail.enumfam.enumvar": { + "owner": "default", + "value": "c" + } +} diff --git a/tests/dictionaries/10valid_enum_append/tiramisu/base.py b/tests/dictionaries/10valid_enum_append/tiramisu/base.py new file mode 100644 index 00000000..0f349e81 --- /dev/null +++ b/tests/dictionaries/10valid_enum_append/tiramisu/base.py @@ -0,0 +1,20 @@ +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 * +option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="non", properties=frozenset({"expert", "mandatory"})) +option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"expert"})) +option_5 = ChoiceOption(name="enumvar", doc="multi", values=('a', 'b', 'c'), default="c", properties=frozenset({"expert", "mandatory"})) +option_5.impl_set_information('help', "bla bla bla") +option_4 = OptionDescription(name="enumfam", doc="enumfam", children=[option_5], properties=frozenset({"expert"})) +option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2, option_4]) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1])