Closed WREATCHED closed 1 year ago
Diagnostic.
Le problème apparaît sur la métadonnée dct:conformsTo
, parce que les conditions suivantes sont réunies :
dct:conformsTo
est dans le modèle de fiche, mais ses sous-propriétés ne le sont pas.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.
@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...
Hello, C'est tout bon, Super 👍 je tague l'issue à "Résolu"
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 :
None
à la liste, comme quand elle est vide. Ceci garantit l'existence d'au moins une clé-valeur, même dans le cas où les jumelles ValueKey
des groupes de propriétés correspondant aux noeuds auraient été supprimées (pour des raisons par ailleurs tout à fait justifiées).
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'
-- 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
';
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.';