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 12 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 12 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 12 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 12 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 12 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 12 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 12 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 12 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 12 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 12 ans
- Statut changé de Résolu à Fermé