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

Fonctionnalité de nettoyage du descriptif PostgreSQL ? #62

Closed alhyss closed 1 year ago

alhyss commented 2 years ago

À soumettre au sous-groupe métadonnées.

Lorsqu'il enregistre la fiche de métadonnées d'une table dans son descriptif PostgreSQL, Plume ajoute simplement cette fiche au descriptif (entre des balises <METADATA> / </METADATA>). Il préserve donc les informations pré-existantes, qu'il est d'ailleurs possible d'importer dans les champs Titre et Description des fiches de métadonnées (cf. Métadonnées calculées).

Pour certains services, préserver le contenu antérieur du descriptif est essentiel, car il ne sert pas qu'à Plume. Mais d'autres auraient peut-être envie de supprimer ces informations devenues redondantes avec le contenu de la fiche de métadonnées.

Y aurait-il intérêt à proposer une fonctionnalité de nettoyage du descriptif PostgreSQL, qui éliminerait tout sauf la fiche de métadonnées ?

Quelques idées de formes que cela pourrait prendre :

  1. Un bouton dans la barre d'outils de Plume, pour un nettoyage à la demande.
  2. Un paramètre de configuration prenant une valeur booléenne, False par défaut. S'il est mis à True, toute modification de la fiche de métadonnées réinitialisera le descriptif, qui ne contiendra plus que la fiche de métadonnées.
  3. Un paramètre de configuration avec trois valeurs qui pourraient être 'never' (le descriptif n'est jamais nettoyé automatiquement, ce serait la valeur par défaut), 'always' (le descriptif est nettoyé automatiquement à chaque mise à jour de la fiche de métadonnées), 'first' (le descriptif n'est nettoyé automatiquement que lors de l'initialisation de la fiche).

La première pourrait sans problème être combinée à l'une des deux autres.

Sur le même thème, on pourrait aussi imaginer un bouton dans la barre d'outils de Plume qui supprimerait la fiche de métadonnées du descriptif[^vider-fiche], ou carrément tout le descriptif (dont la fiche si elle existe).

[^vider-fiche]: Pour l'heure il est seulement possible de vider la fiche de métadonnées, grâce au bouton de réinitialisation Réinitialiser, mais les balises <METADATA> demeurent, avec une fiche minimale contenant l'identifiant du jeu de données et la date de dernière modification de la fiche.

alhyss commented 2 years ago

Le sous-groupe métadonnées du 13 juin 2022 acte de proposer cette fonctionnalité de nettoyage des descriptifs, à la fois sous forme manuelle et sous forme automatique. L'utilisateur devra également avoir la possibilité de copier le libellé et/ou la description de la table au début du descriptif, là aussi soit manuellement (le bouton de la barre d'outils de Plume devra proposer les différentes options), soit automatiquement (via un ou plusieurs paramètres utilisateur, inactif par défaut).

alhyss commented 1 year ago

@WREATCHED Proposition pour l'implémentation des fonctionnalités de nettoyage du descriptif PostgreSQL.

Pour le nettoyage manuel, j'hésite entre ajouter un bouton spécifique (mais qui risque de ne pas être très utilisé) ou ajouter un menu sur le bouton Réinitialisation. Si c'est un bouton spécifique, il ne sera actif qu'en mode édition.

Dans tous les cas, le déclenchement par l'utilisateur aura pour effet d'envoyer au serveur une requête de mise à jour du descriptif, avec un descriptif basé sur le graphe mémorisé (les informations non sauvegardées du formulaire ne sont pas prises en compte) et qui ne contient plus que les métadonnées.

Le processus est similaire à l'action de sauvegarde, mais en remplaçant les étapes de mise à jour du graphe par la suppression des informations hors balises <METADATA>. Pour ce faire, il suffit d'annuler les valeurs des propriétés PgDescription.ante (partie du descriptif qui apparaît avant les métadonnées) et PgDescription.post (partie du descriptif qui apparaît après les métadonnées) du descriptif.


pg_description.ante = None
pg_description.post = None

# envoi de la requête query_update_table_comment

Pour la variante automatisée, il faudra un paramètre utilisateur qui pourrait s'appeler cleanPgDescription, géré comme tous les autres paramètres et dont la valeur par défaut est 'never'.

Si ce paramètre vaut 'never', n'est pas présent, ou vaut n'importe quoi qui ne serait ni 'always' ni 'first', il n'y a rien à faire.

Si ce paramètre vaut 'always', alors avant chaque sauvegarde il faudra mettre PgDescription.ante et PgDescription.post à None., avec les mêmes commandes que précédemment.


