Skip to content

Commit f71a63f

Browse files
committed
Filter SQL connection options
Prevent passing dict to SQL connection which throws an error because it cannot be cached
1 parent ddb1ba2 commit f71a63f

File tree

2 files changed

+11
-17
lines changed

2 files changed

+11
-17
lines changed

pygeoapi/provider/mvt_postgresql.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#
3434
# =================================================================
3535

36-
from copy import deepcopy
3736
import logging
3837

3938
from sqlalchemy.sql import func, select
@@ -64,11 +63,7 @@ def __init__(self, provider_def):
6463
6564
:returns: pygeoapi.provider.MVT.MVTPostgreSQLProvider
6665
"""
67-
pg_def = deepcopy(provider_def)
68-
# delete the zoom option before initializing the PostgreSQL provider
69-
# that provider breaks otherwise
70-
del pg_def['options']['zoom']
71-
PostgreSQLProvider.__init__(self, pg_def)
66+
PostgreSQLProvider.__init__(self, provider_def)
7267
BaseMVTProvider.__init__(self, provider_def)
7368

7469
def get_fields(self):

pygeoapi/provider/sql.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def __init__(
107107
self,
108108
provider_def: dict,
109109
driver_name: str,
110-
extra_conn_args: Optional[dict]
110+
extra_conn_args: Optional[dict] = {}
111111
):
112112
"""
113113
GenericSQLProvider Class constructor
@@ -143,9 +143,7 @@ def __init__(
143143
LOGGER.debug(f'Configured Storage CRS: {self.storage_crs}')
144144

145145
# Read table information from database
146-
options = None
147-
if provider_def.get('options'):
148-
options = provider_def['options']
146+
options = provider_def.get('options', {})
149147
self._store_db_parameters(provider_def['data'], options)
150148
self._engine = get_engine(
151149
driver_name,
@@ -154,7 +152,7 @@ def __init__(
154152
self.db_name,
155153
self.db_user,
156154
self._db_password,
157-
**(self.db_options or {}) | (extra_conn_args or {})
155+
**self.db_options | extra_conn_args
158156
)
159157
self.table_model = get_table_model(
160158
self.table, self.id_field, self.db_search_path, self._engine
@@ -443,7 +441,11 @@ def _store_db_parameters(self, parameters, options):
443441
# reflecting the table definition from the DB
444442
self.db_search_path = tuple(parameters.get('search_path', ['public']))
445443
self._db_password = parameters.get('password')
446-
self.db_options = options
444+
self.db_options = {
445+
k: v
446+
for k, v in options.items()
447+
if not isinstance(v, dict)
448+
}
447449

448450
def _sqlalchemy_to_feature(self, item, crs_transform_out=None):
449451
feature = {'type': 'Feature'}
@@ -608,7 +610,7 @@ def get_engine(
608610
database: str,
609611
user: str,
610612
password: str,
611-
**connection_options
613+
**connect_args
612614
):
613615
"""Create SQL Alchemy engine."""
614616
conn_str = URL.create(
@@ -619,11 +621,8 @@ def get_engine(
619621
port=int(port),
620622
database=database
621623
)
622-
conn_args = {
623-
**connection_options
624-
}
625624
engine = create_engine(
626-
conn_str, connect_args=conn_args, pool_pre_ping=True
625+
conn_str, connect_args=connect_args, pool_pre_ping=True
627626
)
628627
return engine
629628

0 commit comments

Comments
 (0)