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
0 stars 1 forks source link

Pas d'avertissement avant les actions qui réinitialisent la fiche de métadonnées après un import #105

Closed alhyss closed 1 year ago

alhyss commented 1 year ago

Signalé par la DDT 16 le 15 décembre 2022.

Lorsque l'utilisateur importe des métadonnées INSPIRE ou DCAT et clique sur l'un des boutons de la barre d'outils qui réinitialise l'interface sans avoir fait aucune modification entre temps, l'avertissement sur le risque de perte d'informations non sauvegardées n'apparaît pas, ou du moins pas toujours.

Du point de vue de l'utilisateur, il devrait systématiquement s'afficher, car il y a bel et bien des modifications non enregistrées dans la fiche.

Exemples fournis par la DDT 16 :

alhyss commented 1 year ago

@WREATCHED Si tu as un peu de temps dans les jours qui viennent, je veux bien un peu d'aide pour comprendre pourquoi il y a des alertes après un import DCAT, car il semblerait que ce soit systématique ? En tout cas je reproduis ça avec le fichier de test dcat_eurostat_bilan_nutritif_brut_terre_agricole.ttl... Pour autant que j'ai pu voir, l'attribut WidgetsDict.modified vaut False, mais est-ce que tu peux le confirmer de ton côté ? Et, si c'est parce qu'une valeur a été modifiée que le message apparaît, est-ce que tu pourrais me préciser laquelle ou lesquelles ?

WREATCHED commented 1 year ago

Hello, https://github.com/MTES-MCT/metadata-postgresql/issues/105#issuecomment-1479518513 Tu as bien fait effectivement, c'est moi qui retourne True

['self.mDicObjetsInstancies.modified', False]
['bibli_plume.ifChangeValues(self.mDicObjetsInstancies)', True]
['QComboBox', 'http://eurovoc.europa.eu/4257', None]

valeur1 : http://eurovoc.europa.eu/4257 valeur2 : None

Je fais certainement qq chose de pas bien ?

