diff --git a/src/opengeo/gui/dialogs/pgconnectiondialog.py b/src/opengeo/gui/dialogs/pgconnectiondialog.py index 53acffa..ca85a49 100644 --- a/src/opengeo/gui/dialogs/pgconnectiondialog.py +++ b/src/opengeo/gui/dialogs/pgconnectiondialog.py @@ -98,10 +98,15 @@ def setupUi(self): horizontalLayout.addWidget(passwordLabel) horizontalLayout.addWidget(self.passwordBox) self.verticalLayout.addLayout(horizontalLayout) + + horizontalLayout = QHBoxLayout() + self.statusLabel = QLabel('') + horizontalLayout.addWidget(self.statusLabel) + self.verticalLayout.addLayout(horizontalLayout) self.groupBox.setLayout(self.verticalLayout) self.layout.addWidget(self.groupBox) - self.spacer = QSpacerItem(20,20, QSizePolicy.Minimum,QSizePolicy.Expanding) + self.spacer = QSpacerItem(20,10, QSizePolicy.Minimum,QSizePolicy.Expanding) self.layout.addItem(self.spacer) self.buttonBox = QDialogButtonBox(self) @@ -146,6 +151,8 @@ def accept(self): settings.setValue("database", self.databaseBox.text() ); settings.setValue("username", self.usernameBox.text()); settings.setValue("password", self.passwordBox.text()); + self.statusLabel.setText('Connecting ...') + QApplication.processEvents() self.conn = PgConnection(self.nameBox.text(), settings.value('host'), int(settings.value('port')), settings.value('database'), settings.value('username'), settings.value('password')) diff --git a/src/opengeo/gui/pgexploreritems.py b/src/opengeo/gui/pgexploreritems.py index 167f797..9aca046 100644 --- a/src/opengeo/gui/pgexploreritems.py +++ b/src/opengeo/gui/pgexploreritems.py @@ -128,8 +128,12 @@ def contextMenuActions(self, tree, explorer): return actions def _getDescriptionHtml(self, tree, explorer): - if not self.element.isValid: - html = ('
Cannot connect to this database. This might be caused by missing user/passwd credentials.'
+ if not self.element.isValid:
+ if self.element.connectionFailureMessage:
+ msg = self.element.connectionFailureMessage.replace('\n','
')
+ html = '
There was an error connecting to the database:
%s
' % msg + else: + html = ('Cannot connect to this database. This might be caused by missing user/passwd credentials.' 'Try refreshing the connection, to enter new credentials and retry to connect
') return html else: diff --git a/src/opengeo/postgis/connection.py b/src/opengeo/postgis/connection.py index 5ccc11e..a3db5a9 100644 --- a/src/opengeo/postgis/connection.py +++ b/src/opengeo/postgis/connection.py @@ -1,4 +1,4 @@ -from postgis_utils import GeoDB +from postgis_utils import GeoDB, DbError from schema import Schema from qgis.core import * from PyQt4 import QtCore @@ -9,17 +9,26 @@ class PgConnection(object): def __init__(self, name, host, port, database, username, password): - self.name = name + self.name = name self.host = host self.port = port - self.database = database + self.database = database + self.connectionFailureMessage = None + self.isValid = False try: self.geodb = GeoDB(host, port, database, username, password) - self.isValid = True - self.username = username - self.password = password - except: - self.isValid = False + except DbError, ex: + self.connectionFailureMessage = str(ex) + else: + try: + self.geodb._exec_sql_and_commit('select * from postgis_version()') + self.isValid = True + self.username = username + self.password = password + except DbError, ex: + self.connectionFailureMessage = 'It appears that the PostGIS '\ + 'extensions are not loaded in the database.