Anomalie #6261
L'auto_freeze ne fonctionne pas correctement si on la <value> par défaut
Description
Si on place un auto_freeze='True' sur une variable possédant une valeur par défaut, celle-ci n'est pas enregistrée de force dans le config.eol
Révisions associées
Correction auto_freeze sur une valeur par défaut
Fixes #6261 @20m
creole/loader.py : charger les valeurs mêmes si le mode est différent
creole/var_loader.py : les auto_freezes doivent être en mode basic au chargement
ref #6261
afficher les auto_freeze avec valeur par défaut au moment du diff (fixes #6261 @1h)
Historique
#1 Mis à jour par Joël Cuissinat il y a plus de 10 ans
- Statut changé de Nouveau à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit 63b0201f16fd6042c03337082a4cf7cbdbf913da.
#2 Mis à jour par Joël Cuissinat il y a plus de 10 ans
- Version cible changé de Eole 2.4-alpha2 à Eole 2.4-beta1
report de la qualification => ldap_base_dn sur module Thot
#3 Mis à jour par Emmanuel GARETTE il y a plus de 10 ans
<gnunux> jojo2024, au fait pour #6261 ... tu peux me dire si tu vois bien la variable en mode basic ?
<gnunux> et regarder si tu le vois bien dans le 1er "diff"
#4 Mis à jour par Joël Cuissinat il y a plus de 10 ans
- Statut changé de Résolu à À valider
- Assigné à changé de Joël Cuissinat à Emmanuel GARETTE
- % réalisé changé de 100 à 50
Si la variable n'est pas "mandatory sans valeur" elle n'apparaît pas dans le mode "basic" et n'est pas enregistrée non plus !
#5 Mis à jour par Emmanuel GARETTE il y a plus de 10 ans
Pour reproduire, ajouter le dictionnaire local :
<?xml version="1.0" encoding="utf-8"?> <creole> <files/> <variables> <family name='général' icon='wrench'> <variable name='eole_module_3' type='string' description="Nom du module EOLE" auto_freeze="True"> <value>eolebase</value> </variable> </family> </variables> </creole>
Il faut être en mode "basic" :
# python Python 2.7.3 (default, Sep 26 2013, 20:03:06) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cjson >>> fh = file('/etc/eole/config.eol', 'r') >>> store = cjson.decode(fh.read(), all_unicode=True) >>> store['eole_module_3'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'eole_module_3' >>> >>> from creole.loader import creole_loader, config_save_values >>> a=creole_loader(rw=True) >>> a.cfgimpl_get_settings().append('normal') >>> a.cfgimpl_get_settings().append('expert') >>> o=a.unwrap_from_path('creole.general.eole_module_3') >>> print a.getowner(o) default >>> print a.cfgimpl_get_settings()[o] ['auto_freeze', 'normal'] >>> >>> config_save_values(a, 'creole', eol_file='/tmp/config.eol') True >>> >>> fh = file('/tmp/config.eol', 'r') >>> store = cjson.decode(fh.read(), all_unicode=True) >>> store['eole_module_3'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'eole_module_3' >>>
eole_module_3 n'est pas enregistré ni mis en mode basic.
#6 Mis à jour par Emmanuel GARETTE il y a plus de 10 ans
- % réalisé changé de 50 à 80
La variable est bien enregistrer dans le fichier alors qu'on est en mode "basic".
La variable est bien en mode "basic".
# python Python 2.7.3 (default, Sep 26 2013, 20:03:06) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cjson >>> fh = file('/etc/eole/config.eol', 'r') >>> store = cjson.decode(fh.read(), all_unicode=True) >>> store['eole_module_3'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'eole_module_3' >>> >>> from creole.loader import creole_loader, config_save_values >>> a=creole_loader(rw=True) >>> a.cfgimpl_get_settings().append('normal') >>> a.cfgimpl_get_settings().append('expert') >>> o=a.unwrap_from_path('creole.general.eole_module_3') >>> print a.getowner(o) default >>> print a.cfgimpl_get_settings()[o] ['auto_freeze', 'basic'] >>> >>> config_save_values(a, 'creole', eol_file='/tmp/config.eol') True >>> >>> fh = file('/tmp/config.eol', 'r') >>> store = cjson.decode(fh.read(), all_unicode=True) >>> store['eole_module_3'] {u'owner': u'user', u'val': u'eolebase'}
Il reste à faire apparaitre la variable dans le "diff" si la variable est en "auto_freeze" sans le "freeze".
#7 Mis à jour par Emmanuel GARETTE il y a plus de 10 ans
Variable auto_freeze non freezé (donc pas dans le fichier) pas visible dans le diff_config :
# python Python 2.7.3 (default, Sep 26 2013, 20:03:06) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cjson >>> fh = file('/etc/eole/config.eol', 'r') >>> store = cjson.decode(fh.read(), all_unicode=True) >>> store['eole_module_3'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'eole_module_3' >>> >>> from eolegenconfig.lib import diff_config >>> >>> diff_config('pouet') [] >>>
#8 Mis à jour par Emmanuel GARETTE il y a plus de 10 ans
- Statut changé de À valider à Résolu
- % réalisé changé de 80 à 100
Appliqué par commit eole-genconfig:4e0bec56132b339d68854226d312d4d67d34be0a.
#9 Mis à jour par Emmanuel GARETTE il y a plus de 10 ans
La valeur n'est pas dans le config.eol mais apparait bien dans le diff :
# python Python 2.7.3 (default, Sep 26 2013, 20:03:06) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cjson >>> fh = file('/etc/eole/config.eol', 'r') >>> store = cjson.decode(fh.read(), all_unicode=True) >>> store['eole_module_3'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'eole_module_3' >>> >>> from eolegenconfig.lib import diff_config >>> >>> diff_config('pouet') eole_module_3 creole.general.eole_module_3 ['auto_freeze', 'basic'] [{'multi': False, 'hidden': False, 'mandatory': False, 'description': 'Nom du module EOLE', 'new_user': 'gen_config', 'editable': True, 'value': u'eolebase', 'id': 'eole_module_3', 'warning': '', 'mode': 'basic', 'new_value': u'eolebase', 'auto_freeze': True, 'type': 'unicode', 'categoryid': 'general', 'default_owner': True, 'help': None}] >>>
Si on enregistre la config (donc enregistre la valeur) la variable n'est plus proposer dans le diff
>>> from creole.loader import creole_loader >>> c=creole_loader(rw=True) >>> from creole.loader import config_save_values >>> config_save_values(c, 'creole') True >>> import cjson >>> fh = file('/etc/eole/config.eol', 'r') >>> store = cjson.decode(fh.read(), all_unicode=True) >>> store['eole_module_3'] {u'owner': u'user', u'val': u'eolebase'} >>> from eolegenconfig.lib import diff_config >>> diff_config('rah') []
#10 Mis à jour par Joël Cuissinat il y a plus de 10 ans
- Statut changé de Résolu à Fermé