From 90bd72de69df11f5426adb6356b69d61feac6741 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Tue, 22 Dec 2020 20:17:32 +0100 Subject: [PATCH] remove condition not only a target --- src/rougail/annotator.py | 14 ++++++++------ src/rougail/objspace.py | 14 +++++--------- .../10check_valid_differ_add/00-base.xml | 2 +- .../10check_valid_differ_add/01-base.xml | 4 +--- .../00-base.xml | 15 ++++----------- .../40condition_base_add/01-base.xml | 19 +++++++++++++++++++ .../__init__.py | 0 .../makedict/base.json | 0 .../tiramisu/__init__.py | 0 .../tiramisu/base.py | 4 ++-- .../51redefine_remove_condition/01-base.xml | 2 +- .../tiramisu/base.py | 2 +- .../01-base.xml | 19 ------------------- .../01-base.xml | 12 +----------- .../tiramisu/base.py | 2 +- tests/test_1_flattener.py | 2 +- 16 files changed, 45 insertions(+), 66 deletions(-) rename tests/dictionaries/{51redefine_removecondition_alltarget => 40condition_base_add}/00-base.xml (76%) create mode 100644 tests/dictionaries/40condition_base_add/01-base.xml rename tests/dictionaries/{51redefine_removecondition_alltarget => 40condition_base_add}/__init__.py (100%) rename tests/dictionaries/{51redefine_removecondition_alltarget => 40condition_base_add}/makedict/base.json (100%) rename tests/dictionaries/{51redefine_removecondition_alltarget => 40condition_base_add}/tiramisu/__init__.py (100%) rename tests/dictionaries/{51redefine_removecondition_alltarget => 40condition_base_add}/tiramisu/base.py (61%) delete mode 100644 tests/dictionaries/51redefine_removecondition_alltarget/01-base.xml 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 - - - + 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()