Closed alhyss closed 1 year 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).
@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 . 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
.
Mes remarques
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.
Discussion With Leslie Pour la version 1.0
Leslie prévoit aussi deux autres traitements à réaliser
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 |
y a pu qu'à
IHM
À 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 :
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.'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
, 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.