Closed alhyss closed 7 months ago
@WREATCHED J'ai fait les modifications sur plume.iso.map.parse_xml
.
plume.rdf.metagraph.metagraph_from_iso
et plume.rdf.metagraph.metagraph_from_iso_file
émettent maintenant des erreurs :
xml.etree.ElementTree.ParseError
quand la désérialisation du XML a échoué. Je n'ai pas retouché aux messages d'origine pour le moment, qui risquent donc d'être en anglais.plume.iso.map.MissingMetadataElement
lorsqu'il n'y avait pas de métadonnées dans le XML. Le message est très simple : "Le XML ne contient pas de métadonnées". Je ne peux pas dire que l'identifiant n'a pas été reconnu, parce que la notion d'identifiant ne vaut pas dans le cas d'un import via un fichier. Et, même pour un import via CSW, il y a potentiellement d'autres causes possibles, par exemple un dysfonctionnement du CSW qui fait qu'un autre schéma qu'ISO 19139 est utilisé...Mais, si tu veux envoyer à l'utilisateur des messages plus clairs et adaptés au contexte (CSW ou fichier), tu peux capturer séparément ces différentes classes d'erreur et générer tes propres messages.
J'ai fait les ajustements nécessaires dans la documentation technique.
Implémentation coté plugin
Super !
Proposition de message pour les erreurs MissingMetadataElement
sur metagraph_from_iso
:
Échec de l’import. La réponse du service CSW ne contient pas de métadonnées. Vérifiez que l’identifiant de fiche de métadonnées renseigné est valide.
Pour les autres erreurs sur metagraph_from_iso
:
Échec de l’import. Erreur : « {message} »
Pour l'instant on a juste le message et je ne trouve pas ça très clair :
Tu n'as pas repris les messages d'erreur pour metagraph_from_iso_file
, si ? Je pense que ça vaudrait le coup aussi, parce que pour l'instant il me semble qu'il n'y a aucune info sur la nature de l'erreur - fichier introuvable, XML invalide, XML sans métadonnées...
Pourquoi pas le même message que ci-avant dans tous les cas :
Échec de l’import. Erreur : « {message} »
Quelques exemples
La dernière capture, c'est un import de fichier ISO où tu as essayé de charger un fichier RDF ? C'est cool, maintenant on peut essayer de deviner quel était le problème 😃
C'est un détail, mais tu ne veux pas mettre "Erreur : " avant le message ? Je sais qu'il y a déjà les guillemets qui aident à comprendre qu'il s'agit de la retranscription d'un message d'erreur, mais ce ne serait pas mieux s'il n'y avait vraiment aucune ambigüité ? Accessoirement, peut-être que tu pourrais aussi laisser un espace entre "Échec de l'import" et le message, comme tu l'as fait sur les captures de gauche, pour les erreurs HTTP des serveurs CSW ?
Réponse
Ok ou KO ?
La solution mise en œuvre pour remonter les erreurs renvoyées par le serveur CSW ne fonctionnent pas dans le cas où l'identifiant fourni n'a pas été reconnu, car - pour un CSW 2.0.2 - il n'y a pas d'erreur dans ce cas. La réponse est un XML valide qui contient bien un élément
csw:GetRecordByIdResponse
, mais simplement aucun élémentgmd:MD_Metadata
. Cf. issue #146.Lorsqu'elle reçoit un tel XML en argument, la fonction
plume.iso.map.parse_xml
en charge de la désérialisation des XML constate l'absence d'élémentgmd:MD_Metadata
et, parce qu'elle a volontairement été écrite de manière à ne pas générer d'erreur (elle-même ou en aval), renvoie un élémentgmd:MD_Metadata
vide.https://github.com/MTES-MCT/metadata-postgresql/blob/41ca642cbba36d4af2bacc99963fc2924f00bbb2/plume/iso/map.py#L1727
Je vois deux solutions possibles :
plume.iso.map.parse_xml
pour qu'elle provoque une erreur dans ce cas, et faire en sorte de capturer et gérer cette erreur en aval. À noter que ça vaudrait alors aussi pour l'import de fiche de métadonnées ISO à partir d'un fichier, ce qui ne serait pas une mauvaise chose. Les erreurs devraient être capturées au niveau de tous les appels aux fonctionsplume.rdf.metagraph.metagraph_from_iso
etplume.rdf.metagraph.metagraph_from_iso_file
.plume.rdf.metagraph.metagraph_from_iso
pour vérifier la présence d'un élémentgmd:MD_Metadata
. Ce n'est toutefois pas optimal, dans la mesure où ce traitement doublonnerait la recherche d'élémentgmd:MD_Metadata
queplume.iso.map.parse_xml
devra réaliser quoi qu'il arrive. Il faudrait au moins faire en sorte queplume.iso.map.parse_xml
puisse recevoir le XML sous la forme d'un objetxml.etree.ElementTree.Element
déjà désérialisé, afin qu'elle n'ait pas à re-désérialiser la réponse brute du service CSW.J'ai une nette préférence pour la première option.