Commit 36a91b7
feat(event-handler): add per-route validation support (#7965)
* feat(event-handler): add enable_validation parameter to Route class and decorators
- Add enable_validation parameter to Route class constructor
- Update all route decorators to accept enable_validation parameter
- Modify _build_middleware_stack to check route-level validation setting
- Route-level setting overrides resolver-level when explicitly set
- Maintains backwards compatibility (None inherits from resolver)
Addresses #6983
* feat(event-handler): add enable_validation support to BedrockAgentResolver
- Update all HTTP method decorators to accept enable_validation parameter
- Pass enable_validation to parent class methods
- Ensures type safety and consistency across all resolvers
Addresses #6983
* feat(event-handler): add per-route validation support to async middleware chain
- Update _run_middleware_chain_async to check route-level validation
- Conditionally add validation middlewares based on effective setting
- Supports async/await pattern with per-route validation control
Addresses #6983
* test(event-handler): add comprehensive tests for per-route validation
- Test explicit route-level enable_validation=True
- Test disabling validation on specific routes when globally enabled
- Test request body and response validation with per-route settings
- Test inheritance behavior and mixed validation scenarios
- Test Pydantic v2 compatibility
- All tests passing with full coverage
Addresses #6983
* docs(event-handler): add per-route validation example
- Demonstrate incremental validation adoption for monolithic Lambda
- Show validated routes inheriting global setting
- Show legacy routes with enable_validation=False
- Practical example for migration scenarios
Addresses #6983
* fix(test): correct type ignore placement for SonarCloud
- Move type: ignore comment to function definition line
- Properly suppress return type mismatch warning in test
* test: revert to standard type ignore pattern for consistency
Use same pattern as other validation tests in codebase
* fix(test): use cast to satisfy SonarCloud type checking
Use typing.cast instead of type: ignore comment to properly handle
intentional type mismatch in validation error test. This satisfies
both mypy and SonarCloud while maintaining test functionality.
---------
Co-authored-by: Andrea Amorosi <dreamorosi@gmail.com>1 parent ea5c094 commit 36a91b7
File tree
5 files changed
+460
-4
lines changed- aws_lambda_powertools/event_handler
- examples/event_handler_rest/src
- tests/functional/event_handler/_pydantic
5 files changed
+460
-4
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
379 | 379 | | |
380 | 380 | | |
381 | 381 | | |
| 382 | + | |
382 | 383 | | |
383 | 384 | | |
384 | 385 | | |
| |||
421 | 422 | | |
422 | 423 | | |
423 | 424 | | |
| 425 | + | |
| 426 | + | |
424 | 427 | | |
425 | 428 | | |
426 | 429 | | |
| |||
450 | 453 | | |
451 | 454 | | |
452 | 455 | | |
| 456 | + | |
453 | 457 | | |
454 | 458 | | |
455 | 459 | | |
| |||
536 | 540 | | |
537 | 541 | | |
538 | 542 | | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
539 | 549 | | |
540 | | - | |
| 550 | + | |
541 | 551 | | |
542 | 552 | | |
543 | 553 | | |
544 | 554 | | |
545 | 555 | | |
546 | 556 | | |
547 | | - | |
| 557 | + | |
548 | 558 | | |
549 | 559 | | |
550 | 560 | | |
| |||
1133 | 1143 | | |
1134 | 1144 | | |
1135 | 1145 | | |
| 1146 | + | |
1136 | 1147 | | |
1137 | 1148 | | |
1138 | 1149 | | |
| |||
1195 | 1206 | | |
1196 | 1207 | | |
1197 | 1208 | | |
| 1209 | + | |
1198 | 1210 | | |
1199 | 1211 | | |
1200 | 1212 | | |
| |||
1236 | 1248 | | |
1237 | 1249 | | |
1238 | 1250 | | |
| 1251 | + | |
1239 | 1252 | | |
1240 | 1253 | | |
1241 | 1254 | | |
| |||
1256 | 1269 | | |
1257 | 1270 | | |
1258 | 1271 | | |
| 1272 | + | |
1259 | 1273 | | |
1260 | 1274 | | |
1261 | 1275 | | |
| |||
1298 | 1312 | | |
1299 | 1313 | | |
1300 | 1314 | | |
| 1315 | + | |
1301 | 1316 | | |
1302 | 1317 | | |
1303 | 1318 | | |
| |||
1318 | 1333 | | |
1319 | 1334 | | |
1320 | 1335 | | |
| 1336 | + | |
1321 | 1337 | | |
1322 | 1338 | | |
1323 | 1339 | | |
| |||
1360 | 1376 | | |
1361 | 1377 | | |
1362 | 1378 | | |
| 1379 | + | |
1363 | 1380 | | |
1364 | 1381 | | |
1365 | 1382 | | |
| |||
1380 | 1397 | | |
1381 | 1398 | | |
1382 | 1399 | | |
| 1400 | + | |
1383 | 1401 | | |
1384 | 1402 | | |
1385 | 1403 | | |
| |||
1421 | 1439 | | |
1422 | 1440 | | |
1423 | 1441 | | |
| 1442 | + | |
1424 | 1443 | | |
1425 | 1444 | | |
1426 | 1445 | | |
| |||
1441 | 1460 | | |
1442 | 1461 | | |
1443 | 1462 | | |
| 1463 | + | |
1444 | 1464 | | |
1445 | 1465 | | |
1446 | 1466 | | |
| |||
1485 | 1505 | | |
1486 | 1506 | | |
1487 | 1507 | | |
| 1508 | + | |
1488 | 1509 | | |
1489 | 1510 | | |
1490 | 1511 | | |
| |||
1505 | 1526 | | |
1506 | 1527 | | |
1507 | 1528 | | |
| 1529 | + | |
1508 | 1530 | | |
1509 | 1531 | | |
1510 | 1532 | | |
| |||
1548 | 1570 | | |
1549 | 1571 | | |
1550 | 1572 | | |
| 1573 | + | |
1551 | 1574 | | |
1552 | 1575 | | |
1553 | 1576 | | |
| |||
2569 | 2592 | | |
2570 | 2593 | | |
2571 | 2594 | | |
| 2595 | + | |
2572 | 2596 | | |
2573 | 2597 | | |
2574 | 2598 | | |
| |||
2603 | 2627 | | |
2604 | 2628 | | |
2605 | 2629 | | |
| 2630 | + | |
2606 | 2631 | | |
2607 | 2632 | | |
2608 | 2633 | | |
| |||
3130 | 3155 | | |
3131 | 3156 | | |
3132 | 3157 | | |
| 3158 | + | |
3133 | 3159 | | |
3134 | 3160 | | |
3135 | 3161 | | |
| |||
3157 | 3183 | | |
3158 | 3184 | | |
3159 | 3185 | | |
| 3186 | + | |
3160 | 3187 | | |
3161 | 3188 | | |
3162 | 3189 | | |
| |||
3246 | 3273 | | |
3247 | 3274 | | |
3248 | 3275 | | |
| 3276 | + | |
3249 | 3277 | | |
3250 | 3278 | | |
3251 | 3279 | | |
| |||
3266 | 3294 | | |
3267 | 3295 | | |
3268 | 3296 | | |
| 3297 | + | |
3269 | 3298 | | |
3270 | 3299 | | |
3271 | 3300 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
| 127 | + | |
127 | 128 | | |
128 | 129 | | |
129 | 130 | | |
| |||
144 | 145 | | |
145 | 146 | | |
146 | 147 | | |
| 148 | + | |
147 | 149 | | |
148 | 150 | | |
149 | 151 | | |
| |||
165 | 167 | | |
166 | 168 | | |
167 | 169 | | |
| 170 | + | |
168 | 171 | | |
169 | 172 | | |
170 | 173 | | |
| |||
185 | 188 | | |
186 | 189 | | |
187 | 190 | | |
| 191 | + | |
188 | 192 | | |
189 | 193 | | |
190 | 194 | | |
| |||
206 | 210 | | |
207 | 211 | | |
208 | 212 | | |
| 213 | + | |
209 | 214 | | |
210 | 215 | | |
211 | 216 | | |
| |||
226 | 231 | | |
227 | 232 | | |
228 | 233 | | |
| 234 | + | |
229 | 235 | | |
230 | 236 | | |
231 | 237 | | |
| |||
247 | 253 | | |
248 | 254 | | |
249 | 255 | | |
| 256 | + | |
250 | 257 | | |
251 | 258 | | |
252 | 259 | | |
| |||
267 | 274 | | |
268 | 275 | | |
269 | 276 | | |
| 277 | + | |
270 | 278 | | |
271 | 279 | | |
272 | 280 | | |
| |||
288 | 296 | | |
289 | 297 | | |
290 | 298 | | |
| 299 | + | |
291 | 300 | | |
292 | 301 | | |
293 | 302 | | |
| |||
308 | 317 | | |
309 | 318 | | |
310 | 319 | | |
| 320 | + | |
311 | 321 | | |
312 | 322 | | |
313 | 323 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
290 | 290 | | |
291 | 291 | | |
292 | 292 | | |
293 | | - | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
294 | 300 | | |
295 | 301 | | |
296 | 302 | | |
297 | 303 | | |
298 | | - | |
| 304 | + | |
299 | 305 | | |
300 | 306 | | |
301 | 307 | | |
| |||
0 commit comments