Repository navigation
fix(event_handler): unify header validation, scalar list joining, and content-type parsing - #8602
Conversation
… content-type parsing (aws-powertools#8581)
|
Thanks a lot for your first contribution! Please check out our contributing guidelines and don't hesitate to ask whatever you need. |
leandrodamascena
left a comment
There was a problem hiding this comment.
Thanks @yagruda, confirmed on all three points. I ran it behind a real REST API and a real HTTP API with the same function: a single x-country value is accepted as a one-item list on every resolver, repeated x-req lines on REST come back as "a,b" like HTTP API already did, and Application/JSON, application/problem+json and application/vnd.api+json are parsed as JSON while text/plain still gets a 415. Comparing the media type exactly also closed a small hole, application/jsonx used to pass the startswith check.
Approving. This goes out in 3.39.0, so it will sit here for a while before I merge it. No rebase needed in the meantime, and you'll be credited in the release notes. I'll mention the repeated-header change on REST in the notes since it turns a 422 into a 200.
…unreachable list-wrapping branches
leandrodamascena
left a comment
There was a problem hiding this comment.
One more push from my side: the two [value] branches were unreachable, headers always arrive as a string and query strings as a list, so I removed them and added tests for the paths that were still uncovered: an optional sequence header that is not sent, and a header model whose list[str] field gets a single value or a comma-joined one. Patch coverage is 100% now. Re-approving, nothing changes for you.
Nice job, thank you! |
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #8602 +/- ##
===========================================
- Coverage 96.97% 96.97% -0.01%
===========================================
Files 321 321
Lines 16277 16288 +11
Branches 1459 1462 +3
===========================================
+ Hits 15785 15795 +10
Misses 352 352
- Partials 140 141 +1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Awesome work, congrats on your first merged pull request and thank you for helping improve everyone's experience! |
|
Awesome work, congrats on your first merged pull request and thank you for helping improve everyone's experience! |



Issue number: closes #8581
Summary
Changes
OpenAPIRequestValidationMiddleware:_normalize_multi_paramsand_process_model_paramto convert single string values into single-item lists (and split comma strings if unparsed), ensuring sequence headers likelist[str]validate consistently across HTTP API, Function URL, ALB, and VPC Lattice._restore_scalar_parameterby removing the multi-value exclusion for headers, aligning with RFC 9110 Section 5.3 where multiple header lines are equivalent to a comma-separated list._get_bodyto extract the media type without parameters, compare case-insensitively, and accept+jsonmedia types (such asapplication/problem+jsonandapplication/vnd.api+json).test_native_repeated_parameters_keep_existing_behaviorintest_openapi_comma_parameters.pyand added regression test cases intest_openapi_validation_middleware.py.User experience
x_country: Annotated[list[str], Header(alias="x-country")]accepts single values on all resolvers (e.g.x-country: US) instead of failing with 422list_typeon HTTP API / Function URL / ALB.multiValueHeaders) are joined into a comma-delimited string consistently across REST and HTTP API resolvers instead of raising 422string_type.Content-Type: Application/JSONorapplication/problem+jsonare parsed as JSON rather than rejected with 415.By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.