70705f57474e2e844ef6bbe4515da2e6e383a828
[tiramisu.git] / doc / eole-report / eolreport / D03ReglesEtats.txt
1 .. default-role:: literal
2
3 .. include:: inc/preambule.txt
4
5 Etats et statuts des options de configuration
6 ================================================
7
8 état des variables et lisibilité de l'API
9 -------------------------------------------
10
11 **Creole**
12
13 `EoleVar()`
14
15 - `get_value()`
16 - `get_final_value()`
17 - `get_final_value_at_index()`
18 - `check_value()`
19 - `get_prec_value()`
20 - `get_calculated_value()` -> automatique
21
22 **tiramisu**
23
24 `Option()`
25
26 - **aucune API** d'accès à la valeur d'une option au niveau de l'option de configuration
27 - `option.getdefault()`
28 - `option.setoption(config, value, owner)`
29
30 variables "automatiques"
31 ------------------------------
32
33 si `owner` == 'auto', la variable est automatique et la configuration le sait,
34 elle lance alors les fonctions de calcul à chaque évaluation
35
36 dans Créole, c'est validé aux niveau de la variable par un appel à `eval_func()`
37
38 Accès suivant les états de la configuration
39 --------------------------------------------
40
41 - disabled
42 - hidden
43 - mode (normal/expert)
44 - obligatoire (mandatory)
45 - ...
46
47 - `EoleVar.hidden`
48 - `EoleVar.disabled`
49
50 pas d'objet `Family` dans Créole donc l'organisation des hiérarchie de 
51 hidden est opaque
52
53 - `EoleDict.families['hidden']` pour avoir accès à l'état d'une famille
54
55 dans Tiramisu
56
57 - `hidden` au niveau `Option`, `OptionDescription` et **aussi** au niveau de 
58   la configuration ce qui permet d'avoir des états (inexistant dans `Créole`)
59   
60 .. maitres/esclaves avec Créole : `mavar.get_slaves()`
61
62
63 `hidden_if_in`, `hidden_if_not_in`
64 -------------------------------------
65
66 La notion est généralisée dans tiramisu avec les `requires`.
67
68 Dans Créole : très difficile de conserver une cohérence des `hidden_if_in`
69 quand il y en a plusieurs. 
70
71 Dans Tiramisu : validation et levée d'exception si les **requirements** sont 
72 incohérents, action inverse si aucun requires n'est matché.
73
74 exemple de requires
75
76 ::
77
78     <family name="clamav">
79     <variable name="activer_clam">
80
81     <variable name="activer_clam_exim">
82     <valeur>non
83     
84     <variable name="activer_clam_samba">
85     <valeur>oui
86    
87     <condition name='hidden_if_in' source='activer_clam_exim'>
88     <param>non
89     <target type='variable'>activer_clam
90     <!-- ça hide (momentanément)-->
91     
92     <condition name='hidden_if_in' source='activer_clam_samba'>
93     <param>non
94     <target type='variable'>activer_clam
95     <!-- ça show (et c'est le dernier qui a raison) -->
96     
97 :résultat: `activer_clam` est visible, c'est la dernière condition qui a raison
98
99 avec tiramisu, `activer_clam` **dans les même conditions**, est cachée.
100
101 ::
102
103     >>> activer_clam = StrOption('activer_clam', 'activer clamav',
104                 requires=[('activer_clam_exim', 'non', 'hide'), 
105                           ('activer_clam_samba', 'non', 'hide'),])
106     >>> config.clamav.activer_clam_exim = 'non'
107     >>> config.clamav.activer_clam_samba = 'oui'                     
108     >>> config.clamav.activer_clam
109     >>> Traceback (most recent call last):
110         File "<stdin>", line 1, in <module>
111         HiddenOptionError("trying to access to a hidden option:activer_clam")
112     >>> 
113