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

Problème sur une couche en changeant de modèle dans l'IHM de Plume #112

Closed WREATCHED closed 1 year ago

WREATCHED commented 1 year ago

Couche France par département

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "C:\Users/didier.leclerc/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\plume\plume_ui.py", line 1090, in _mObjetQMenuItem.triggered.connect(lambda : self.clickButtonsTemplateActions()) File "C:\Users/didier.leclerc/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\plume\plume_ui.py", line 468, in clickButtonsTemplateActions self.majButtonTemplate(self.plumeTemplate, mItemTemplates, int(len(mItemTemplates))) File "C:\Programmes\QGIS_3_28\apps\Python39\lib\contextlib.py", line 135, in exit self.gen.throw(type, value, traceback) File "C:\Users/didier.leclerc/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\plume\plume_ui.py", line 85, in safe_pg_connection zMess = str(err_Exception) + "\n" + str(traceback.format_tb(Exception.traceback)) File "C:\Programmes\QGIS_3_28\apps\Python39\lib\traceback.py", line 57, in format_tb return extract_tb(tb, limit=limit).format() File "C:\Programmes\QGIS_3_28\apps\Python39\lib\traceback.py", line 72, in extract_tb return StackSummary.extract(walk_tb(tb), limit=limit) File "C:\Programmes\QGIS_3_28\apps\Python39\lib\traceback.py", line 347, in extract for f, lineno in frame_gen: File "C:\Programmes\QGIS_3_28\apps\Python39\lib\traceback.py", line 312, in walk_tb yield tb.tb_frame, tb.tb_lineno AttributeError: 'getset_descriptor' object has no attribute 'tb_frame'


* **Définition de la couche avec le champ commentaire de la couche**

-- Table: travail.departement_2154

-- DROP TABLE travail.departement_2154;

CREATE TABLE travail.departement_2154 ( id_0 integer NOT NULL DEFAULT nextval('travail.departement_2154_id_0_seq'::regclass), geom geometry(MultiPolygon,2154), id character varying COLLATE pg_catalog."default", nom_dep_m character varying(30) COLLATE pg_catalog."default", nom_dep character varying(30) COLLATE pg_catalog."default", insee_dep character varying(3) COLLATE pg_catalog."default", insee_reg character varying(2) COLLATE pg_catalog."default", CONSTRAINT departement_2154_pkey PRIMARY KEY (id_0) )

TABLESPACE pg_default;

ALTER TABLE travail.departement_2154 OWNER to postgres;

COMMENT ON TABLE travail.departement_2154 IS 'Points de prélèvements d’eau au milieu naturel effectués pour l’irrigation dans la Drôme - Campagne 2017

