From 59cb0d6496c8f5a099add568181a1df1603caf72 Mon Sep 17 00:00:00 2001 From: doublebyte Date: Tue, 29 Sep 2026 19:45:06 +0100 Subject: [PATCH 1/4] - added check in ci for psycopg version --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0be02bb82..7b644848c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -131,6 +131,9 @@ jobs: pip3 install . pip3 install GDAL==`gdal-config --version` pip3 install "pyproj<3.8" + + - run: pip3 list | grep -i -E "sqlalchemy|psycopg" + - name: setup test data ⚙️ run: | pybabel compile -d locale -l es From 9a0332391005d9971756f67cca1e5ace700c947c Mon Sep 17 00:00:00 2001 From: doublebyte Date: Tue, 29 Sep 2026 20:20:46 +0100 Subject: [PATCH 2/4] - when a connection string is provided, switch to use the backend driver instead of sqalchemy's default --- pygeoapi/provider/sql.py | 6 ++++++ tests/provider/test_postgresql_provider.py | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/pygeoapi/provider/sql.py b/pygeoapi/provider/sql.py index 121f48ac2..7a955eee4 100644 --- a/pygeoapi/provider/sql.py +++ b/pygeoapi/provider/sql.py @@ -71,6 +71,7 @@ from sqlalchemy.orm import Session, load_only from sqlalchemy.sql.expression import and_ from sqlalchemy.schema import Table +from sqlalchemy.engine import make_url from pygeoapi.crs import get_transform_from_spec, get_srid from pygeoapi.provider.base import ( @@ -679,6 +680,11 @@ def get_engine( port=int(port), database=database ) + else: + url = make_url(conn_str) + if url.drivername == url.get_backend_name(): + url = url.set(drivername=driver_name) + conn_str = url # Separate connection-pool tuning from DBAPI connect args. Pool keys are # applied to create_engine() directly; everything left in connect_args is diff --git a/tests/provider/test_postgresql_provider.py b/tests/provider/test_postgresql_provider.py index 06c88ce1d..3b85860d3 100644 --- a/tests/provider/test_postgresql_provider.py +++ b/tests/provider/test_postgresql_provider.py @@ -1010,3 +1010,10 @@ def test_provider_count_false_with_resulttype_hits(config): # Assert assert results['numberMatched'] == 14776 + +def test_get_engine_use_provider_driver(): + engine = postgresql_provider_module.get_engine( + 'postgresql+psycopg2', 'host', '5432', 'db', 'user', 'password', + 'postgresql://user:password@host:5432/db' + ) + assert engine.dialect.driver == 'psycopg2' \ No newline at end of file From 13ca21901e23ac8c12c317b47bc9c7452bd8d170 Mon Sep 17 00:00:00 2001 From: doublebyte Date: Tue, 29 Sep 2026 20:37:00 +0100 Subject: [PATCH 3/4] - removed CI check --- .github/workflows/main.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7b644848c..0be02bb82 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -131,9 +131,6 @@ jobs: pip3 install . pip3 install GDAL==`gdal-config --version` pip3 install "pyproj<3.8" - - - run: pip3 list | grep -i -E "sqlalchemy|psycopg" - - name: setup test data ⚙️ run: | pybabel compile -d locale -l es From c45e3d4c6fbbd99540d704464ef7ea9a9a0ef630 Mon Sep 17 00:00:00 2001 From: doublebyte Date: Tue, 29 Sep 2026 20:55:11 +0100 Subject: [PATCH 4/4] - fixed flake8 errors --- tests/provider/test_postgresql_provider.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/provider/test_postgresql_provider.py b/tests/provider/test_postgresql_provider.py index 3b85860d3..3280534b0 100644 --- a/tests/provider/test_postgresql_provider.py +++ b/tests/provider/test_postgresql_provider.py @@ -1011,9 +1011,10 @@ def test_provider_count_false_with_resulttype_hits(config): # Assert assert results['numberMatched'] == 14776 + def test_get_engine_use_provider_driver(): engine = postgresql_provider_module.get_engine( 'postgresql+psycopg2', 'host', '5432', 'db', 'user', 'password', 'postgresql://user:password@host:5432/db' ) - assert engine.dialect.driver == 'psycopg2' \ No newline at end of file + assert engine.dialect.driver == 'psycopg2'