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 9f2592c7..5b7f92b5 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 a5dc7819..1209dd30 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 eb3da32e..c0ce2d33 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 db84b9ed..af87388f 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 4ac5a286..98df5cf2 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 613026fb..4286872c 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 379d5001..b56edb7c 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 b153f49e..20c79f87 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 fd503179..592d52e8 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 +