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

List index out of range #71

Closed dicorynia closed 2 years ago

dicorynia commented 2 years ago

Installation ok (0.4 beta). Mais à la première utilisation quand je clique sur une couche depuis l'explorateur j'ai un message d'erreur List index out of range et rien ne s'affiche dans le panneau.

image

WREATCHED commented 2 years ago

Cette erreur est tjs sur cette couche ? Si tu fermes Plume et réouvre, le pb existe-t-il tjs ? Si cette couche pose pb tu peux nous l'envoyer ? Merci

dicorynia commented 2 years ago

Je suis en QGIS 3.22-6

alhyss commented 2 years ago

Après investigation avec @WREATCHED et @dicorynia , le problème semble disparaître en remplaçant les lignes suivantes de la définition de plume.plum_ui.Ui_Dialog_plume.safe_pg_connection :

        if not getattr(self, 'mConnectEnCours', False) or self.mConnectEnCours.closed:
           self.getAllFromUri()

par :

        self.getAllFromUri()

La correction ne pose théoriquement pas de difficulté, puisqu'aucune connexion ne devrait jamais être ouverte hors du gestionnaire de contexte. Mais cela signifie que la condition devrait toujours être remplie, ce qui n'est semble-t-il pas le cas.

La cause reste à identifier.

alhyss commented 2 years ago

Le problème n'avait finalement rien à voir avec la ligne susmentionnée de plume.plum_ui.Ui_Dialog_plume.safe_pg_connection, il avait été "résolu" lors des tests d'hier par la mise à disposition parallèle des fichiers de l'extension sur le serveur PostgreSQL considéré. C'est leur absence qui provoquait le problème.

L'erreur apparaissait dans plume.plum_ui.Ui_Dialog_plume.displayToolBar (ligne 885), lorsque Plume contrôle la présence de l'extension PlumePg sur la base cible. La variable r se trouvait être une liste vide lorsque les fichiers de l'extension n'étaient pas disponibles sur le serveur, r[0] provoquait donc une erreur.

En cause, la fonction plume.pg.queries.query_plume_pg_check, qui aurait dû renvoyer un enregistrement dans ce cas également, avec False comme première valeur (PlumePg n'est pas active sur la base cible) et None comme quatrième valeur (pas de version de référence pour l'extension, puisqu'elle n'est pas disponible sur le serveur).

alhyss commented 2 years ago

La fonction plume.pg.queries.query_plume_pg_check est corrigée pour la version corrective v0.4.1 bêta.

J'ai contrôlé ça de manière assez basique, en testant sur mon serveur PostgreSQL 9.5 (sur lequel PlumePg n'était évidemment pas disponible, et j'y reproduisais bien l'erreur). Accessoirement, cela m'aura permis d'identifier un autre problème qui faisait échouer cette fonction avec PostgreSQL 9.5 (cast manquant sur les paramètres de type int[] et, par sécurité, j'en ai mis sur tous).