Artelia / Mascaret

Pre and Post Processing for Mascaret
GNU General Public License v3.0
3 stars 3 forks source link

Pb de connexion dans le plugin #11

Closed alexisber closed 5 years ago

alexisber commented 5 years ago

Bonjour,

Je viens de passer de QGIS2.16 à 3.4 (selon des versions préconisées par le Ministere MTES).

Je dispose de postgres 9.5 Je dispose de postgis 2.2 Je parviens à installer le plugin v0.1.13 (en apparence tout va bien)

A priori, le chargement de couche postgis se passe bien depuis Qgis (ajouter une couche PostGIS)

Mais quand je cherche à me connecter à ma Database depuis le plugin... j'ai systématiquement "None" Ce qui me surprend, c'est que je me connecte correctement depuis Qgis mais le plugin ne se connecte pas.

"Created connection to mascaret database: mascaret@localhost Closing existing connection to mascaret@localhost Mascaret database Can not disconnect. There is no opened connection! mascaret None Created connection to mascaret database: mascaret@localhost Closing existing connection to mascaret@localhost Mascaret database Can not disconnect. There is no opened connection! mascaret"

Je ne peux donc ni importer, ni creer de modèle : _"There is no opened connection! Use "connect_pg" method before running query. Shema est ttt There is no opened connection! Use "connect_pg" method before running query. Can not disconnect. There is no opened connection! None There is no opened connection! Use "connect_pg" method before running query. Process aborted! There is no opened connection! Use "connect_pg" method before running query. Process aborted! There is no opened connection! Use "connect_pg" method before running query. Process aborted! There is no opened connection! Use "connectpg" method before running query."

alexisber commented 5 years ago

Bonjour,

Je ne parviens pas à débugger seul mon problème. Ce qui est très étrange, c'est que RiverGis fonctionne correctement. Il y a donc quelquechose qui ne passe pas dans mas_database.py par rapport à river_database.py ?

daoum commented 5 years ago

Bonjour, Comment avez vous installez le plugin ? A la première ouverture, vous devriez avoir simplement :

. Current projection is ---------------------------------------------------------------------------- Error: Can't connect to PostGIS database "Masplug". Created connection to mascaret database: Masplug@localhost Current projection is EPSG:4326

Si il essaie d'ouvrir un schéma existant est plante comme cela semble votre cas. Allez dans le menu help et cliquez sur Restore Default Option :

Help>Settings>Restore Default Option

Cela devrait éviter les erreurs de ce type :

_There is no opened connection! Use "connectpg" method before running query. Shema est ttt

Relancer le plugin et essayer après de vous connecter à votre base de données.

alexisber commented 5 years ago

Bonjour,

C'est la connexion même qu'il est impossible d'effectuer. Bizarre car ça fonctionne avec Rivergis.

alexisber commented 5 years ago

Version QGis 3.4 Version plugin (le dernier installé depuis le gestionnaire)

daoum commented 5 years ago

Avez vous bien ajouté une couche Postgis? et avais vous bien testé la connexion ?

alexisber commented 5 years ago

La connexion fonctionne. J'ai accès aux couches Postgis. Vraiment tout fonctionne sauf la connexion à la base via le Plugin. Je ne comprends pas pourquoi car RiverGis qui fonctionne à peu près sur le même modèle ne rencontre pas ce problème de connexion. N'y a t'il pas un problème de lecture d'un chemin avec Mascaret qu'il n'y a pas avec RiverGIS ? Je ne suis pas suffisamment au point sous python pour debugger une erreur qui vient vraisemblablement de mas_database.py

.

Current projection is

None Created connection to mascaret database: None@None

Current projection is EPSG:2154

Current projection is EPSG:2154 Closing existing connection to None@None Mascaret database Can not disconnect. There is no opened connection! MasPlug@localhost None Created connection to mascaret database: MasPlug@localhost

daoum commented 5 years ago

Avez-vous bien gardé en mémoire le mot de passe et le nom de l'utilisateur lors de l'ajout de la couche PostGis ? MasPLug est-elle bien la base de donnée que vous avez choisi dans liste déroulante DB Connection pour vos tentative de connexion? Je demande car je n'ai encore jamais vu de soucis de connexion à une base de donnée surtout en localhost si le mot de passe et le nom de l'utilisateur est sauvegardé .

Pour information, la connexion est géré seulement par la fonction connect_pg()dans mas_database.pyet les changement de connexion par la fonction connChanged() dans MascPlug_dialog.py où sont récupérer les informations de connexion. Vous pouvez ajouter un print(conn_params) dans la fonction connect_pg() pour voir si toutes les informations sont bien transmises.

alexisber commented 5 years ago

Bizarre. Normalement, user et password sont gardés en mémoire. Mais j'obtiens : Closing existing connection to None@None Mascaret database Can not disconnect. There is no opened connection! MasPlug@localhost None dbname=MasPlug host=localhost port=5432 user= password= Created connection to mascaret database: MasPlug@localhost

Sous RiverGis, j'obtiens Closing existing connection to MasPlug@localhost river database dbname=MasPlug host=localhost port=5432 user=postgres password=postgres Created connection to river database: MasPlug@localhost Current DB schema is: public River database is empty. Create or import your river network data.

daoum commented 5 years ago

La solution a été trouvé. Vous pouvez modifier dans la fonction connChanged() dans MascPlug_dialog.py en remplaçant:

        self.user = settings.value('username')
        self.passwd = settings.value('password')
        self.host = settings.value('host')
        self.port = settings.value('port')
        self.database = settings.value('database')

par

       authconf = settings.value('authcfg', None)
        if authconf:
            auth_manager = QgsApplication.authManager()
            conf = QgsAuthMethodConfig()
            auth_manager.loadAuthenticationConfig(authconf, conf, True)
            if conf.id():
                self.user = conf.config('username', '')
                self.passwd = conf.config('password', '')
        else:
            self.user = settings.value('username')
            self.passwd = settings.value('password')
        self.host = settings.value('host')
        self.port = settings.value('port')
        self.database = settings.value('database')

Cela devrait fonctionner, tenez moi au courant s'il y a encore un soucis. La correction sera prise en compte à la prochaine mise à jours que nous ferons la semaine prochaine.

alexisber commented 5 years ago

J'ai trouvé une manière détournée de résoudre le problème avec le code natif en forçant user et password dans mon fichier QGIS3.ini.

En changeant le code comme proposé, j'ai le problème ci-dessous :

2019-02-22T11:13:24 WARNING Traceback (most recent call last): File "C:\Program Files\QGIS 3.4\profiles\default/python/plugins\Mascaret\MascPlug.py", line 80, in run self.dlg = MascPlugDialog(self.iface) File "C:\Program Files\QGIS 3.4\profiles\default/python/plugins\Mascaret\MascPlug_dialog.py", line 128, in init self.connChanged() File "C:\Program Files\QGIS 3.4\profiles\default/python/plugins\Mascaret\MascPlug_dialog.py", line 296, in connChanged self.mdb = MasDatabase(self, self.database, self.host, self.port, self.user, self.passwd) File "C:\Program Files\QGIS 3.4\profiles\default/python/plugins\Mascaret\db\mas_database.py", line 62, in init authconf = settings.value('authcfg', None) NameError: name 'settings' is not defined

alexisber commented 5 years ago

OK. Problème résolu !!! Je n'avais pas inséré correctement le rectificatif du code. J'arrive maintenant à me connecter. Le ticket peut-être fermé.

Merci