.. 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 :: non oui non activer_clam non activer_clam :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 "", line 1, in HiddenOptionError("trying to access to a hidden option:activer_clam") >>>