Skip to content

Commit 174df9e

Browse files
authored
Merge pull request #1161 from roj516/roj516/fix_avoid_mutations
fix: avoid mutating caller's connect args (don't accumulate user_agents)
2 parents f9d5911 + eca1dba commit 174df9e

2 files changed

Lines changed: 7 additions & 4 deletions

File tree

duckdb_engine/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,8 @@ def type_descriptor(self, typeobj: Type[sqltypes.TypeEngine]) -> Any: # type: i
261261
def connect(self, *cargs: Any, **cparams: Any) -> "Connection":
262262
core_keys = get_core_config()
263263
preload_extensions = cparams.pop("preload_extensions", [])
264-
config = cparams.setdefault("config", {})
264+
config = dict(cparams.get("config", {}))
265+
cparams["config"] = config
265266
config.update(cparams.pop("url_config", {}))
266267

267268
ext = {k: config.pop(k) for k in list(config) if k not in core_keys}

duckdb_engine/tests/test_basic.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -539,9 +539,8 @@ def test_user_agent() -> None:
539539
reason="custom_user_agent is not supported for DuckDB version < 0.9.2",
540540
)
541541
def test_user_agent_with_custom_user_agent() -> None:
542-
eng = create_engine(
543-
"duckdb:///:memory:", connect_args={"config": {"custom_user_agent": "custom"}}
544-
)
542+
connect_args = {"config": {"custom_user_agent": "custom"}}
543+
eng = create_engine("duckdb:///:memory:", connect_args=connect_args)
545544

546545
with eng.connect() as conn:
547546
res = conn.execute(text("PRAGMA USER_AGENT"))
@@ -551,6 +550,9 @@ def test_user_agent_with_custom_user_agent() -> None:
551550
r"duckdb/.*(.*) python duckdb_engine/.*(sqlalchemy/.*) custom", row[0]
552551
)
553552

553+
# Check that connect hasn't mutated the caller's data.
554+
assert connect_args["config"]["custom_user_agent"] == "custom"
555+
554556

555557
def test_do_ping(tmp_path: Path, caplog: LogCaptureFixture) -> None:
556558
engine = create_engine(

0 commit comments

Comments
 (0)