fix: support path level parameters for open_api_spec_parser

This commit is contained in:
kmak
2025-05-04 08:50:02 -04:00
parent 9bec05ce86
commit 34b001292a
2 changed files with 54 additions and 0 deletions
@@ -108,6 +108,12 @@ class OpenApiSpecParser:
operation_dict = path_item.get(method) operation_dict = path_item.get(method)
if operation_dict is None: if operation_dict is None:
continue continue
# Append path-level parameters
operation_dict['parameters'] = (
operation_dict.get("parameters", [])
+ path_item.get("parameters", [])
)
# If operation ID is missing, assign an operation id based on path # If operation ID is missing, assign an operation id based on path
# and method # and method
@@ -626,3 +626,51 @@ def test_parse_spec_with_duplicate_parameter_names(openapi_spec_generator):
assert body_param is not None assert body_param is not None
assert body_param.original_name == "name" assert body_param.original_name == "name"
assert body_param.py_name == "name_0" assert body_param.py_name == "name_0"
def test_parse_spec_with_path_level_parameters(openapi_spec_generator):
"""Test that operation parameters are correctly combined with path-level parameters."""
openapi_spec = {
"openapi": "3.1.0",
"info": {"title": "Combine Parameters API", "version": "1.0.0"},
"paths": {
"/test": {
"parameters": [
{"name": "global_param", "in": "query", "schema": {"type": "string"}}
],
"get": {
"parameters": [
{"name": "local_param", "in": "header", "schema": {"type": "integer"}}
],
"operationId": "testGet",
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {"schema": {"type": "string"}}
},
}
},
},
}
},
}
parsed_operations = openapi_spec_generator.parse(openapi_spec)
assert len(parsed_operations) == 1
operation = parsed_operations[0]
assert len(operation.parameters) == 2
# Verify the combined parameters
global_param = next((p for p in operation.parameters if p.original_name == "global_param"), None)
local_param = next((p for p in operation.parameters if p.original_name == "local_param"), None)
assert global_param is not None
assert global_param.param_location == "query"
assert global_param.type_value is str
assert local_param is not None
assert local_param.param_location == "header"
assert local_param.type_value is int