pg_description.ante = None
pg_description.post = None

# procédure de sauvegarde complète

Si ce paramètre vaut 'first', alors PgDescription.ante et PgDescription.post ne sont mis à None lors de la sauvegarde qui si la fiche de métadonnées vient d'être créée. On regarde donc si l'ancien graphe est vide avant de le mettre à jour.


if pg_description.metagraph.is_empty:
    pg_description.ante = None
    pg_description.post = None

# procédure de sauvegarde complète

Qu'en penses-tu ?

EDIT: maintenant que j'ai réfléchi à l'autre fonctionnalité (cf. message suivant), je me dis qu'il serait plus simple que là-aussi, pour la variante automatisée, tu fournisses simplement cleanPgDescription en argument au constructeur de l'objet plume.pg.description.PgDescription - et tu n'auras alors plus rien d'autre à faire. Pour la variante manuelle, par contre, ce sera nécessairement à toi de vider PgDescription.ante et PgDescription.post.

WREATCHED commented 1 year ago

Mes remarques

alhyss commented 1 year ago

Pour moi le cas d'usage le plus courant est celui de l'ADL qui initialise sa fiche de métadonnées à partir du descriptif (grâce aux fonctionnalités de calcul côté serveur), puis nettoie le descriptif pour ne conserver que la fiche de métadonnées. La meilleure forme pour ça est le nettoyage automatique à la sauvegarde avec l'option 'first' ou 'always'.

Le nettoyage manuel ne sera véritablement utile que pour un ADL qui met des informations dans le descriptif et ne veut pas les perdre d'une manière générale, mais éprouve quand même le besoin de les supprimer via Plume de temps en temps. J'ai tendance à penser que c'est largement minoritaire. Je commence même très sérieusement à me demander si on ne ferait pas mieux de n'implémenter là aussi que la version automatisée dans un premier temps, puis d'aviser selon les retours.

Pourquoi est-ce que tu veux un message de confirmation ? J'ai oublié de l'écrire, mais cette action n'a aucun impact sur le formulaire. Tu envoies la requête de mise à jour du descriptif à PostgreSQL et c'est tout. Les étapes de re-génération du dictionnaire de widgets etc. n'ont pas lieu dans ce cas.

WREATCHED commented 1 year ago

Discussion With Leslie Pour la version 1.0

Leslie prévoit aussi deux autres traitements à réaliser

alhyss commented 1 year ago

Trois nouveaux paramètres utilisateurs, géré via la boîte de dialogue de paramétrage, dans l'onglet Avancé :

Nom Libellé Infobulle Widget Valeur par défaut
cleanPgDescription Nettoyer le descriptif PostgreSQL Par défaut, Plume ajoute ses métadonnées aux informations présentes dans le descriptif PostgreSQL de la table/vue, préservant ces dernières. Lorsque cette option est activée, ces informations hors métadonnées sont effacées du descriptif lors de la sauvegarde. QCombox - cf. ci-après pour les valeurs. 'never'
copyDctTitleToPgDescription Copier le libellé du jeu de données dans le descriptif PostgreSQL Si actif, le libellé du jeu de données renseigné dans les métadonnées sera copié au début du descriptif PostgreSQL de la table/vue lors de la sauvegarde de la fiche. Attention : ceci a pour effet de supprimer toute autre information placée avant les métadonnées dans le descriptif PostgreSQL. QCheckBox False
copyDctDescriptionToPgDescription Copier la description du jeu de données dans le descriptif PostgreSQL Si actif, la description du jeu de données renseignée dans les métadonnées sera copiée au début du descriptif PostgreSQL de la table/vue lors de la sauvegarde de la fiche. Attention : ceci a pour effet de supprimer toute autre information placée avant les métadonnées dans le descriptif PostgreSQL. QCheckBox False

Ces paramètres seront à passer en argument à l'initialisation de l'objet plume.pg.description.PgDescription.


from plume.pg.description import PgDescription

pg_description = PgDescription(
    raw_pg_description, clean=cleanPgDescription, copy_dct_title=copyDctTitleToPgDescription,
    copy_dct_description=copyDctDescriptionToPgDescription
)

cleanPgDescription peut prendre les valeurs suivantes :

Valeur Libellé
'never' Jamais
'first' À l'initialisation de la fiche
'always' Toujours
WREATCHED commented 1 year ago

y a pu qu'à

WREATCHED commented 1 year ago

IHM image

WREATCHED commented 1 year ago

image