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

Contrôle de la version de PlumePg et des droits sur ses objets #49

Closed alhyss closed 2 years ago

alhyss commented 2 years ago

La prochaine version de Plume va aller de paire avec une nouvelle version de PlumePg et ne sera pas compatible avec les versions antérieures.

Pour l'heure, Plume se contente de vérifier que PlumePg est installée avant d'aller récupérer ses modèles, mais il faudra dorénavant vérifier aussi que la version installée est compatible avec la version de Plume dont dispose l'utilisateur.

Il y a aura clairement une condition du type "version de PlumePg supérieure ou égale à la version de référence x.x.x", mais je pense aussi qu'on aurait intérêt à fixer une borne supérieure, car je ne suis pas sûre qu'on sera toujours capable de garantir la rétro-compatibilité.

Par ailleurs, il serait utile de vérifier également si l'utilisateur a bien les droits nécessaires sur les objets de l'extension : USAGE sur le schéma et SELECT sur les tables et vues. Si Asgard était actif sur la base au moment de l'activation de PlumePg, c'est normalement le cas, mais Asgard n'est pas présent sur toutes les bases... Il me semblerait plus propre d'en rester aux modèles locaux quand l'utilisateur n'a pas accès aux données, plutôt que d'avoir le genre d'erreur que j'ai eu lors de la démonstration. D'autant que, en pratique, une telle erreur empêcherait l'utilisateur de se servir de Plume jusqu'à ce qu'une personne habilitée lui donne les droits.

Bref, je vais préparer une requête qui réalise tous ces tests.

alhyss commented 2 years ago

Il faut maintenant utiliser plume.pg.queries.query_plume_pg_check au lieu de plume.pg.queries.query_exists_extension pour générer la requête qui détermine s'il faut tenter d'importer les modèles depuis la base ou se contenter des modèles locaux.

Ça concerne donc plume.plume_ui.Ui_Dialog_plume.displayToolBar.

plume.pg.queries.query_plume_pg_check ne renvoie plus seulement un booléen, mais un tuple de valeurs. La première est toujours un booléen. Comme avant, si c'est True on continue et on va chercher les modèles sur le serveur, si c'est False il faudra se contenter des modèles locaux. Les valeurs suivantes permettent d'expliquer d'où vient le problème et pourraient être utilisées pour l'infobulle sur le bouton de sélection du modèle.

Plus de détails dans la documentation technique.

WREATCHED commented 2 years ago

Réponse image

Ok / Ko ?

WREATCHED commented 2 years ago

image

alhyss commented 2 years ago

Peut-être encore plus explicite, en ajoutant "Vous n'avez accès qu'aux modèles pré-configurés standards." au début du nota bene ? Accessoirement, est-ce que ce serait possible d'avoir le paragraphe du nota bene en italique, pour bien le distinguer de la description de l'effet du bouton ?

Par ailleurs, ta seconde capture d'écran de l'avant-dernier message - celle avec "Votre version de Plume est incompatible avec PlumePg < 0.1.0 ou ≥ 1.0.0 (version base cible : PlumePg 0.1.0)." - n'est pas logique, puisque la version 0.1.0 est supposée compatible dans ce cas. Tu me confirmes que tu as bien bricolé pour faire apparaître le message dans une situation où il n'est pas censé être présent, juste pour voir le résultat ?

WREATCHED commented 2 years ago

euh ça commence par c et se termine par un e Réponse 1 pas possible 😄 image Réponse 2 Oui, je te l'ai dit ce matin, je n'avais pas fait le if not result[0]: if not result[3]: patati, patata

alhyss commented 2 years ago

Je viens de tester avec PlumePg 0.0.1, qui n'est donc plus compatible avec la v0.4 bêta, et le texte est tronqué au milieu d'une phrase :

compatibilite_plume_pg

Le caractère suivant est <, qui ne passe pas évidemment pas en HTML...

Tu voudras peut-être le gérer autrement, mais j'ai pu confirmer que le texte s'affiche correctement en échappant la variable pb de plume.plume_ui.Ui_Dialog_plume.displayToolBar, soit en remplaçant ça :

mTextToolTip += "<br><br><i>NB : Vous n'avez accès qu'aux modèles pré-configurés standards. "  + pb + "</i>"

par ça :

mTextToolTip += "<br><br><i>NB : Vous n'avez accès qu'aux modèles pré-configurés standards. " \
    + escape(pb) + "</i>"

Avec l'import suivant dans l'en-tête :

from html import escape