diff --git a/src/google/adk/tools/openapi_tool/openapi_spec_parser/operation_parser.py b/src/google/adk/tools/openapi_tool/openapi_spec_parser/operation_parser.py index 45f81b46fd1..76dda70205d 100644 --- a/src/google/adk/tools/openapi_tool/openapi_spec_parser/operation_parser.py +++ b/src/google/adk/tools/openapi_tool/openapi_spec_parser/operation_parser.py @@ -142,6 +142,7 @@ def _process_request_body(self): if schema and schema.type == 'object': properties = schema.properties or {} + required_properties = set(schema.required or []) for prop_name, prop_details in properties.items(): self._params.append( ApiParameter( @@ -149,6 +150,7 @@ def _process_request_body(self): param_location='body', param_schema=prop_details, description=prop_details.description, + required=prop_name in required_properties, py_name=self._get_py_name(prop_name), ) ) diff --git a/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py b/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py index 7df9a9bff8e..e90453937ce 100644 --- a/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py +++ b/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_operation_parser.py @@ -105,6 +105,31 @@ def test_process_request_body(sample_operation): assert parser._params[1].param_location == 'body' +def test_required_request_body_properties_are_required_parameters(): + """Required body properties appear in the generated parameter schema.""" + operation = Operation( + operationId='createSpace', + requestBody=RequestBody( + content={ + 'application/json': MediaType( + schema=Schema( + type='object', + required=['spaceName'], + properties={ + 'spaceName': Schema(type='string'), + 'description': Schema(type='string'), + }, + ) + ) + } + ), + ) + + parser = OperationParser(operation) + + assert parser.get_json_schema()['required'] == ['space_name'] + + def test_process_request_body_array(): """Test _process_request_body method with array schema.""" operation = Operation(