<https://europeandataportal.eu/set/data/bm13sogjiwmi1eyxrlq>
        a                  dcat:Dataset ;
        <http://data.europa.eu/88u/ontology/dcatapop#debugInfo>
                "EUODP->DEU xslt, version:20210804" ;
        dct:accessRights   <http://publications.europa.eu/resource/authority/access-right/PUBLIC> ;
        dct:description    "Der Indikator gibt die potenzielle Gesamtgefährdung für die Umwelt durch Stickstoff- und Phosphorüberschuss- bzw. -mangel in den Agrarflächen an. Ein Mangel an Stickstoff oder Phosphor mindert die Bodenfruchtbarkeit und Erosion, während ein Übermaß dieser Stoffe zur Verschmutzung des Oberflächen- und Grundwassers (einschliesslich des Trinkwassers) und zur Eutrophierung führt. Durch Mist und Düngemittel kommt es im Boden zu Stickstoff- und Phosphoreinträgen, während das Ernten von Nutzpflanzen, die Beseitigung von Rückständen und der Wasserabfluss dem Boden Stickstoff und Phosphor entziehen. Bilanzüberschüsse an Stickstoff und Phosphor werden im Zuge der Wasserrahmenrichtlinie überwacht, der Stickstoff im Zusammenhang mit der Nitrat-Richtlinie Die Daten stammen aus mehreren Quellen, darunter Düngemittelverbrauch, Tierbestände, Pflanzenproduktion und Anbauflächen verschiedener Nutzpflanzen. Zu den erfassten Flächenarten gehören Ackerland, Dauerkulturen und Dauergrünland. Die Maßeinheit ist Kilogramm Nährstoff pro Hektar Fläche."@de , "Cet indicateur exprime la menace potentielle totale pour l'environnement que représentent les excédents ou les déficits d'azote et de phosphore dans les sols agricoles. Un déficit d'azote ou de phosphore peut réduire la fertilité des sols et provoquer l’érosion des sols, tandis qu'un excédent peut générer la pollution des eaux souterraines et de surface (dont l’eau potable) et une eutrophisation. Le fumier et l'engrais introduisent de l'azote et du phosphore dans les sols, alors que les récoltes, l'enlèvement des résidus et le ruissellement retirent ces éléments des sols. Les excédents en azote et en phosphore font l'objet d'un suivi aux fins de la directive cadre sur l'eau; l'azote fait, en outre, l'objet d'un suivi aux fins de la directive sur les nitrates. Les données proviennent de différentes sources (consommation d'engrais, cheptel vif, production végétale, superficies des divers types de cultures, etc.). Les types de sols pris en compte sont les terres arables, les cultures permanentes et les prairies permanentes. L'unité de mesure utilisée est le kg de nutriment par hectare de ces sols."@fr , "The indicator balance represents the total potential threat to the environment of nitrogen and phosphorous surplus or deficit in agricultural soils. A lack of nitrogen or phosphorous may cause degradation in soil fertility and erosion, while an excess may cause surface and groundwater (including drinking water) pollution and eutrophication. Manure and fertiliser introduce nitrogen and phosphorous to the soil while harvesting of crops, removal of residues and runoff remove nitrogen and phosphorous from the soil. Nitrogen and phosphorous balance surpluses are monitored for the purposes of the Water Framework Directive and nitrogen for the Nitrates Directive. The data comes from multiple sources including the consumption of fertilisers, livestock population, crop production and areas of various types of crops. The land types included are arable land, permanent crops and permanent grassland. The unit of measure used is kg of nutrient per hectare of this land."@en ;
        dct:identifier     "t2020_rn310" , "http://data.europa.eu/88u/dataset/Bm13sogjiWMI1eyXRLQ" ;
        dct:modified       "2021-08-31"^^xsd:date ;
        dct:publisher      <http://publications.europa.eu/resource/authority/corporate-body/ESTAT> ;
        dct:subject        <http://eurovoc.europa.eu/4257> , <http://eurovoc.europa.eu/4260> , <http://eurovoc.europa.eu/6331> , <http://eurovoc.europa.eu/6402> ;
        dct:temporal       <http://purl.org/dc/terms/PeriodOfTime/88dd71ac-e7f5-48d5-b2dd-d56d5e32cdc3> ;
        dct:title          "Gross nutrient balance on agricultural land"@en , "Bilan nutritif brut de la terre agricole"@fr , "Bruttonährstoffbilanz der Agrarflächen"@de ;
        dct:type           <http://publications.europa.eu/resource/authority/dataset-type/STATISTICAL> ;
        dcat:contactPoint  <http://www.w3.org/2006/vcard/ns#Kind/b816bd6a-5985-4126-b089-4464ed90036c> ;
        dcat:distribution  <https://europeandataportal.eu/set/distribution/156e239e-0792-4b61-97ee-ba8343d52751> , <https://europeandataportal.eu/set/distribution/64a9ab6f-df0e-49c3-b51b-5b3aaaa590b0> , <https://europeandataportal.eu/set/distribution/2b1d2991-852a-4685-bbf8-f06ffe3a9bb0> , <https://europeandataportal.eu/set/distribution/bf080191-2625-4e7e-ae90-df1955f5d166> , <https://europeandataportal.eu/set/distribution/e712b98a-52b5-4e91-a418-130f2e123988> , <https://europeandataportal.eu/set/distribution/64ecf6ea-3fc9-48d6-bff1-3397b28e3099> ;
        dcat:keyword       "ESTAT"@en ;
        dcat:landingPage   <http://ec.europa.eu/eurostat/web/products-datasets/-/t2020_rn310> ;
        dcat:theme         <http://publications.europa.eu/resource/authority/data-theme/AGRI> , <http://publications.europa.eu/resource/authority/data-theme/ENVI> ;
        foaf:page          <http://ec.europa.eu/eurostat/estat-navtree-portlet-prod/BulkDownloadListing?file=metadata/t2020_rn310_esmsip2.sdmx.zip> , <http://ec.europa.eu/eurostat/web/products-datasets/-/t2020_rn310> , <http://ec.europa.eu/eurostat/cache/metadata/en/t2020_rn310_esmsip2.htm> .
WREATCHED commented 1 year ago

L'ensemble des retours

['QComboBox', 'http://eurovoc.europa.eu/4257', None]
['QComboBox', 'http://eurovoc.europa.eu/4260', None]
['QComboBox', 'http://eurovoc.europa.eu/6331', None]
['QComboBox', 'http://eurovoc.europa.eu/6402', None]
['QComboBox', 'http://publications.europa.eu/resource/authority/file-type/OP_DATPRO', None]
['QComboBox', 'http://publications.europa.eu/resource/authority/file-type/OP_DATPRO', None]
['QComboBox', 'http://publications.europa.eu/resource/authority/file-type/OP_DATPRO', None]
WREATCHED commented 1 year ago

