Opened 7 years ago

Last modified 7 years ago

#325 new defect

2 problemes avec IGCM_comp_modifyXmlFile function

Reported by: jgipsl Owned by: somebody
Priority: major Milestone: libIGCM_v2.8.4
Component: system Version:
Keywords: Cc:

Description

1) Probleme si l'attribut est manquant
Pour le cas nonblocker, l'utilisateur doit pouvoir enlever l'attribut du fichier. Mais ce n'est pas le cas. Si l'attribut n'est pas mis dans le fichier xml, libIGCM provoque un exit.

Cela est utile par exemple si on ajoute un nouveau fichier dans file_def qui n'existait pas dans les vieux versions. Si on corrige ce bug, alors le meme driver peut utiliser les 2 version de file_def.

2) Probleme avec 2 attributs sur la meme ligne
Pour le cas avec 2 attributs AUTO sur la meme ligne : si l'utilisateur modifi l'un des 2, meme s'il est nonblocker libIGCM modifiera la valeur car il trouve un AUTO sur la ligne. Par exemple, dans file_def_orchidee.xml :

  <file id="sechiba1" name="sechiba_history" output_level="11" output_freq="_AUTO_" enabled="_AUTO_">

et dans orchidee.def:

    IGCM_comp_modifyXmlFile nonblocker file_def_orchidee.xml sechiba1 enabled ${sechiba1_enabled}
    IGCM_comp_modifyXmlFile nonblocker file_def_orchidee.xml sechiba1 output_freq ${sechiba1_freq}

Cela fonctionne bien si les valeurs ne sont pas modifiés dans file_def_orchidee.xml. Mais si un utilisateur change un des AUTO dans le fichier file_def_orchidee.xml, par exemple en mettant enabled=".TRUE.", le premier appel IGCM_comp_modifyXmlFile va quand meme modifier le valeur meme s'il n'est plus en AUTO. Cela parce que la fonctionne IGCM_comp_modifyXmlFile verifie uniquement si AUTO est mis sur la meme ligne. Il n'a pas ete codé pour prendre en compte le cas avec 2 attributs modifiable sur la meme ligne.

Change History (3)

comment:1 Changed 7 years ago by jgipsl

Problème 1 fait dans le trunk rev [1386].

comment:2 Changed 7 years ago by sdipsl

On pourrait simplifier IGCM_comp_modifyXmlFile et lui faire appeler un code python pour faire cela. Il faudra vérifier la valeur AUTO par attributs avant de les éditer. Un truc du genre.

def findTimeSeries(root):
    """Recursively find and list field tag with "timeseries", "id", "output_freq" and enabled=_AUTO_ attribute."""
    if root.tag == 'file' and root.attrib.get('timeseries'):
        if root.attrib.get('enabled') == '_AUTO_':
            print 'id=%s,output_freq=%s' % (root.attrib.get('id'), root.attrib.get('output_freq'))
    else:
        for elem in list(root):
            findTimeSeries(elem)

comment:3 Changed 7 years ago by sdipsl

  • Milestone set to libIGCM_v2.8.4
Note: See TracTickets for help on using tickets.