MTES-MCT / metadata-postgresql

Plume : gestion des métadonnées du patrimoine PostgreSQL
https://mtes-mct.github.io/metadata-postgresql/
GNU Affero General Public License v3.0
1 stars 1 forks source link

Gestion des valeurs de type date et date+heure #10

Closed alhyss closed 2 years ago

alhyss commented 2 years ago

Nous avions un peu laissé de côté le cas des catégories prenant pour valeur des dates avec heure, car il n'y en avait pas dans les catégories communes, mais c'est maintenant le cas avec la date de dernière modification des métadonnées.

Pour ce que j'ai pu voir, les valeurs date+heure enregistrées dans les métadonnées ne s'affichent actuellement pas dans les widgets.

La première raison était que tu attendais des valeurs de la forme '13/02/2022 17:29:13' alors que la clé 'value' du dictionnaire interne contenait des valeurs date+heure au format ISO ('2022-02-13T17:29:13'). J'ai modifié ça de mon côté, donc rien à changer ici pour toi.

Par contre, je crois qu'il y a de petites corrections à faire dans les parties de plume.bibli_gene_objets.generationObjets et plume.bibli_plume.saveMetaIhm qui s'intéressent aux clés telles que 'main widget type' vaut 'QDateTimeEdit'. Tu confirmeras, mais il faut probablement :

Par ailleurs, est-ce qu'il ne faudrait pas utiliser pour les date+heure la classe QgsDateTimeEdit au lieu de QDateTimeEdit (comme tu l'as fait pour les dates), afin d'avoir une gestion propres des valeurs nulles ?

Autre aspect : il est préférable pour moi que les valeurs que tu vas chercher en entrée dans les clés 'value' du dictionnaire interne et celles que tu fournis en sortie à plume.rdf.widgetsdict.WidgetsDict.update_value via plume.bibli_plume.saveMetaIhm soient de la même forme.

Autrement dit, il faudrait sans doute ça :

           elif _valueObjet['main widget type'] in ("QDateTimeEdit",) :
               value = _valueObjet['main widget'].dateTime().toString('dd/MM/yyyy hh:mm:ss')

au lieu de :

           elif _valueObjet['main widget type'] in ("QDateTimeEdit") :
               value = _valueObjet['main widget'].date().toString("yyyy-MM-dd")

(d'ailleurs, dans toute cette partie, est-ce qu'il ne manquerait pas des virgules dans tes tuples - ('QDateTimeEdit',) au lieu de('QDateTimeEdit') ? Pas que ça fasse de différence en pratique, mais toutes les conditions testent l'inclusion d'une chaîne de caractères dans une autre et non l'inclusion dans une liste, c'est un peu bizarre)

De mon côté, j'ai donc écrit des fonctions qui sérialisent et désérialisent les date+heure, et j'en ai profité pour faire de même pour les dates simples ('main widget type' valant 'QDateEdit'), car ça permet aussi de s'assurer que les valeurs manipulées sont valides. Et, tant qu'à faire, j'ai calé la forme des dates sur celles des date+heure : tu auras maintenant dans le dictionnaire des dates de la forme '13/02/2022', et c'est aussi ce que plume.rdf.widgetsdict.WidgetsDict.update_value s'attendra à recevoir.

Dans plume.bibli_plume.saveMetaIhm, ça voudrait dire mettre :

           elif _valueObjet['main widget type'] in ("QDateEdit",) :
               value = _valueObjet['main widget'].date().toString('dd/MM/yyyy')

au lieu de :

           elif _valueObjet['main widget type'] in ("QDateEdit") :
               value = _valueObjet['main widget'].date().toString("yyyy-MM-dd")

Dans plume.bibli_gene_objets.generationObjets (lignes 241 à 251 dans la version du Git), tu devrais pouvoir supprimer la succession de try/except :

       if valueExiste('value', _valueObjet) :
          try : 
            _valueDate = tuple(map(int, _valueObjet['value'].split('-')))                      
            _mObjetQDateEdit.setDate(QDate(_valueDate[0], _valueDate[1], _valueDate[2]))
          except :
            # Is QDateTimeEdit
            try : 
              _valueDate = tuple(map(int, _valueObjet['value'][0:10].split('-')))                      
              _mObjetQDateEdit.setDate(QDate(_valueDate[0], _valueDate[1], _valueDate[2]))
            except :
              pass  

... et utiliser à la place la même instruction que pour les dates+heures :

       if valueExiste('value', _valueObjet) :
           _mObjetQDateEdit.setDate(QDate.fromString( _valueObjet['value'], _displayFormat)) 

Comme déjà évoqué, je valide les dates de mon côté, donc tu peux être sûr que si _valueObjet['value'] n'est pas None, c'est une date au format 'dd/MM/yyyy' (soit la valeur de ta variable _displayFormat).

WREATCHED commented 2 years ago

Coucou, Oui, la partie heure n'était pas finalisée. donc à revoir. Tout est implémenté dans ma version 0.2.9 Donc, c'est Ok tu peux clore l'issue après avoir testé, je pusse la version 0.2.9 sur le git

alhyss commented 2 years ago

Merci @WREATCHED !

Juste un petit oubli. Dans plume.bibli_plume.saveMetaIhm, tu n'as pas changé le format de sortie pour les dates+heures. II faudrait 'dd/MM/yyyy hh:mm:ss' comme en entrée au lieu de 'yyyy-MM-dd'.

WREATCHED commented 2 years ago

OK, je transfère sur le GitHub