Pour moi, ce sont les items des QComboBox

alhyss commented 1 year ago

Merci ! Donc ça vient de termes non reconnus sur des champs de métadonnées qui attendent des valeurs issues de vocabulaires contrôlés. De mon côté, je préserve l'URI, c'est pour ça que tu l'as en entrée. Par contre elle n'est pas dans la liste des valeurs autorisées pour ta QComboBox, il semble donc qu'elle soit silencieusement rejetée ?

Visuellement ça donne des items sans valeur : termes_vocabulaire_non_reconnus

Je ne suis pas choquée par le fait qu'on perde une valeur qui n'est pas lisible de toute façon, et avoir des avertissements dans cette situation (on aurait les mêmes si la fiche venait du serveur PostgreSQL et non d'un import) est logique, puisqu'il y a réellement des changements. Et si on retire ces métadonnées du fichier, il n'y a plus d'avertissement. Ce n'était donc pas un problème général sur les imports DCAT.

Je n'ai pas envie de toucher à quoi que ce soit de ce côté, l'essentiel était de comprendre ce qui se passe avant d'attaquer la question de fond sur la gestion des avertissements après exécution de l'une des actions qui génèrent un nouveau dictionnaire de widgets dont le contenu n'est a priori pas cohérent avec les métadonnées stockées en base :

Un point que je n'avais pas noté jusque-là est que toutes les actions potentiellement concernées par les avertissements n'ont pas le même comportement après ça :

Je ne suis pas allée regarder le code, mais je suppose que ça signifie que dans le premier cas les métadonnées sont rechargées depuis le serveur, tandis que dans le second tu repars de l'objet plume.rdf.metagraph.Metagraph modifié ?

Lequel de ces deux comportements est le plus logique du point de vue de l'utilisateur ?

WREATCHED commented 1 year ago

Hello, Pour répondre à ta dernière question, je pense que c'est le bon cas d'usage

C'est ce que je pense de plus logique

alhyss commented 1 year ago

En y repensant, je me dis que ce n'est pas plus mal d'avoir des comportements différents pour le retour au mode lecture et les autres actions, qui restent en mode édition. Ne pas perdre les données issues de l'import lorsque l'utilisateur change de modèle etc. est plutôt une bonne chose, vu que ces actions peuvent aussi lui être utiles pour contrôler les nouvelles données avant de les sauvegarder. Par contre ça n'aurait pas de sens de les conserver lors d'un retour en mode lecture, où l'utilisateur n'aurait plus la main pour enregistrer en base les informations qu'il verrait à l'écran.

Si on conserve ces comportements, ce qui importe est de bien faire apparaître un avertissement lorsque l'utilisateur clique sur le bouton de changement de mode. Pour les autres actions, il n'y a rien à changer.

Proposition :

Est-ce que ça te va ?

WREATCHED commented 1 year ago

Oui, très bien

alhyss commented 1 year ago

@WREATCHED Normalement tu as ce qu'il te faut. Reste à ajouter la condition sur rewritten lors de la bascule du mode édition vers le mode lecture et confirmer que tout fonctionne comme prévu - mais pas d'urgence.

J'ai précisé ce qui était dit dans la documentation technique sur les avertissements.

WREATCHED commented 1 year ago

Corrigé dans plume_ui.py

if self.mDicObjetsInstancies.modified or bibli_plume.ifChangeValues(self.mDicObjetsInstancies)  :
par
if self.mDicObjetsInstancies.modified or bibli_plume.ifChangeValues(self.mDicObjetsInstancies) or self.metagraph.rewritten :

Si ok on pourra clore

alhyss commented 1 year ago

Pour autant que je puisse voir, ça donne bien ce qu'on attendait !

alhyss commented 1 year ago

Il faudra tout de même qu'on explique cette histoire-là soigneusement dans la doc. Par exemple, il n'est pas forcément évident en premier abord que lorsqu'on change de modèle immédiatement après un import on n'a pas d'avertissement parce que le résultat de l'import est conservé dans l'interface même s'il n'a pas été sauvegardé en base, tandis que si on a saisi une valeur dans l'intervalle, l'avertissement apparaît parce que cette modification-là va être perdue, le dictionnaire étant récréé avec les métadonnées dans leur état à l'issue de l'import...