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

Import CSW - Avertir l'utilisateur lorsque la réponse ne contient pas de métadonnées #172

Closed alhyss closed 7 months ago

alhyss commented 8 months ago

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ément gmd:MD_Metadata. Cf. issue #146.

>>> from plume.iso.csw import getrecordbyid_request
>>> import requests
>>> req = getrecordbyid_request('http://ogc.geo-ide.developpement-durable.gouv.fr/csw/dataset-harvestable', 'unknown')
>>> res = requests.get(req)
>>> res.status_code
200
>>> print(res.text)
<?xml version="1.0" encoding="UTF-8"?>

<csw:GetRecordByIdResponse xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:apiso="http://www.opengis.net/cat/csw/apiso/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dct="http://purl.org/dc/terms/" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd" />

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ément gmd: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ément gmd:MD_Metadata vide.

https://github.com/MTES-MCT/metadata-postgresql/blob/41ca642cbba36d4af2bacc99963fc2924f00bbb2/plume/iso/map.py#L1727

Je vois deux solutions possibles :

J'ai une nette préférence pour la première option.

alhyss commented 8 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 :

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.

WREATCHED commented 8 months ago

Implémentation coté plugin image

alhyss commented 8 months ago

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 :

image

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} »

WREATCHED commented 8 months ago

Quelques exemples image

alhyss commented 8 months ago

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 ?

WREATCHED commented 8 months ago

Réponse image

Ok ou KO ?

WREATCHED commented 8 months ago

image