[ { "@id": "urn:uuid:0c3306f0-dbff-482c-bd04-2a168524cdeb", "@type": [ "http://www.w3.org/ns/dcat#Dataset" ], "http://purl.org/dc/terms/conformsTo": [ { "@id": "_:Nbed5ac81478b44c58fba8ad54b8fe895" } ], "http://purl.org/dc/terms/created": [ { "@type": "http://www.w3.org/2001/XMLSchema#date", "@value": "2017-04-07" } ], "http://purl.org/dc/terms/description": [ { "@language": "fr", "@value": "Données issues de la base de données de la DDT26 recensant au titre de la loi sur l’eau, les autorisations/déclarations des prélèvements d’eau en milieu superficiel et souterrain notamment pour l’irrigation - Arrêté préfectoral N° AP26_2016-12-22-001 du 22 décembre 2016 - N_PRELEV_IRRIG_P_ANO_026_2017" } ], "http://purl.org/dc/terms/identifier": [ { "@value": "0c3306f0-dbff-482c-bd04-2a168524cdeb" } ], "http://purl.org/dc/terms/issued": [ { "@type": "http://www.w3.org/2001/XMLSchema#date", "@value": "2017-04-07" } ], "http://purl.org/dc/terms/modified": [ { "@type": "http://www.w3.org/2001/XMLSchema#date", "@value": "2017-04-07" } ], "http://purl.org/dc/terms/provenance": [ { "@id": "_:N7def5d423cf548c08b795837ae2ee569" } ], "http://purl.org/dc/terms/spatial": [ { "@id": "_:N25315ab2dd444d94990ce6b85d9b4af2" } ], "http://purl.org/dc/terms/temporal": [ { "@id": "_:Nc28b01f88b8b4b04a605d9566a25226e" } ], "http://purl.org/dc/terms/title": [ { "@language": "fr", "@value": "Points de prélèvements d’eau au milieu naturel effectués pour l’irrigation dans la Drôme - Campagne 2017" } ], "http://registre.data.developpement-durable.gouv.fr/plume/linkedRecord": [ { "@id": "_:N5b5c2bc744f44e90aed34ab3fd9826f7" } ], "http://www.w3.org/ns/dcat#contactPoint": [ { "@id": "_:Nc2a4e8bd53374439b18ea89905d4ed54" } ], "http://www.w3.org/ns/dcat#keyword": [ { "@language": "fr", "@value": "Eau/Utilisation Autre" }, { "@language": "fr", "@value": "données ouvertes" } ], "http://www.w3.org/ns/dcat#theme": [ { "@id": "http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/farming" }, { "@id": "http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/structure" } ], "http://xmlns.com/foaf/0.1/isPrimaryTopicOf": [ { "@id": "_:N0dfcfb7658eb4f35a3ffc3b91f19b632" } ] }, { "@id": "_:N25315ab2dd444d94990ce6b85d9b4af2", "@type": [ "http://purl.org/dc/terms/Location" ], "http://www.w3.org/2004/02/skos/core#inScheme": [ { "@id": "http://id.insee.fr/geo/commune" } ] }, { "@id": "_:Nc28b01f88b8b4b04a605d9566a25226e", "@type": [ "http://purl.org/dc/terms/PeriodOfTime" ], "http://www.w3.org/ns/dcat#startDate": [ { "@type": "http://www.w3.org/2001/XMLSchema#date", "@value": "2022-12-19" } ] }, { "@id": "_:N7def5d423cf548c08b795837ae2ee569", "@type": [ "http://purl.org/dc/terms/ProvenanceStatement" ], "http://www.w3.org/2000/01/rdf-schema#label": [ { "@language": "fr", "@value": "Données extraites de la base de données de la DDT26 pour l''autorisation des prélèvements pour l''irrigation : XEAU-DROMEAU\nDonnées issues d’un relevé GPS ou d’une saisie sur SCAN25 ou sur ORTHO ou encore référencées au centroïde de la commune où se situe le prélèvement (voir champ « centroid »" } ] }, { "@id": "_:Nbed5ac81478b44c58fba8ad54b8fe895", "@type": [ "http://purl.org/dc/terms/Standard" ], "http://purl.org/dc/terms/identifier": [ { "@value": "2154" } ], "http://www.w3.org/2004/02/skos/core#inScheme": [ { "@id": "http://www.opengis.net/def/crs/EPSG/0" } ] }, { "@id": "_:Nc2a4e8bd53374439b18ea89905d4ed54", "@type": [ "http://www.w3.org/2006/vcard/ns#Kind" ], "http://www.w3.org/2006/vcard/ns#fn": [ { "@value": "DDT 26 (Direction Départementale des Territoires de la Drôme)" } ], "http://www.w3.org/2006/vcard/ns#hasEmail": [ { "@id": "mailto:ddt-sig@drome.gouv.fr" } ], "http://www.w3.org/2006/vcard/ns#hasTelephone": [ { "@id": "tel:+33-4-81-66-80-10" } ], "http://www.w3.org/2006/vcard/ns#hasURL": [ { "@id": "http://www.drome.gouv.fr/" } ] }, { "@id": "_:N5b5c2bc744f44e90aed34ab3fd9826f7", "@type": [ "http://registre.data.developpement-durable.gouv.fr/plume/LinkedRecord" ], "http://purl.org/dc/terms/identifier": [ { "@value": "fr-120066022-jdd-23d6b4cd-5a3b-4e10-83ae-d8fdad9b04ab" } ], "http://www.w3.org/ns/dcat#endpointURL": [ { "@id": "http://ogc.geo-ide.developpement-durable.gouv.fr/csw/dataset-harvestable" } ] }, { "@id": "_:N0dfcfb7658eb4f35a3ffc3b91f19b632", "@type": [ "http://www.w3.org/ns/dcat#CatalogRecord" ], "http://purl.org/dc/terms/modified": [ { "@type": "http://www.w3.org/2001/XMLSchema#dateTime", "@value": "2022-12-19T15:35:06" } ] } ]

