diff --git a/src/rougail/annotator.py b/src/rougail/annotator.py
index ea487d1b..dc94d646 100644
--- a/src/rougail/annotator.py
+++ b/src/rougail/annotator.py
@@ -765,6 +765,7 @@ class ConstraintAnnotator:
if target.type == 'variable':
variable = self.objectspace.paths.get_variable_obj(target.name)
family = self.objectspace.paths.get_family_obj(target.name.rsplit('.', 1)[0])
+ # it's a leader, so apply property to leadership
if isinstance(family, self.objectspace.Leadership) and family.name == variable.name:
return family, family.variable
return variable, [variable]
@@ -927,27 +928,28 @@ class ConstraintAnnotator:
inverse = condition.name.endswith('_if_not_in')
actions = self._get_condition_actions(condition.name)
for param in condition.param:
- if hasattr(param, 'text'):
- param = param.text
- else:
- param = None
+ text = getattr(param, 'text', None)
for target in condition.target:
leader_or_variable, variables = self._get_family_variables_from_target(target)
# if option is already disable, do not apply disable_if_in
- if hasattr(leader_or_variable, actions[0]) and getattr(leader_or_variable, actions[0]) is True:
+ # check only the first action (example of multiple actions: 'hidden', 'frozen', 'force_default_on_freeze')
+ main_action = actions[0]
+ if getattr(leader_or_variable, main_action, False) is True:
continue
for idx, action in enumerate(actions):
prop = self.objectspace.property_(leader_or_variable.xmlfiles)
prop.type = 'calculation'
prop.inverse = inverse
prop.source = condition.source
- prop.expected = param
+ prop.expected = text
prop.name = action
if idx == 0:
+ # main action is for the variable or family
if not hasattr(leader_or_variable, 'property'):
leader_or_variable.property = []
leader_or_variable.property.append(prop)
else:
+ # other actions are set to the variable or children of family
for variable in variables:
if not hasattr(variable, 'property'):
variable.property = []
diff --git a/src/rougail/objspace.py b/src/rougail/objspace.py
index 30756532..ea83a7cc 100644
--- a/src/rougail/objspace.py
+++ b/src/rougail/objspace.py
@@ -441,16 +441,12 @@ class CreoleObjSpace:
self.space.constraints.check.pop(idx) # pylint: disable=E1101
def remove_condition(self, name): # pylint: disable=C0111
+ remove_conditions = []
for idx, condition in enumerate(self.space.constraints.condition): # pylint: disable=E1101
- remove_targets = []
- if hasattr(condition, 'target'):
- for target_idx, target in enumerate(condition.target):
- if target.name == name:
- remove_targets.append(target_idx)
- remove_targets = list(set(remove_targets))
- remove_targets.sort(reverse=True)
- for idx in remove_targets:
- del condition.target[idx]
+ if condition.source == name:
+ remove_conditions.append(idx)
+ for idx in remove_conditions:
+ del self.space.constraints.condition[idx]
def add_to_tree_structure(self,
variableobj,
diff --git a/tests/dictionaries/10check_valid_differ_add/00-base.xml b/tests/dictionaries/10check_valid_differ_add/00-base.xml
index 467a039d..70c315fd 100644
--- a/tests/dictionaries/10check_valid_differ_add/00-base.xml
+++ b/tests/dictionaries/10check_valid_differ_add/00-base.xml
@@ -26,7 +26,7 @@
mode_conteneur_actif1
- mode_conteneur_actif2
+ mode_conteneur_actif1
diff --git a/tests/dictionaries/10check_valid_differ_add/01-base.xml b/tests/dictionaries/10check_valid_differ_add/01-base.xml
index e8a453de..3280f094 100644
--- a/tests/dictionaries/10check_valid_differ_add/01-base.xml
+++ b/tests/dictionaries/10check_valid_differ_add/01-base.xml
@@ -5,9 +5,7 @@
-
- oui
-
+
diff --git a/tests/dictionaries/51redefine_removecondition_alltarget/00-base.xml b/tests/dictionaries/40condition_base_add/00-base.xml
similarity index 76%
rename from tests/dictionaries/51redefine_removecondition_alltarget/00-base.xml
rename to tests/dictionaries/40condition_base_add/00-base.xml
index 7bb861fd..cfc7b2a6 100644
--- a/tests/dictionaries/51redefine_removecondition_alltarget/00-base.xml
+++ b/tests/dictionaries/40condition_base_add/00-base.xml
@@ -1,8 +1,5 @@
-
-
-
@@ -11,26 +8,22 @@
non
-
+
non
-
+
non
-
-
+
oui
mode_conteneur_actif1
- mode_conteneur_actif2
+ mode_conteneur_actif2
-
-
-
diff --git a/tests/dictionaries/40condition_base_add/01-base.xml b/tests/dictionaries/40condition_base_add/01-base.xml
new file mode 100644
index 00000000..81b77776
--- /dev/null
+++ b/tests/dictionaries/40condition_base_add/01-base.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+ oui
+ mode_conteneur_actif1
+ mode_conteneur_actif2
+
+
+
+
+
diff --git a/tests/dictionaries/51redefine_removecondition_alltarget/__init__.py b/tests/dictionaries/40condition_base_add/__init__.py
similarity index 100%
rename from tests/dictionaries/51redefine_removecondition_alltarget/__init__.py
rename to tests/dictionaries/40condition_base_add/__init__.py
diff --git a/tests/dictionaries/51redefine_removecondition_alltarget/makedict/base.json b/tests/dictionaries/40condition_base_add/makedict/base.json
similarity index 100%
rename from tests/dictionaries/51redefine_removecondition_alltarget/makedict/base.json
rename to tests/dictionaries/40condition_base_add/makedict/base.json
diff --git a/tests/dictionaries/51redefine_removecondition_alltarget/tiramisu/__init__.py b/tests/dictionaries/40condition_base_add/tiramisu/__init__.py
similarity index 100%
rename from tests/dictionaries/51redefine_removecondition_alltarget/tiramisu/__init__.py
rename to tests/dictionaries/40condition_base_add/tiramisu/__init__.py
diff --git a/tests/dictionaries/51redefine_removecondition_alltarget/tiramisu/base.py b/tests/dictionaries/40condition_base_add/tiramisu/base.py
similarity index 61%
rename from tests/dictionaries/51redefine_removecondition_alltarget/tiramisu/base.py
rename to tests/dictionaries/40condition_base_add/tiramisu/base.py
index e73621e0..5937b3ed 100644
--- a/tests/dictionaries/51redefine_removecondition_alltarget/tiramisu/base.py
+++ b/tests/dictionaries/40condition_base_add/tiramisu/base.py
@@ -10,8 +10,8 @@ except:
from rougail.tiramisu import ConvertDynOptionDescription
option_3 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='No change', multi=False, default='non', values=('oui', 'non'))
option_4 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='condition', doc='No change', multi=False, default='non', values=('oui', 'non'))
-option_5 = ChoiceOption(properties=frozenset({'force_default_on_freeze', 'frozen', 'hidden', 'mandatory', 'normal'}), name='mode_conteneur_actif1', doc='No change', multi=False, default='non', values=('oui', 'non'))
-option_6 = ChoiceOption(properties=frozenset({'force_default_on_freeze', 'frozen', 'hidden', 'mandatory', 'normal'}), name='mode_conteneur_actif2', doc='No change', multi=False, default='non', values=('oui', 'non'))
+option_5 = ChoiceOption(properties=frozenset({'mandatory', 'normal', Calculation(calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue('oui')}))}), name='mode_conteneur_actif1', doc='No change', multi=False, default='non', values=('oui', 'non'))
+option_6 = ChoiceOption(properties=frozenset({'mandatory', 'normal', Calculation(calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue('oui')}))}), name='mode_conteneur_actif2', doc='No change', multi=False, default='non', values=('oui', 'non'))
option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3, option_4, option_5, option_6])
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/51redefine_remove_condition/01-base.xml b/tests/dictionaries/51redefine_remove_condition/01-base.xml
index 205792ab..05c1c8b8 100644
--- a/tests/dictionaries/51redefine_remove_condition/01-base.xml
+++ b/tests/dictionaries/51redefine_remove_condition/01-base.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/tests/dictionaries/51redefine_remove_condition/tiramisu/base.py b/tests/dictionaries/51redefine_remove_condition/tiramisu/base.py
index 9cbbd7ae..1c5f1a00 100644
--- a/tests/dictionaries/51redefine_remove_condition/tiramisu/base.py
+++ b/tests/dictionaries/51redefine_remove_condition/tiramisu/base.py
@@ -11,7 +11,7 @@ from rougail.tiramisu import ConvertDynOptionDescription
option_3 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='No change', multi=False, default='non', values=('oui', 'non'))
option_4 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='condition', doc='No change', multi=False, default='non', values=('oui', 'non'))
option_5 = ChoiceOption(properties=frozenset({'force_default_on_freeze', 'frozen', 'hidden', 'mandatory', 'normal'}), name='mode_conteneur_actif1', doc='No change', multi=False, default='non', values=('oui', 'non'))
-option_6 = ChoiceOption(properties=frozenset({'mandatory', 'normal', Calculation(calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue('oui')}))}), name='mode_conteneur_actif2', doc='No change', multi=False, default='non', values=('oui', 'non'))
+option_6 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif2', doc='No change', multi=False, default='non', values=('oui', 'non'))
option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3, option_4, option_5, option_6])
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/51redefine_removecondition_alltarget/01-base.xml b/tests/dictionaries/51redefine_removecondition_alltarget/01-base.xml
deleted file mode 100644
index ada5ad56..00000000
--- a/tests/dictionaries/51redefine_removecondition_alltarget/01-base.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/dictionaries/51redefine_removecondition_nonautofreeze/01-base.xml b/tests/dictionaries/51redefine_removecondition_nonautofreeze/01-base.xml
index 205792ab..e11fe0c6 100644
--- a/tests/dictionaries/51redefine_removecondition_nonautofreeze/01-base.xml
+++ b/tests/dictionaries/51redefine_removecondition_nonautofreeze/01-base.xml
@@ -1,18 +1,8 @@
-
-
-
-
+
-
-
-
-
-
-
-
diff --git a/tests/dictionaries/51redefine_removecondition_nonautofreeze/tiramisu/base.py b/tests/dictionaries/51redefine_removecondition_nonautofreeze/tiramisu/base.py
index ef405048..4de69ba1 100644
--- a/tests/dictionaries/51redefine_removecondition_nonautofreeze/tiramisu/base.py
+++ b/tests/dictionaries/51redefine_removecondition_nonautofreeze/tiramisu/base.py
@@ -12,7 +12,7 @@ option_7 = ChoiceOption(properties=frozenset({'force_default_on_freeze', 'frozen
option_3 = ChoiceOption(properties=frozenset({'auto_freeze', 'basic', 'force_store_value', 'mandatory', Calculation(calc_value, Params(ParamValue('auto_frozen'), kwargs={'condition': ParamOption(option_7, todict=True), 'expected': ParamValue('oui'), 'reverse_condition': ParamValue(True)}))}), name='mode_conteneur_actif', doc='No change', multi=False, default='non', values=('oui', 'non'))
option_4 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='condition', doc='No change', multi=False, default='non', values=('oui', 'non'))
option_5 = ChoiceOption(properties=frozenset({'force_default_on_freeze', 'frozen', 'hidden', 'mandatory', 'normal'}), name='mode_conteneur_actif1', doc='No change', multi=False, default='non', values=('oui', 'non'))
-option_6 = ChoiceOption(properties=frozenset({'mandatory', 'normal', Calculation(calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue('oui')}))}), name='mode_conteneur_actif2', doc='No change', multi=False, default='non', values=('oui', 'non'))
+option_6 = ChoiceOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif2', doc='No change', multi=False, default='non', values=('oui', 'non'))
option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'basic'}), children=[option_3, option_4, option_5, option_6, option_7])
option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2])
option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1])
diff --git a/tests/test_1_flattener.py b/tests/test_1_flattener.py
index 3f670f13..2b725121 100644
--- a/tests/test_1_flattener.py
+++ b/tests/test_1_flattener.py
@@ -28,7 +28,7 @@ excludes = set([])
#excludes = set(['01base_file_utfchar'])
test_ok -= excludes
test_raise -= excludes
-#test_ok = ['10leadership_autoleader']
+#test_ok = ['40condition_base_add']
#test_raise = []
ORI_DIR = getcwd()