From ab6a2272d488759db896cb6582efa7dfcda158f6 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 16:56:43 +0000 Subject: [PATCH] fix: route RequestBodyPlainText to request_body_data instead of request_body_json RequestBodyPlainText was incorrectly grouped with RequestBodyJsonObject in _resolve_request_body, causing plain text body values to be routed to request_body_json. This caused a ValueError('Request body json cannot be a string') when using RequestBodyPlainText in connector builder. The fix routes RequestBodyPlainText to request_body_data, which correctly handles string payloads as plain text request bodies. Co-Authored-By: Vai Ignatavicius --- .../interpolated_request_options_provider.py | 4 +++- ...t_interpolated_request_options_provider.py | 24 ++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py b/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py index cc961fae7..545831b50 100644 --- a/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +++ b/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py @@ -101,8 +101,10 @@ def _resolve_request_body(self) -> None: self.request_body_data = self.request_body.value elif self.request_body.type == "RequestBodyGraphQL": self.request_body_json = self.request_body.value.dict(exclude_none=True) - elif self.request_body.type in ("RequestBodyJsonObject", "RequestBodyPlainText"): + elif self.request_body.type == "RequestBodyJsonObject": self.request_body_json = self.request_body.value + elif self.request_body.type == "RequestBodyPlainText": + self.request_body_data = self.request_body.value else: raise ValueError(f"Unsupported request body type: {self.request_body.type}") diff --git a/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py b/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py index 786807aa6..585c1245c 100644 --- a/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py +++ b/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py @@ -211,14 +211,6 @@ def test_interpolated_request_json(test_name, input_request_json, expected_reque RequestBodyJsonObject(type="RequestBodyJsonObject", value={"none_value": "{{ None }}"}), {}, ), - ( - "test_string", - RequestBodyPlainText( - type="RequestBodyPlainText", - value="""{"nested": { "key": "{{ config['option'] }}" }}""", - ), - {"nested": {"key": "OPTION"}}, - ), ( "test_nested_objects", RequestBodyJsonObject( @@ -345,6 +337,22 @@ def test_interpolated_request_data(test_name, input_request_data, expected_reque ), {"2020-01-01 - 12345": "ABC"}, ), + ( + "test_plain_text_static_value", + RequestBodyPlainText( + type="RequestBodyPlainText", + value="plain text body", + ), + "plain text body", + ), + ( + "test_plain_text_with_interpolation", + RequestBodyPlainText( + type="RequestBodyPlainText", + value="{{ config['option'] }}", + ), + "OPTION", + ), ], ) def test_interpolated_request_data_using_request_body(