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¶m2=value2"
