This is an automated email from the ASF dual-hosted git repository.
gopidesu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 539d8cfc9cd Fix Task SDK Connection extras from URI constructor
(#64120)
539d8cfc9cd is described below
commit 539d8cfc9cdc361f7a04c6b56be26cbb40fe4dd1
Author: GPK <[email protected]>
AuthorDate: Tue Mar 24 17:37:32 2026 +0000
Fix Task SDK Connection extras from URI constructor (#64120)
* Fix Task SDK Connection extras from URI constructor
* Update tests
---
task-sdk/src/airflow/sdk/definitions/connection.py | 2 +-
task-sdk/tests/task_sdk/definitions/test_connection.py | 9 +++++++++
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/task-sdk/src/airflow/sdk/definitions/connection.py
b/task-sdk/src/airflow/sdk/definitions/connection.py
index 21eed4216f5..1cbf75a7bb4 100644
--- a/task-sdk/src/airflow/sdk/definitions/connection.py
+++ b/task-sdk/src/airflow/sdk/definitions/connection.py
@@ -151,7 +151,7 @@ class Connection:
if uri is None:
self.__attrs_init__(conn_id=conn_id, **kwargs) # type:
ignore[attr-defined]
else:
- self.__dict__.update(self.from_uri(uri,
conn_id=conn_id).to_dict(validate=False))
+ self.__dict__.update(attrs.asdict(self.from_uri(uri,
conn_id=conn_id), recurse=False))
def get_uri(self) -> str:
"""Generate and return connection in URI format."""
diff --git a/task-sdk/tests/task_sdk/definitions/test_connection.py
b/task-sdk/tests/task_sdk/definitions/test_connection.py
index 470546d57da..5746b1b14f7 100644
--- a/task-sdk/tests/task_sdk/definitions/test_connection.py
+++ b/task-sdk/tests/task_sdk/definitions/test_connection.py
@@ -391,6 +391,15 @@ class TestConnectionFromUri:
# uri should not exist as an attribute (it's init-only)
assert not hasattr(conn, "uri")
+ def test_connection_constructor_with_uri_keeps_extra_serialized(self):
+ """Test Connection(uri=...) keeps extra as a JSON string."""
+ conn = Connection(conn_id="test_conn",
uri="mysql://user:pass@host:3306/db?charset=utf8&timeout=30")
+
+ assert json.loads(conn.extra) == {"charset": "utf8", "timeout": "30"}
+ assert conn.extra_dejson == {"charset": "utf8", "timeout": "30"}
+ assert conn.to_dict()["extra"] == {"charset": "utf8", "timeout": "30"}
+ assert json.loads(conn.as_json())["extra"] == {"charset": "utf8",
"timeout": "30"}
+
def test_from_uri_roundtrip(self):
"""Test that from_uri and get_uri are inverse operations."""
original_uri =
"postgres://user:pass@host:5432/db?param1=value1¶m2=value2"