';

COMMENT ON COLUMN travail.departement_2154.id IS 'Identifiant.';

COMMENT ON COLUMN travail.departement_2154.nom_dep_m IS 'Nom du département en majuscules.';

COMMENT ON COLUMN travail.departement_2154.nom_dep IS 'Nom du département.';

COMMENT ON COLUMN travail.departement_2154.insee_dep IS 'Code INSEE du département.';

COMMENT ON COLUMN travail.departement_2154.insee_reg IS 'Code INSEE de la région.';

alhyss commented 1 year ago

Diagnostic.

Le problème apparaît sur la métadonnée dct:conformsTo, parce que les conditions suivantes sont réunies :

En mode lecture, le comportement par défaut de Plume est de ne pas afficher la valeur manuelle puisqu'elle est hors modèle. Elle est gérée comme un ensemble de clés fantômes, et cela a pour conséquence malheureuse d'empêcher Plume de réaliser des copies vierges de cette clé et sa jumelle pour y mettre les valeurs calculées.

alhyss commented 1 year ago

@WREATCHED Je te laisse confirmer de ton côté, mais en principe c'est corrigé. C'est une bonne chose que tu sois tombé sur ce bug-là. En implémentant les fonctionnalités de calcul de métadonnées, j'avais étendu le mécanisme d'ajout de clés aux groupes en lecture seule sans bien en prendre en compte toutes les spécificités...

WREATCHED commented 1 year ago

Hello, C'est tout bon, Super 👍 je tague l'issue à "Résolu"

alhyss commented 1 year ago

Solution retenue, pour mémoire.

Lors de la génération du dictionnaire de widgets, le comportement normal de Plume est d'aller chercher dans le graphe de métadonnées (issu de la désérialisation du JSON-LD contenu dans le descriptif de la table) toutes les valeurs qui avaient précédemment été saisies pour la propriété considérée. Selon la propriété, cette liste peut être constituée de valeurs littérales, d'URI ou de noeuds anonymes, qui sont eux-mêmes décrits par d'autres propriétés. Si la liste est vide, Plume lui ajoute la valeur None, ce qui - dans le cas où la métadonnée est éditable - permettra de créer un champ vierge. Les valeurs littérales et URI sont matérialisées par des clés de type ValueKey (clés-valeurs), les noeuds par des clés de type GroupOfPropertiesKey (groupe de propriétés). Pour les propriétés qui admettent à la fois des valeurs issues de vocabulaires contrôlés (URI) et de la saisie manuelle (noeud), deux clés "jumelles" ValueKey et GroupOfPropertiesKey sont créées conjointement.

Pour fonctionner, le mécanisme de calcul a besoin d'au moins une clé de type ValueKey pour la propriété, qui sera copiée si besoin. Lorsque la propriété est éditable, c'est une condition acquise. Mais le calcul automatisé est également activable en mode lecture, où les mécanismes de Plume veillent par ailleurs à supprimer (ou "fantômiser") toutes les clés qui ne contiennent pas d'informations à afficher. Dans certains cas particuliers comme celui qui a motivé l'issue, Plume ne parvenait pas à trouver de clé-valeur qui puisse lui servir de modèle.

Afin de résoudre le problème, deux changements ont été apportés conjointement :