diff --git a/doc/README.md b/doc/README.md
index 30b7b5055..b96b0edc2 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -43,3 +43,7 @@ FIXME expliquer les noms des variables dans les extras
## Les templates
- Type creole
+
+
+FIXME :
+- une variable avec nom unique sauf pour extra
diff --git a/doc/condition.rst b/doc/condition.rst
deleted file mode 100644
index 4790927ae..000000000
--- a/doc/condition.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-FIXME
-
-
-
-
-
-
-
-
-
-
-
-on peut mettre plusieurs param (oui ou maybe)
diff --git a/doc/target/variable.md b/doc/target/variable.md
index 1fd60b1e2..ee6bc1ef0 100644
--- a/doc/target/variable.md
+++ b/doc/target/variable.md
@@ -1,4 +1,4 @@
-# Cible de la fonction de type "variable"
+# Cible de type "variable"
Par défaut une cible est de type variable.
diff --git a/src/rougail/annotator/condition.py b/src/rougail/annotator/condition.py
index 4286872cd..382cf0bc2 100644
--- a/src/rougail/annotator/condition.py
+++ b/src/rougail/annotator/condition.py
@@ -190,6 +190,9 @@ class ConditionAnnotator(TargetAnnotator, ParamAnnotator, Walk):
listvars,
fills,
)
+ elif not target.optional:
+ msg = f'cannot found target "{target.type}" "{target.name}"'
+ raise DictConsistencyError(_(msg), 2, target.xmlfiles)
remove_targets.append(target_idx)
remove_targets.sort(reverse=True)
for target_idx in remove_targets:
diff --git a/src/rougail/annotator/target.py b/src/rougail/annotator/target.py
index 4ab3d0bb8..2efb24ad1 100644
--- a/src/rougail/annotator/target.py
+++ b/src/rougail/annotator/target.py
@@ -74,7 +74,7 @@ class TargetAnnotator:
raise err
# for optional variable
if not target.optional:
- msg = f'cannot found target "{target.name}"'
+ msg = f'cannot found target "{target.type}" "{target.name}"'
raise DictConsistencyError(_(msg), 12, target.xmlfiles) from err
remove_targets.append(index)
remove_targets.sort(reverse=True)
diff --git a/tests/dictionaries/10load_disabled_if_in/00-base.xml b/tests/dictionaries/10load_disabled_if_in/00-base.xml
index 36b713295..5787099cb 100644
--- a/tests/dictionaries/10load_disabled_if_in/00-base.xml
+++ b/tests/dictionaries/10load_disabled_if_in/00-base.xml
@@ -19,7 +19,6 @@
oui
mode_conteneur_actif
mode_conteneur_actif2
- afilllist
diff --git a/tests/dictionaries/10load_disabled_if_in_list_optional/00-base.xml b/tests/dictionaries/10load_disabled_if_in_list_optional/00-base.xml
new file mode 100644
index 000000000..93c47befb
--- /dev/null
+++ b/tests/dictionaries/10load_disabled_if_in_list_optional/00-base.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+ True
+ unknown
+
+
+
+
diff --git a/tests/dictionaries/10load_disabled_if_in_list_optional/__init__.py b/tests/dictionaries/10load_disabled_if_in_list_optional/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/dictionaries/10load_disabled_if_in_list_optional/makedict/base.json b/tests/dictionaries/10load_disabled_if_in_list_optional/makedict/base.json
new file mode 100644
index 000000000..9da78c4c7
--- /dev/null
+++ b/tests/dictionaries/10load_disabled_if_in_list_optional/makedict/base.json
@@ -0,0 +1 @@
+{"rougail.condition": true}
diff --git a/tests/dictionaries/10load_disabled_if_in_list_optional/tiramisu/base.py b/tests/dictionaries/10load_disabled_if_in_list_optional/tiramisu/base.py
new file mode 100644
index 000000000..b73e0e6f7
--- /dev/null
+++ b/tests/dictionaries/10load_disabled_if_in_list_optional/tiramisu/base.py
@@ -0,0 +1,16 @@
+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_2 = BoolOption(name="condition", doc="condition", default=True, properties=frozenset({"mandatory", "normal"}))
+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/10load_disabled_if_in_none/00-base.xml b/tests/dictionaries/10load_disabled_if_in_none/00-base.xml
index fc5fa4433..7a59f9e03 100644
--- a/tests/dictionaries/10load_disabled_if_in_none/00-base.xml
+++ b/tests/dictionaries/10load_disabled_if_in_none/00-base.xml
@@ -19,7 +19,6 @@
mode_conteneur_actif
mode_conteneur_actif2
- afilllist
diff --git a/tests/dictionaries/10load_disabledifin_fallback/00-base.xml b/tests/dictionaries/10load_disabledifin_fallback/00-base.xml
index d9441910c..c00f0ca05 100644
--- a/tests/dictionaries/10load_disabledifin_fallback/00-base.xml
+++ b/tests/dictionaries/10load_disabledifin_fallback/00-base.xml
@@ -19,7 +19,6 @@
oui
mode_conteneur_actif
mode_conteneur_actif2
- afilllist
non
diff --git a/tests/dictionaries/10load_disabledifin_fallback_force/00-base.xml b/tests/dictionaries/10load_disabledifin_fallback_force/00-base.xml
index 92ae75cbf..3fbfe19cd 100644
--- a/tests/dictionaries/10load_disabledifin_fallback_force/00-base.xml
+++ b/tests/dictionaries/10load_disabledifin_fallback_force/00-base.xml
@@ -19,7 +19,6 @@
oui
mode_conteneur_actif
mode_conteneur_actif2
- afilllist
non
diff --git a/tests/dictionaries/10load_disabledifin_whithouttype/00-base.xml b/tests/dictionaries/10load_disabledifin_whithouttype/00-base.xml
index 2208cca2f..bad3f6cd8 100644
--- a/tests/dictionaries/10load_disabledifin_whithouttype/00-base.xml
+++ b/tests/dictionaries/10load_disabledifin_whithouttype/00-base.xml
@@ -19,7 +19,6 @@
oui
mode_conteneur_actif
mode_conteneur_actif2
- afilllist
diff --git a/tests/dictionaries/40condition_optional_family/00-base.xml b/tests/dictionaries/40condition_optional_family/00-base.xml
new file mode 100644
index 000000000..f93ac940b
--- /dev/null
+++ b/tests/dictionaries/40condition_optional_family/00-base.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+ True
+ general
+ general2
+
+
+
+
diff --git a/tests/dictionaries/40condition_optional_family/__init__.py b/tests/dictionaries/40condition_optional_family/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/dictionaries/40condition_optional_family/makedict/base.json b/tests/dictionaries/40condition_optional_family/makedict/base.json
new file mode 100644
index 000000000..9da78c4c7
--- /dev/null
+++ b/tests/dictionaries/40condition_optional_family/makedict/base.json
@@ -0,0 +1 @@
+{"rougail.condition": true}
diff --git a/tests/dictionaries/40condition_optional_family/tiramisu/base.py b/tests/dictionaries/40condition_optional_family/tiramisu/base.py
new file mode 100644
index 000000000..c6650f5ba
--- /dev/null
+++ b/tests/dictionaries/40condition_optional_family/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 *
+option_2 = BoolOption(name="condition", doc="condition", default=True, properties=frozenset({"mandatory", "normal"}))
+option_4 = StrOption(name="my_variable", doc="my_variable", properties=frozenset({"normal"}))
+option_3 = OptionDescription(name="general", doc="general", children=[option_4], properties=frozenset({"normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_2, todict=True), 'expected': ParamValue(True)}))}))
+option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2, option_3])
+option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1])
diff --git a/tests/dictionaries/80target_list_unknown/00-base.xml b/tests/dictionaries/80target_list_unknown/00-base.xml
new file mode 100644
index 000000000..dde2b5532
--- /dev/null
+++ b/tests/dictionaries/80target_list_unknown/00-base.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+ True
+ unknown
+
+
+
+
diff --git a/tests/dictionaries/80target_list_unknown/__init__.py b/tests/dictionaries/80target_list_unknown/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/dictionaries/80target_list_unknown/errno_2 b/tests/dictionaries/80target_list_unknown/errno_2
new file mode 100644
index 000000000..e69de29bb