Skip to content

Commit d09a88d

Browse files
authored
fix: add bind_key parameter support to all adapter configurations (#89)
Fixes the missing `bind_key` parameter support across all database adapter configurations ### Backward Compatibility ✅ **Existing code continues to work unchanged**: ```python # Existing code (no bind_key) - defaults to None config = AiosqliteConfig(pool_config={"database": ":memory:"}) assert config.bind_key is None # New CLI code (explicit bind_key) config = AiosqliteConfig( pool_config={"database": ":memory:"}, bind_key="my_database" ) assert config.bind_key == "my_database" ``` Fixes CLI configuration loading and ensures consistent `bind_key` support across all database adapters as part of the configuration protocol.
1 parent 89fdd7b commit d09a88d

File tree

23 files changed

+1664
-41
lines changed

23 files changed

+1664
-41
lines changed

pyproject.toml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ extras = [
9191
"adbc_driver_postgresql",
9292
"adbc_driver_flightsql",
9393
"adbc_driver_bigquery",
94+
"dishka ; python_version >= \"3.10\"",
9495
]
9596
lint = [
9697
"mypy>=1.13.0",
@@ -162,11 +163,11 @@ include = [
162163
"sqlspec/loader.py", # Loader module
163164

164165
# === ADAPTER TYPE CONVERTERS ===
165-
"sqlspec/adapters/adbc/type_converter.py", # ADBC type converter
166-
"sqlspec/adapters/bigquery/type_converter.py", # BigQuery type converter
167-
"sqlspec/adapters/duckdb/type_converter.py", # DuckDB type converter
168-
"sqlspec/adapters/oracledb/type_converter.py", # Oracle type converter
169-
"sqlspec/adapters/psqlpy/type_converter.py", # Psqlpy type converter
166+
"sqlspec/adapters/adbc/type_converter.py", # ADBC type converter
167+
"sqlspec/adapters/bigquery/type_converter.py", # BigQuery type converter
168+
"sqlspec/adapters/duckdb/type_converter.py", # DuckDB type converter
169+
"sqlspec/adapters/oracledb/type_converter.py", # Oracle type converter
170+
"sqlspec/adapters/psqlpy/type_converter.py", # Psqlpy type converter
170171

171172
# === UTILITY MODULES ===
172173
"sqlspec/utils/text.py", # Text utilities

sqlspec/adapters/adbc/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def __init__(
7777
migration_config: Optional[dict[str, Any]] = None,
7878
statement_config: Optional[StatementConfig] = None,
7979
driver_features: Optional[dict[str, Any]] = None,
80+
bind_key: Optional[str] = None,
8081
) -> None:
8182
"""Initialize configuration.
8283
@@ -85,6 +86,7 @@ def __init__(
8586
migration_config: Migration configuration
8687
statement_config: Default SQL statement configuration
8788
driver_features: Driver feature configuration
89+
bind_key: Optional unique identifier for this configuration
8890
"""
8991
if connection_config is None:
9092
connection_config = {}
@@ -104,6 +106,7 @@ def __init__(
104106
migration_config=migration_config,
105107
statement_config=statement_config,
106108
driver_features=driver_features or {},
109+
bind_key=bind_key,
107110
)
108111

109112
def _resolve_driver_name(self) -> str:

sqlspec/adapters/aiosqlite/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def __init__(
6262
migration_config: "Optional[dict[str, Any]]" = None,
6363
statement_config: "Optional[StatementConfig]" = None,
6464
driver_features: "Optional[dict[str, Any]]" = None,
65+
bind_key: "Optional[str]" = None,
6566
) -> None:
6667
"""Initialize AioSQLite configuration.
6768
@@ -71,6 +72,7 @@ def __init__(
7172
migration_config: Optional migration configuration.
7273
statement_config: Optional statement configuration.
7374
driver_features: Optional driver feature configuration.
75+
bind_key: Optional unique identifier for this configuration.
7476
"""
7577
config_dict = dict(pool_config) if pool_config else {}
7678

@@ -84,6 +86,7 @@ def __init__(
8486
migration_config=migration_config,
8587
statement_config=statement_config or aiosqlite_statement_config,
8688
driver_features=driver_features or {},
89+
bind_key=bind_key,
8790
)
8891

8992
def _get_pool_config_dict(self) -> "dict[str, Any]":

sqlspec/adapters/asyncmy/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def __init__(
7171
migration_config: Optional[dict[str, Any]] = None,
7272
statement_config: "Optional[StatementConfig]" = None,
7373
driver_features: "Optional[dict[str, Any]]" = None,
74+
bind_key: "Optional[str]" = None,
7475
) -> None:
7576
"""Initialize Asyncmy configuration.
7677
@@ -80,6 +81,7 @@ def __init__(
8081
migration_config: Migration configuration
8182
statement_config: Statement configuration override
8283
driver_features: Driver feature configuration
84+
bind_key: Optional unique identifier for this configuration
8385
"""
8486
processed_pool_config: dict[str, Any] = dict(pool_config) if pool_config else {}
8587
if "extra" in processed_pool_config:
@@ -100,6 +102,7 @@ def __init__(
100102
migration_config=migration_config,
101103
statement_config=statement_config,
102104
driver_features=driver_features or {},
105+
bind_key=bind_key,
103106
)
104107

105108
async def _create_pool(self) -> "AsyncmyPool": # pyright: ignore

sqlspec/adapters/asyncmy/driver.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
from typing import TYPE_CHECKING, Any, Optional, Union
99

1010
import asyncmy
11-
import asyncmy.errors
12-
from asyncmy.cursors import Cursor, DictCursor
11+
import asyncmy.errors # pyright: ignore
12+
from asyncmy.cursors import Cursor, DictCursor # pyright: ignore
1313

1414
from sqlspec.core.cache import get_cache_config
1515
from sqlspec.core.parameters import ParameterStyle, ParameterStyleConfig

sqlspec/adapters/asyncpg/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def __init__(
8484
migration_config: "Optional[dict[str, Any]]" = None,
8585
statement_config: "Optional[StatementConfig]" = None,
8686
driver_features: "Optional[Union[AsyncpgDriverFeatures, dict[str, Any]]]" = None,
87+
bind_key: "Optional[str]" = None,
8788
) -> None:
8889
"""Initialize AsyncPG configuration.
8990
@@ -93,6 +94,7 @@ def __init__(
9394
migration_config: Migration configuration
9495
statement_config: Statement configuration override
9596
driver_features: Driver features configuration (TypedDict or dict)
97+
bind_key: Optional unique identifier for this configuration
9698
"""
9799
features_dict: dict[str, Any] = dict(driver_features) if driver_features else {}
98100

@@ -106,6 +108,7 @@ def __init__(
106108
migration_config=migration_config,
107109
statement_config=statement_config or asyncpg_statement_config,
108110
driver_features=features_dict,
111+
bind_key=bind_key,
109112
)
110113

111114
def _get_pool_config_dict(self) -> "dict[str, Any]":

sqlspec/adapters/bigquery/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ def __init__(
9494
migration_config: Optional[dict[str, Any]] = None,
9595
statement_config: "Optional[StatementConfig]" = None,
9696
driver_features: "Optional[Union[BigQueryDriverFeatures, dict[str, Any]]]" = None,
97+
bind_key: "Optional[str]" = None,
9798
) -> None:
9899
"""Initialize BigQuery configuration.
99100
@@ -102,6 +103,7 @@ def __init__(
102103
migration_config: Migration configuration
103104
statement_config: Statement configuration override
104105
driver_features: BigQuery-specific driver features
106+
bind_key: Optional unique identifier for this configuration
105107
"""
106108

107109
self.connection_config: dict[str, Any] = dict(connection_config) if connection_config else {}
@@ -124,6 +126,7 @@ def __init__(
124126
migration_config=migration_config,
125127
statement_config=statement_config,
126128
driver_features=self.driver_features,
129+
bind_key=bind_key,
127130
)
128131

129132
def _setup_default_job_config(self) -> None:

sqlspec/adapters/duckdb/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ def __init__(
149149
migration_config: Optional[dict[str, Any]] = None,
150150
statement_config: "Optional[StatementConfig]" = None,
151151
driver_features: "Optional[Union[DuckDBDriverFeatures, dict[str, Any]]]" = None,
152+
bind_key: "Optional[str]" = None,
152153
) -> None:
153154
"""Initialize DuckDB configuration."""
154155
if pool_config is None:
@@ -160,6 +161,7 @@ def __init__(
160161
pool_config["database"] = ":memory:shared_db"
161162

162163
super().__init__(
164+
bind_key=bind_key,
163165
pool_config=dict(pool_config),
164166
pool_instance=pool_instance,
165167
migration_config=migration_config,

sqlspec/adapters/oracledb/config.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ def __init__(
9494
migration_config: Optional[dict[str, Any]] = None,
9595
statement_config: "Optional[StatementConfig]" = None,
9696
driver_features: "Optional[dict[str, Any]]" = None,
97+
bind_key: "Optional[str]" = None,
9798
) -> None:
9899
"""Initialize Oracle synchronous configuration.
99100
@@ -103,6 +104,7 @@ def __init__(
103104
migration_config: Migration configuration
104105
statement_config: Default SQL statement configuration
105106
driver_features: Optional driver feature configuration
107+
bind_key: Optional unique identifier for this configuration
106108
"""
107109

108110
processed_pool_config: dict[str, Any] = dict(pool_config) if pool_config else {}
@@ -116,6 +118,7 @@ def __init__(
116118
migration_config=migration_config,
117119
statement_config=statement_config,
118120
driver_features=driver_features or {},
121+
bind_key=bind_key,
119122
)
120123

121124
def _create_pool(self) -> "OracleSyncConnectionPool":
@@ -220,6 +223,7 @@ def __init__(
220223
migration_config: Optional[dict[str, Any]] = None,
221224
statement_config: "Optional[StatementConfig]" = None,
222225
driver_features: "Optional[dict[str, Any]]" = None,
226+
bind_key: "Optional[str]" = None,
223227
) -> None:
224228
"""Initialize Oracle asynchronous configuration.
225229
@@ -229,6 +233,7 @@ def __init__(
229233
migration_config: Migration configuration
230234
statement_config: Default SQL statement configuration
231235
driver_features: Optional driver feature configuration
236+
bind_key: Optional unique identifier for this configuration
232237
"""
233238

234239
processed_pool_config: dict[str, Any] = dict(pool_config) if pool_config else {}
@@ -242,6 +247,7 @@ def __init__(
242247
migration_config=migration_config,
243248
statement_config=statement_config or oracledb_statement_config,
244249
driver_features=driver_features or {},
250+
bind_key=bind_key,
245251
)
246252

247253
async def _create_pool(self) -> "OracleAsyncConnectionPool":

sqlspec/adapters/psqlpy/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def __init__(
9090
migration_config: Optional[dict[str, Any]] = None,
9191
statement_config: Optional[StatementConfig] = None,
9292
driver_features: Optional[dict[str, Any]] = None,
93+
bind_key: Optional[str] = None,
9394
) -> None:
9495
"""Initialize Psqlpy configuration.
9596
@@ -99,6 +100,7 @@ def __init__(
99100
migration_config: Migration configuration
100101
statement_config: SQL statement configuration
101102
driver_features: Driver feature configuration
103+
bind_key: Optional unique identifier for this configuration
102104
"""
103105
processed_pool_config: dict[str, Any] = dict(pool_config) if pool_config else {}
104106
if "extra" in processed_pool_config:
@@ -110,6 +112,7 @@ def __init__(
110112
migration_config=migration_config,
111113
statement_config=statement_config or psqlpy_statement_config,
112114
driver_features=driver_features or {},
115+
bind_key=bind_key,
113116
)
114117

115118
def _get_pool_config_dict(self) -> dict[str, Any]:

0 commit comments

Comments
 (0)