From d1a39e5183df1ad75cb5547ead40f4a63577a03e Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Sun, 14 Feb 2021 18:42:16 +0100 Subject: [PATCH] add in RougailConfig auto_freeze_variable --- doc/dev/config.md | 4 ++ doc/family/auto.md | 17 +++---- doc/family/simple.md | 2 +- doc/variable/README.md | 2 - doc/variable/simple.md | 8 +-- src/rougail/annotator/condition.py | 51 ++++++++----------- src/rougail/annotator/variable.py | 3 -- src/rougail/config.py | 3 +- .../00load_autofreeze/00-base.xml | 14 +++-- .../00load_autofreeze/makedict/base.json | 2 +- .../00load_autofreeze/tiramisu/base.py | 7 ++- .../00load_autofreezeexpert/00-base.xml | 14 +++-- .../makedict/base.json | 2 +- .../00load_autofreezeexpert/tiramisu/base.py | 7 ++- .../01auto_autofreeze/00-base.xml | 18 +++---- .../01auto_autofreeze/makedict/base.json | 2 +- .../01auto_autofreeze/tiramisu/base.py | 7 ++- .../01fill_autofreeze/00-base.xml | 24 ++++----- .../01fill_autofreeze/makedict/base.json | 2 +- .../01fill_autofreeze/tiramisu/base.py | 9 ++-- .../01hidden_if_in_autofreeze/00-base.xml | 24 ++++----- .../makedict/base.json | 2 +- .../tiramisu/base.py | 7 ++- .../00-base.xml | 38 +++++++------- .../01-base.xml | 4 +- .../makedict/base.json | 2 +- .../tiramisu/base.py | 13 +++-- .../00-base.xml | 12 ++--- .../makedict/base.json | 2 +- .../tiramisu/base.py | 6 +-- .../60extra_no_condition/00-base.xml | 2 +- .../60extra_no_condition/tiramisu/base.py | 6 +-- .../80leadership_autofreeze/00-base.xml | 8 +-- 33 files changed, 148 insertions(+), 176 deletions(-) diff --git a/doc/dev/config.md b/doc/dev/config.md index 9f2592c71..5b7f92b55 100644 --- a/doc/dev/config.md +++ b/doc/dev/config.md @@ -65,3 +65,7 @@ Le répertoire de temporaire est géré dans la clef "tmp_dir" et a comme valeur ## Le répertoire de destination des fichiers générés Le répertoire de destination des fichiers générés est géré dans la clef "destinations_dir" et a comme valeur par défaut : "/srv/rougail/destinations". + +## La variable auto_freeze + +La propriété auto_freeze n'est appliqué que une variable spécifique passe à True. Par défaut le nom de la variable est "instancied_module", mais il est possible de changer le nom de cette variable via la clef "auto_freeze_variable". diff --git a/doc/family/auto.md b/doc/family/auto.md index a5dc78198..1209dd305 100644 --- a/doc/family/auto.md +++ b/doc/family/auto.md @@ -6,20 +6,17 @@ Le nom et la description de la famille et des variables qu'elle contient sera en Par exemple : ``` - - - val1 - val2 - - - - + + val1 + val2 + + + ``` -Créera trois familles : +Créera deux familles : -- la famille : "my_family" - la famille dynamique : "my_dyn_family_val1" avec la description "Describe val1" - la famille dynamique : "my_dyn_family_val2" avec la description "Describe val2" diff --git a/doc/family/simple.md b/doc/family/simple.md index eb3da32ec..c0ce2d330 100644 --- a/doc/family/simple.md +++ b/doc/family/simple.md @@ -56,7 +56,7 @@ Pour définir le [mode](../mode.md) : ## Famille invisible -Il est possible de cacher une famille, ainsi toutes les variables et des familles inclusent dans cette famille. +Il est possible de cacher une famille, ainsi que toutes les variables et des familles inclusent dans cette famille. Cacher une famille signifie qu'elle ne sera pas visible lorsqu'on modifie la configuration du service. Par contre ces variables sont accessibles lorsqu'on va utiliser ces variables. diff --git a/doc/variable/README.md b/doc/variable/README.md index db84b9ed6..af87388f0 100644 --- a/doc/variable/README.md +++ b/doc/variable/README.md @@ -2,5 +2,3 @@ - [Une variable](simple.md) - [Variable meneuse ou suiveuse](leadership.md) - -FIXME diff --git a/doc/variable/simple.md b/doc/variable/simple.md index 4ac5a2862..98df5cf2c 100644 --- a/doc/variable/simple.md +++ b/doc/variable/simple.md @@ -36,10 +36,10 @@ Une variable a un type. Ce type permet de définir les valeurs acceptées par ce - string : chaine de caractère (type par défaut) - number : un nombre - float : un chiffre flottant -- boolean : True ou False si aucune valeur n'est défini la valeur par défaut cette variable sera True +- boolean : "True" ou "False", si aucune valeur n'est défini la valeur par défaut de cette variable sera "True" - password : un mot de passe - mail : une adresse mail -- filename : nom de fichier au sens Unix (exemple : '/etc/passwd') +- filename : nom de fichier au sens Unix (exemple : "/etc/passwd") - date : une date au format "%Y-%m-%d" (exemple : "2021-01-30") - unix_user : nom d'utilisateur au sens Unix - ip : n'importe quelle adresse IPv4 @@ -91,7 +91,7 @@ Pour définir le [mode](../mode.md) : Il est possible de cacher une variable. Cacher une variable signifie qu'elle ne sera pas visible lorsqu'on modifie la configuration du service. -Par contre cette variable sont accessibles lorsqu'on va l'utiliser. +Par contre cette variable sera accessibles lorsqu'on va l'utiliser. Pour cacher une variable : @@ -215,3 +215,5 @@ Par exemple, si la valeur de cette variable est issue d'un calcul, la valeur ne Ces variables sont généralement des variables obligatoires. En effet ces variable ne sont en lecteur seul que si elles sont une valeurs. Une [variable meneuse ou suiveuse](leadership.md) ne peut pas avoir la propriété auto_freeze. + +FIXME diff --git a/src/rougail/annotator/condition.py b/src/rougail/annotator/condition.py index 613026fb9..4286872cd 100644 --- a/src/rougail/annotator/condition.py +++ b/src/rougail/annotator/condition.py @@ -35,8 +35,6 @@ from .target import TargetAnnotator from .param import ParamAnnotator from .variable import Walk -FREEZE_AUTOFREEZE_VARIABLE = 'module_instancie' - class ConditionAnnotator(TargetAnnotator, ParamAnnotator, Walk): """Annotate condition @@ -72,35 +70,30 @@ class ConditionAnnotator(TargetAnnotator, ParamAnnotator, Walk): def convert_auto_freeze(self): """convert auto_freeze - only if FREEZE_AUTOFREEZE_VARIABLE == 'oui' this variable is frozen + only if auto_freeze_variable is True this variable is frozen """ for variable in self.get_variables(): - self._convert_auto_freeze(variable) - - def _convert_auto_freeze(self, - variable: 'self.objectspace.variable', - ) -> None: - if not variable.auto_freeze: - return - if variable.namespace != RougailConfig['variable_namespace']: - msg = _(f'auto_freeze is not allowed in extra "{variable.namespace}"') - raise DictConsistencyError(msg, 49, variable.xmlfiles) - new_condition = self.objectspace.condition(variable.xmlfiles) - new_condition.name = 'auto_frozen_if_not_in' - new_condition.namespace = variable.namespace - new_condition.source = FREEZE_AUTOFREEZE_VARIABLE - new_param = self.objectspace.param(variable.xmlfiles) - new_param.text = 'oui' - new_condition.param = [new_param] - new_target = self.objectspace.target(variable.xmlfiles) - new_target.type = 'variable' - new_target.name = variable.name - new_condition.target = [new_target] - if not hasattr(self.objectspace.space, 'constraints'): - self.objectspace.space.constraints = self.objectspace.constraints(variable.xmlfiles) - if not hasattr(self.objectspace.space.constraints, 'condition'): - self.objectspace.space.constraints.condition = [] - self.objectspace.space.constraints.condition.append(new_condition) + if not variable.auto_freeze: + continue + if variable.namespace != RougailConfig['variable_namespace']: + msg = _(f'auto_freeze is not allowed in extra "{variable.namespace}"') + raise DictConsistencyError(msg, 49, variable.xmlfiles) + new_condition = self.objectspace.condition(variable.xmlfiles) + new_condition.name = 'auto_frozen_if_not_in' + new_condition.namespace = variable.namespace + new_condition.source = RougailConfig['auto_freeze_variable'] + new_param = self.objectspace.param(variable.xmlfiles) + new_param.text = True + new_condition.param = [new_param] + new_target = self.objectspace.target(variable.xmlfiles) + new_target.type = 'variable' + new_target.name = variable.name + new_condition.target = [new_target] + if not hasattr(self.objectspace.space, 'constraints'): + self.objectspace.space.constraints = self.objectspace.constraints(variable.xmlfiles) + if not hasattr(self.objectspace.space.constraints, 'condition'): + self.objectspace.space.constraints.condition = [] + self.objectspace.space.constraints.condition.append(new_condition) def check_source_target(self): """verify that source != target in condition diff --git a/src/rougail/annotator/variable.py b/src/rougail/annotator/variable.py index 379d50017..b56edb7cb 100644 --- a/src/rougail/annotator/variable.py +++ b/src/rougail/annotator/variable.py @@ -90,9 +90,6 @@ class Walk: yield follower continue yield variable -# if hasattr(family, 'family'): -# for fam in family.family.values(): -# yield from self._get_variables(fam, with_leadership) def get_families(self): """Iter all families from the objectspace diff --git a/src/rougail/config.py b/src/rougail/config.py index b153f49e1..20c79f87b 100644 --- a/src/rougail/config.py +++ b/src/rougail/config.py @@ -39,6 +39,7 @@ RougailConfig = {'dictionaries_dir': [join(ROUGAILROOT, 'dictionaries')], 'destinations_dir': join(ROUGAILROOT, 'destinations'), 'tmp_dir': join(ROUGAILROOT, 'tmp'), 'dtdfilename': join(DTDDIR, 'rougail.dtd'), - 'variable_namespace': 'rougail', 'functions_file': join(ROUGAILROOT, 'functions.py'), + 'variable_namespace': 'rougail', + 'auto_freeze_variable': 'instanciated_module', } diff --git a/tests/dictionaries/00load_autofreeze/00-base.xml b/tests/dictionaries/00load_autofreeze/00-base.xml index fd5031799..592d52e82 100644 --- a/tests/dictionaries/00load_autofreeze/00-base.xml +++ b/tests/dictionaries/00load_autofreeze/00-base.xml @@ -1,14 +1,12 @@ - - - non - - - non - - + + no + + + False +