Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions src/google/adk/tools/openapi_tool/common/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,13 @@ def generate_return_doc(responses: Dict[str, Response]) -> str:

# Only consider 2xx responses for return type hinting.
# Returns the 2xx response with the smallest status code number and with
# content defined.
sorted_responses = sorted(responses.items(), key=lambda item: int(item[0]))
# content defined. Skip non-numeric keys such as 'default' and range
# patterns ('2XX', '4XX'), which are valid OpenAPI response keys but cannot
# be parsed as an int (they are filtered out by the 2xx check below anyway).
sorted_responses = sorted(
(item for item in responses.items() if item[0].isdigit()),
key=lambda item: int(item[0]),
)
qualified_response = next(
filter(
lambda r: r[0].startswith('2') and r[1].content,
Expand Down
32 changes: 32 additions & 0 deletions tests/unittests/tools/openapi_tool/common/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,38 @@ def test_generate_return_doc_contentful_response(self):
== expected_doc
)

def test_generate_return_doc_with_default_key_does_not_crash(self):
responses = {
'200': {
'description': 'Successful response',
'content': {'application/json': {'schema': {'type': 'string'}}},
},
'default': {'description': 'Unexpected error'},
}
expected_doc = 'Returns (str): Successful response'
assert (
PydocHelper.generate_return_doc(dict_to_responses(responses))
== expected_doc
)

def test_generate_return_doc_with_range_key_does_not_crash(self):
responses = {
'4XX': {'description': 'Client error'},
'200': {
'description': 'Successful response',
'content': {'application/json': {'schema': {'type': 'string'}}},
},
}
expected_doc = 'Returns (str): Successful response'
assert (
PydocHelper.generate_return_doc(dict_to_responses(responses))
== expected_doc
)

def test_generate_return_doc_only_non_numeric_keys_returns_empty(self):
responses = {'default': {'description': 'Only a default response'}}
assert PydocHelper.generate_return_doc(dict_to_responses(responses)) == ''


if __name__ == '__main__':
pytest.main([__file__])