From b79c79fa730621140003690966f95de9704d3318 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Sun, 17 Jan 2021 17:06:18 +0100 Subject: [PATCH] add function to get a DSN for psycopg Converts the PHP DSN syntax into psycopg syntax when necessary. --- nominatim/config.py | 12 ++++++++++++ test/python/test_config.py | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/nominatim/config.py b/nominatim/config.py index 911c7ddf..458c828f 100644 --- a/nominatim/config.py +++ b/nominatim/config.py @@ -29,6 +29,18 @@ class Configuration: return os.environ.get(name) or self._config[name] + def get_libpq_dsn(self): + """ Get configured database DSN converted into the key/value format + understood by libpq and psycopg. + """ + dsn = self.DATABASE_DSN + + if dsn.startswith('pgsql:'): + # Old PHP DSN format. Convert before returning. + return dsn[6:].replace(';', ' ') + + return dsn + def get_os_env(self): """ Return a copy of the OS environment with the Nominatim configuration merged in. diff --git a/test/python/test_config.py b/test/python/test_config.py index 03e4a800..e5d18f91 100644 --- a/test/python/test_config.py +++ b/test/python/test_config.py @@ -54,3 +54,22 @@ def test_get_os_env_prefer_os_environ(): assert config.get_os_env()['NOMINATIM_DATABASE_WEBUSER'] == 'nobody' del os.environ['NOMINATIM_DATABASE_WEBUSER'] + +def test_get_libpq_dsn_convert_default(): + config = Configuration(None, DEFCFG_DIR) + + assert config.get_libpq_dsn() == 'dbname=nominatim' + +def test_get_libpq_dsn_convert_php(): + config = Configuration(None, DEFCFG_DIR) + + os.environ['NOMINATIM_DATABASE_DSN'] = 'pgsql:dbname=gis;password=foo;host=localhost' + + assert config.get_libpq_dsn() == 'dbname=gis password=foo host=localhost' + +def test_get_libpq_dsn_convert_libpq(): + config = Configuration(None, DEFCFG_DIR) + + os.environ['NOMINATIM_DATABASE_DSN'] = 'host=localhost dbname=gis password=foo' + + assert config.get_libpq_dsn() == 'host=localhost dbname=gis password=foo' -- 2.39.5