]> git.openstreetmap.org Git - nominatim.git/commitdiff
add function to get a DSN for psycopg
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 17 Jan 2021 16:06:18 +0000 (17:06 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Mon, 18 Jan 2021 14:43:27 +0000 (15:43 +0100)
Converts the PHP DSN syntax into psycopg syntax when necessary.

nominatim/config.py
test/python/test_config.py

index 911c7ddf127f68f438ab582c75fa38d5ed469dd8..458c828f58fce8adeda02fd550823641366ceb2c 100644 (file)
@@ -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.
index 03e4a800afa07eafe46d415ba51c0b5b415d891c..e5d18f91f392218b3ea9dc5b360439e6f936a9a6 100644 (file)
@@ -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'