Improve PostgreSQL error handling

Re-raise a DbConnectionError if the connection raises an error.
This commit is contained in:
Nick Hall 2017-09-23 21:24:54 +01:00
parent 0f9a6d57bf
commit 457722811d
3 changed files with 27 additions and 2 deletions

View File

@ -343,6 +343,23 @@ class PythonUpgradeRequiredError(Exception):
'db_python_version': self.db_python_version, 'db_python_version': self.db_python_version,
'current_python_version': self.current_python_version } 'current_python_version': self.current_python_version }
class DbConnectionError(Exception):
"""
Error used to report that a database connection failed.
"""
def __init__(self, msg, settings_file):
Exception.__init__(self)
self.msg = msg
self.settings_file = settings_file
def __str__(self):
return _('Database connection failed.\n\n'
'%(message)s\n'
'Please check your connection settings file:\n'
'%(settings_file)s') % {
'message': self.msg,
'settings_file': self.settings_file}
if __name__ == "__main__": if __name__ == "__main__":
""" """
Call this from the CLI (in order to find the imported modules): Call this from the CLI (in order to find the imported modules):

View File

@ -65,7 +65,8 @@ from gramps.gen.db.exceptions import (DbUpgradeRequiredError,
BsddbUpgradeRequiredError, BsddbUpgradeRequiredError,
BsddbDowngradeRequiredError, BsddbDowngradeRequiredError,
PythonUpgradeRequiredError, PythonUpgradeRequiredError,
PythonDowngradeError) PythonDowngradeError,
DbConnectionError)
from .pluginmanager import GuiPluginManager from .pluginmanager import GuiPluginManager
from .dialog import (DBErrorDialog, ErrorDialog, QuestionDialog2, from .dialog import (DBErrorDialog, ErrorDialog, QuestionDialog2,
WarningDialog) WarningDialog)
@ -278,6 +279,9 @@ class DbLoader(CLIDbLoader):
except PythonDowngradeError as msg: except PythonDowngradeError as msg:
self.dbstate.no_database() self.dbstate.no_database()
self._warn( _("Cannot open database"), str(msg)) self._warn( _("Cannot open database"), str(msg))
except DbConnectionError as msg:
self.dbstate.no_database()
self._warn(_("Cannot open database"), str(msg))
except OSError as msg: except OSError as msg:
self.dbstate.no_database() self.dbstate.no_database()
self._errordialog( self._errordialog(

View File

@ -41,6 +41,7 @@ from gramps.plugins.db.dbapi.dbapi import DBAPI
from gramps.gen.utils.configmanager import ConfigManager from gramps.gen.utils.configmanager import ConfigManager
from gramps.gen.config import config from gramps.gen.config import config
from gramps.gen.db.dbconst import ARRAYSIZE from gramps.gen.db.dbconst import ARRAYSIZE
from gramps.gen.db.exceptions import DbConnectionError
from gramps.gen.const import GRAMPS_LOCALE as glocale from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext _ = glocale.translation.gettext
@ -91,7 +92,10 @@ class PostgreSQL(DBAPI):
for key in config_mgr.get_section_settings('database'): for key in config_mgr.get_section_settings('database'):
dbkwargs[key] = config_mgr.get('database.' + key) dbkwargs[key] = config_mgr.get('database.' + key)
self.dbapi = Connection(**dbkwargs) try:
self.dbapi = Connection(**dbkwargs)
except psycopg2.OperationalError as msg:
raise DbConnectionError(str(msg), config_file)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------