This is an automated email from the ASF dual-hosted git repository.

rahulvats pushed a commit to branch py-client-sync
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit cc2e29c8630bf6ac2cccee8e326b17dec29ab6de
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&param2=value2"

Reply via email to