113 lines
3.1 KiB
Text
113 lines
3.1 KiB
Text
.. default-role:: literal
|
|
|
|
.. include:: inc/preambule.txt
|
|
|
|
Etats et statuts des options de configuration
|
|
================================================
|
|
|
|
état des variables et lisibilité de l'API
|
|
-------------------------------------------
|
|
|
|
**Creole**
|
|
|
|
`EoleVar()`
|
|
|
|
- `get_value()`
|
|
- `get_final_value()`
|
|
- `get_final_value_at_index()`
|
|
- `check_value()`
|
|
- `get_prec_value()`
|
|
- `get_calculated_value()` -> automatique
|
|
|
|
**tiramisu**
|
|
|
|
`Option()`
|
|
|
|
- **aucune API** d'accès à la valeur d'une option au niveau de l'option de configuration
|
|
- `option.getdefault()`
|
|
- `option.setoption(config, value, owner)`
|
|
|
|
variables "automatiques"
|
|
------------------------------
|
|
|
|
si `owner` == 'auto', la variable est automatique et la configuration le sait,
|
|
elle lance alors les fonctions de calcul à chaque évaluation
|
|
|
|
dans Créole, c'est validé aux niveau de la variable par un appel à `eval_func()`
|
|
|
|
Accès suivant les états de la configuration
|
|
--------------------------------------------
|
|
|
|
- disabled
|
|
- hidden
|
|
- mode (normal/expert)
|
|
- obligatoire (mandatory)
|
|
- ...
|
|
|
|
- `EoleVar.hidden`
|
|
- `EoleVar.disabled`
|
|
|
|
pas d'objet `Family` dans Créole donc l'organisation des hiérarchie de
|
|
hidden est opaque
|
|
|
|
- `EoleDict.families['hidden']` pour avoir accès à l'état d'une famille
|
|
|
|
dans Tiramisu
|
|
|
|
- `hidden` au niveau `Option`, `OptionDescription` et **aussi** au niveau de
|
|
la configuration ce qui permet d'avoir des états (inexistant dans `Créole`)
|
|
|
|
.. maitres/esclaves avec Créole : `mavar.get_slaves()`
|
|
|
|
|
|
`hidden_if_in`, `hidden_if_not_in`
|
|
-------------------------------------
|
|
|
|
La notion est généralisée dans tiramisu avec les `requires`.
|
|
|
|
Dans Créole : très difficile de conserver une cohérence des `hidden_if_in`
|
|
quand il y en a plusieurs.
|
|
|
|
Dans Tiramisu : validation et levée d'exception si les **requirements** sont
|
|
incohérents, action inverse si aucun requires n'est matché.
|
|
|
|
exemple de requires
|
|
|
|
::
|
|
|
|
<family name="clamav">
|
|
<variable name="activer_clam">
|
|
|
|
<variable name="activer_clam_exim">
|
|
<valeur>non
|
|
|
|
<variable name="activer_clam_samba">
|
|
<valeur>oui
|
|
|
|
<condition name='hidden_if_in' source='activer_clam_exim'>
|
|
<param>non
|
|
<target type='variable'>activer_clam
|
|
<!-- ça hide (momentanément)-->
|
|
|
|
<condition name='hidden_if_in' source='activer_clam_samba'>
|
|
<param>non
|
|
<target type='variable'>activer_clam
|
|
<!-- ça show (et c'est le dernier qui a raison) -->
|
|
|
|
:résultat: `activer_clam` est visible, c'est la dernière condition qui a raison
|
|
|
|
avec tiramisu, `activer_clam` **dans les même conditions**, est cachée.
|
|
|
|
::
|
|
|
|
>>> activer_clam = StrOption('activer_clam', 'activer clamav',
|
|
requires=[('activer_clam_exim', 'non', 'hide'),
|
|
('activer_clam_samba', 'non', 'hide'),])
|
|
>>> config.clamav.activer_clam_exim = 'non'
|
|
>>> config.clamav.activer_clam_samba = 'oui'
|
|
>>> config.clamav.activer_clam
|
|
>>> Traceback (most recent call last):
|
|
File "<stdin>", line 1, in <module>
|
|
HiddenOptionError("trying to access to a hidden option:activer_clam")
|
|
>>>
|
|
|