aws-lambda-powertools 3.24.0__tar.gz → 3.25.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/PKG-INFO +1 -1
  2. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/__init__.py +2 -0
  3. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/api_gateway.py +287 -32
  4. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/bedrock_agent.py +10 -0
  5. aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/http_resolver.py +491 -0
  6. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +17 -2
  7. aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/openapi/__init__.py +9 -0
  8. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +14 -0
  9. aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/openapi/merge.py +545 -0
  10. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/params.py +39 -8
  11. aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +2 -0
  12. aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +3 -0
  13. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/buffer/functions.py +3 -0
  14. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/formatter.py +6 -0
  15. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/logger.py +16 -4
  16. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/base.py +10 -5
  17. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/metrics.py +7 -0
  18. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/base.py +3 -1
  19. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +79 -4
  20. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/functions.py +8 -1
  21. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/version.py +1 -1
  22. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/decorators.py +2 -2
  23. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +19 -2
  24. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +33 -5
  25. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/ssm.py +2 -2
  26. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/s3.py +39 -3
  27. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/pyproject.toml +31 -3
  28. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/setup.py +1 -1
  29. aws_lambda_powertools-3.24.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -12
  30. aws_lambda_powertools-3.24.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -1
  31. aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/kafka/serialization/__init__.py +0 -0
  32. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/LICENSE +0 -0
  33. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/README.md +0 -0
  34. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/THIRD-PARTY-LICENSES +0 -0
  35. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/__init__.py +0 -0
  36. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
  37. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/bedrock_agent_function.py +0 -0
  38. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
  39. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/__init__.py +0 -0
  40. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/_registry.py +0 -0
  41. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/appsync_events.py +0 -0
  42. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/base.py +0 -0
  43. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/exceptions.py +0 -0
  44. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/functions.py +0 -0
  45. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/router.py +0 -0
  46. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/types.py +0 -0
  47. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/exception_handling.py +0 -0
  48. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
  49. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
  50. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
  51. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
  52. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
  53. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
  54. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
  55. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
  56. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
  57. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
  58. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
  59. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/config.py +0 -0
  60. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
  61. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
  62. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
  63. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
  64. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
  65. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
  66. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
  67. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
  68. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
  69. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/router.py +0 -0
  70. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/types.py +0 -0
  71. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/util.py +0 -0
  72. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
  73. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
  74. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/__init__.py +0 -0
  75. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/buffer/__init__.py +0 -0
  76. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/buffer/cache.py +0 -0
  77. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/buffer/config.py +0 -0
  78. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/constants.py +0 -0
  79. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
  80. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/exceptions.py +0 -0
  81. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/filters.py +0 -0
  82. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
  83. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
  84. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
  85. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/types.py +0 -0
  86. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/utils.py +0 -0
  87. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/__init__.py +0 -0
  88. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
  89. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/functions.py +0 -0
  90. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/metric.py +0 -0
  91. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
  92. {aws_lambda_powertools-3.24.0/aws_lambda_powertools/event_handler/openapi → aws_lambda_powertools-3.25.0/aws_lambda_powertools/metrics/provider/cloudwatch_emf}/__init__.py +0 -0
  93. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
  94. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
  95. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
  96. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
  97. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
  98. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
  99. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
  100. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
  101. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
  102. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/types.py +0 -0
  103. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
  104. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
  105. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
  106. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/package_logger.py +0 -0
  107. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/py.typed +0 -0
  108. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/__init__.py +0 -0
  109. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
  110. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/constants.py +0 -0
  111. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/cookies.py +0 -0
  112. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
  113. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
  114. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
  115. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
  116. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/types.py +0 -0
  117. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/user_agent.py +0 -0
  118. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/tracing/__init__.py +0 -0
  119. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/tracing/base.py +0 -0
  120. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/tracing/extensions.py +0 -0
  121. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/tracing/tracer.py +0 -0
  122. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/__init__.py +0 -0
  123. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
  124. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
  125. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
  126. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
  127. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/types.py +0 -0
  128. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
  129. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
  130. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
  131. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
  132. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_websocket_event.py +0 -0
  133. {aws_lambda_powertools-3.24.0/aws_lambda_powertools/metrics/provider/cloudwatch_emf → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/data_classes/appsync}/__init__.py +0 -0
  134. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
  135. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
  136. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
  137. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_events_event.py +0 -0
  138. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
  139. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
  140. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_function_event.py +0 -0
  141. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
  142. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
  143. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
  144. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
  145. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +0 -0
  146. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
  147. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
  148. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
  149. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
  150. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
  151. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
  152. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
  153. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/iot_registry_event.py +0 -0
  154. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
  155. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
  156. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
  157. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
  158. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
  159. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
  160. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
  161. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
  162. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
  163. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
  164. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
  165. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
  166. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +0 -0
  167. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
  168. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
  169. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
  170. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
  171. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
  172. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
  173. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
  174. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
  175. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
  176. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
  177. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
  178. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
  179. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
  180. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
  181. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
  182. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
  183. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
  184. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
  185. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
  186. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
  187. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
  188. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
  189. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
  190. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
  191. {aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/data_classes/appsync → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/idempotency/persistence}/__init__.py +0 -0
  192. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
  193. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/cache.py +0 -0
  194. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
  195. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
  196. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
  197. {aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/idempotency/persistence → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/idempotency/serialization}/__init__.py +0 -0
  198. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
  199. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
  200. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
  201. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/functions.py +0 -0
  202. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
  203. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
  204. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
  205. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
  206. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/__init__.py +0 -0
  207. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/consumer_records.py +0 -0
  208. {aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/idempotency/serialization → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/kafka/deserializer}/__init__.py +0 -0
  209. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/avro.py +0 -0
  210. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/base.py +0 -0
  211. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/default.py +0 -0
  212. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/deserializer.py +0 -0
  213. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/json.py +0 -0
  214. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/protobuf.py +0 -0
  215. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/exceptions.py +0 -0
  216. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/kafka_consumer.py +0 -0
  217. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/schema_config.py +0 -0
  218. {aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/kafka/deserializer → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/kafka/serialization}/__init__.py +0 -0
  219. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/base.py +0 -0
  220. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/custom_dict.py +0 -0
  221. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/dataclass.py +0 -0
  222. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/pydantic.py +0 -0
  223. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/serialization.py +0 -0
  224. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/types.py +0 -0
  225. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
  226. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
  227. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
  228. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
  229. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
  230. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
  231. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
  232. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
  233. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
  234. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
  235. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
  236. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw_websocket.py +0 -0
  237. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
  238. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
  239. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
  240. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
  241. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
  242. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
  243. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
  244. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
  245. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
  246. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
  247. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
  248. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
  249. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
  250. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
  251. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
  252. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/functions.py +0 -0
  253. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
  254. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
  255. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
  256. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/apigw_websocket.py +0 -0
  257. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
  258. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/appsync.py +0 -0
  259. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/appsync_events.py +0 -0
  260. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
  261. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
  262. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
  263. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/cognito.py +0 -0
  264. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
  265. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
  266. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/iot_registry_events.py +0 -0
  267. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
  268. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
  269. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
  270. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
  271. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
  272. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
  273. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
  274. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
  275. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
  276. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
  277. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
  278. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/transfer_family.py +0 -0
  279. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
  280. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
  281. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
  282. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
  283. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/serialization.py +0 -0
  284. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
  285. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
  286. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
  287. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
  288. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
  289. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
  290. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
  291. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
  292. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
  293. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
  294. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
  295. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
  296. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
  297. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
  298. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
  299. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
  300. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
  301. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
  302. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
  303. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
  304. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
  305. {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/warnings/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: aws_lambda_powertools
3
- Version: 3.24.0
3
+ Version: 3.25.0
4
4
  Summary: Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.
5
5
  License: MIT
6
6
  Keywords: aws_lambda_powertools,aws,tracing,logging,lambda,powertools,feature_flags,idempotency,middleware
@@ -17,6 +17,7 @@ from aws_lambda_powertools.event_handler.bedrock_agent_function import (
17
17
  BedrockFunctionResponse,
18
18
  )
19
19
  from aws_lambda_powertools.event_handler.events_appsync.appsync_events import AppSyncEventsResolver
20
+ from aws_lambda_powertools.event_handler.http_resolver import HttpResolverLocal
20
21
  from aws_lambda_powertools.event_handler.lambda_function_url import (
21
22
  LambdaFunctionUrlResolver,
22
23
  )
@@ -34,6 +35,7 @@ __all__ = [
34
35
  "BedrockResponse",
35
36
  "BedrockFunctionResponse",
36
37
  "CORSConfig",
38
+ "HttpResolverLocal",
37
39
  "LambdaFunctionUrlResolver",
38
40
  "Response",
39
41
  "VPCLatticeResolver",
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import base64
4
+ import copy
4
5
  import json
5
6
  import logging
6
7
  import re
@@ -26,6 +27,7 @@ from aws_lambda_powertools.event_handler.openapi.constants import (
26
27
  DEFAULT_OPENAPI_VERSION,
27
28
  )
28
29
  from aws_lambda_powertools.event_handler.openapi.exceptions import (
30
+ RequestUnsupportedContentType,
29
31
  RequestValidationError,
30
32
  ResponseValidationError,
31
33
  SchemaValidationError,
@@ -377,6 +379,7 @@ class Route:
377
379
  security: list[dict[str, list[str]]] | None = None,
378
380
  openapi_extensions: dict[str, Any] | None = None,
379
381
  deprecated: bool = False,
382
+ enable_validation: bool | None = None,
380
383
  custom_response_validation_http_code: HTTPStatus | None = None,
381
384
  middlewares: list[Callable[..., Response]] | None = None,
382
385
  ):
@@ -419,6 +422,8 @@ class Route:
419
422
  Additional OpenAPI extensions as a dictionary.
420
423
  deprecated: bool
421
424
  Whether or not to mark this route as deprecated in the OpenAPI schema
425
+ enable_validation: bool | None, optional
426
+ Enable or disable validation for this specific route. If None, inherits from resolver setting.
422
427
  custom_response_validation_http_code: int | HTTPStatus | None, optional
423
428
  Whether to have custom http status code for this route if response validation fails
424
429
  middlewares: list[Callable[..., Response]] | None
@@ -448,6 +453,7 @@ class Route:
448
453
  self.middlewares = middlewares or []
449
454
  self.operation_id = operation_id or self._generate_operation_id()
450
455
  self.deprecated = deprecated
456
+ self.enable_validation = enable_validation
451
457
 
452
458
  # _middleware_stack_built is used to ensure the middleware stack is only built once.
453
459
  self._middleware_stack_built = False
@@ -534,15 +540,34 @@ class Route:
534
540
 
535
541
  all_middlewares = []
536
542
 
543
+ # Determine if validation should be enabled for this route
544
+ # If route has explicit enable_validation setting, use it; otherwise, use resolver's global setting
545
+ route_validation_enabled = (
546
+ self.enable_validation if self.enable_validation is not None else app._enable_validation
547
+ )
548
+
549
+ # If route needs validation but resolver didn't create the middlewares, create them now
550
+ if route_validation_enabled and not hasattr(app, "_request_validation_middleware"):
551
+ from aws_lambda_powertools.event_handler.middlewares.openapi_validation import (
552
+ OpenAPIRequestValidationMiddleware,
553
+ OpenAPIResponseValidationMiddleware,
554
+ )
555
+
556
+ app._request_validation_middleware = OpenAPIRequestValidationMiddleware()
557
+ app._response_validation_middleware = OpenAPIResponseValidationMiddleware(
558
+ validation_serializer=app._serializer,
559
+ has_response_validation_error=app._has_response_validation_error,
560
+ )
561
+
537
562
  # Add request validation middleware first if validation is enabled
538
- if hasattr(app, "_request_validation_middleware"):
563
+ if route_validation_enabled and hasattr(app, "_request_validation_middleware"):
539
564
  all_middlewares.append(app._request_validation_middleware)
540
565
 
541
566
  # Add user middlewares in the middle
542
567
  all_middlewares.extend(router_middlewares + self.middlewares)
543
568
 
544
569
  # Add response validation middleware before the route handler if validation is enabled
545
- if hasattr(app, "_response_validation_middleware"):
570
+ if route_validation_enabled and hasattr(app, "_response_validation_middleware"):
546
571
  all_middlewares.append(app._response_validation_middleware)
547
572
 
548
573
  logger.debug(f"Building middleware stack: {all_middlewares}")
@@ -666,7 +691,8 @@ class Route:
666
691
  # Add the response to the OpenAPI operation
667
692
  if self.responses:
668
693
  for status_code in list(self.responses):
669
- response = self.responses[status_code]
694
+ # Create a deep copy to prevent mutation of the shared dictionary
695
+ response = copy.deepcopy(self.responses[status_code])
670
696
 
671
697
  # Case 1: there is not 'content' key
672
698
  if "content" not in response:
@@ -826,6 +852,8 @@ class Route:
826
852
 
827
853
  # Generate the request body media type
828
854
  request_media_content: dict[str, Any] = {"schema": body_schema}
855
+ if field_info.openapi_examples:
856
+ request_media_content["examples"] = field_info.openapi_examples
829
857
  request_body_oai["content"] = {request_media_type: request_media_content}
830
858
  return request_body_oai
831
859
 
@@ -1128,6 +1156,7 @@ class BaseRouter(ABC):
1128
1156
  security: list[dict[str, list[str]]] | None = None,
1129
1157
  openapi_extensions: dict[str, Any] | None = None,
1130
1158
  deprecated: bool = False,
1159
+ enable_validation: bool | None = None,
1131
1160
  custom_response_validation_http_code: int | HTTPStatus | None = None,
1132
1161
  middlewares: list[Callable[..., Any]] | None = None,
1133
1162
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -1190,6 +1219,7 @@ class BaseRouter(ABC):
1190
1219
  security: list[dict[str, list[str]]] | None = None,
1191
1220
  openapi_extensions: dict[str, Any] | None = None,
1192
1221
  deprecated: bool = False,
1222
+ enable_validation: bool | None = None,
1193
1223
  custom_response_validation_http_code: int | HTTPStatus | None = None,
1194
1224
  middlewares: list[Callable[..., Any]] | None = None,
1195
1225
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -1231,6 +1261,7 @@ class BaseRouter(ABC):
1231
1261
  security,
1232
1262
  openapi_extensions,
1233
1263
  deprecated,
1264
+ enable_validation,
1234
1265
  custom_response_validation_http_code,
1235
1266
  middlewares,
1236
1267
  )
@@ -1251,6 +1282,7 @@ class BaseRouter(ABC):
1251
1282
  security: list[dict[str, list[str]]] | None = None,
1252
1283
  openapi_extensions: dict[str, Any] | None = None,
1253
1284
  deprecated: bool = False,
1285
+ enable_validation: bool | None = None,
1254
1286
  custom_response_validation_http_code: int | HTTPStatus | None = None,
1255
1287
  middlewares: list[Callable[..., Any]] | None = None,
1256
1288
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -1293,6 +1325,7 @@ class BaseRouter(ABC):
1293
1325
  security,
1294
1326
  openapi_extensions,
1295
1327
  deprecated,
1328
+ enable_validation,
1296
1329
  custom_response_validation_http_code,
1297
1330
  middlewares,
1298
1331
  )
@@ -1313,6 +1346,7 @@ class BaseRouter(ABC):
1313
1346
  security: list[dict[str, list[str]]] | None = None,
1314
1347
  openapi_extensions: dict[str, Any] | None = None,
1315
1348
  deprecated: bool = False,
1349
+ enable_validation: bool | None = None,
1316
1350
  custom_response_validation_http_code: int | HTTPStatus | None = None,
1317
1351
  middlewares: list[Callable[..., Any]] | None = None,
1318
1352
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -1355,6 +1389,7 @@ class BaseRouter(ABC):
1355
1389
  security,
1356
1390
  openapi_extensions,
1357
1391
  deprecated,
1392
+ enable_validation,
1358
1393
  custom_response_validation_http_code,
1359
1394
  middlewares,
1360
1395
  )
@@ -1375,6 +1410,7 @@ class BaseRouter(ABC):
1375
1410
  security: list[dict[str, list[str]]] | None = None,
1376
1411
  openapi_extensions: dict[str, Any] | None = None,
1377
1412
  deprecated: bool = False,
1413
+ enable_validation: bool | None = None,
1378
1414
  custom_response_validation_http_code: int | HTTPStatus | None = None,
1379
1415
  middlewares: list[Callable[..., Any]] | None = None,
1380
1416
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -1416,6 +1452,7 @@ class BaseRouter(ABC):
1416
1452
  security,
1417
1453
  openapi_extensions,
1418
1454
  deprecated,
1455
+ enable_validation,
1419
1456
  custom_response_validation_http_code,
1420
1457
  middlewares,
1421
1458
  )
@@ -1436,6 +1473,7 @@ class BaseRouter(ABC):
1436
1473
  security: list[dict[str, list[str]]] | None = None,
1437
1474
  openapi_extensions: dict[str, Any] | None = None,
1438
1475
  deprecated: bool = False,
1476
+ enable_validation: bool | None = None,
1439
1477
  custom_response_validation_http_code: int | HTTPStatus | None = None,
1440
1478
  middlewares: list[Callable] | None = None,
1441
1479
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -1480,6 +1518,7 @@ class BaseRouter(ABC):
1480
1518
  security,
1481
1519
  openapi_extensions,
1482
1520
  deprecated,
1521
+ enable_validation,
1483
1522
  custom_response_validation_http_code,
1484
1523
  middlewares,
1485
1524
  )
@@ -1500,6 +1539,7 @@ class BaseRouter(ABC):
1500
1539
  security: list[dict[str, list[str]]] | None = None,
1501
1540
  openapi_extensions: dict[str, Any] | None = None,
1502
1541
  deprecated: bool = False,
1542
+ enable_validation: bool | None = None,
1503
1543
  custom_response_validation_http_code: int | HTTPStatus | None = None,
1504
1544
  middlewares: list[Callable] | None = None,
1505
1545
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -1543,6 +1583,7 @@ class BaseRouter(ABC):
1543
1583
  security,
1544
1584
  openapi_extensions,
1545
1585
  deprecated,
1586
+ enable_validation,
1546
1587
  custom_response_validation_http_code,
1547
1588
  middlewares,
1548
1589
  )
@@ -2204,6 +2245,162 @@ class ApiGatewayResolver(BaseRouter):
2204
2245
  openapi_extensions=openapi_extensions,
2205
2246
  )
2206
2247
 
2248
+ def configure_openapi_merge(
2249
+ self,
2250
+ path: str,
2251
+ pattern: str | list[str] = "handler.py",
2252
+ exclude: list[str] | None = None,
2253
+ resolver_name: str = "app",
2254
+ recursive: bool = False,
2255
+ title: str = DEFAULT_OPENAPI_TITLE,
2256
+ version: str = DEFAULT_API_VERSION,
2257
+ openapi_version: str = DEFAULT_OPENAPI_VERSION,
2258
+ summary: str | None = None,
2259
+ description: str | None = None,
2260
+ tags: list[Tag | str] | None = None,
2261
+ servers: list[Server] | None = None,
2262
+ terms_of_service: str | None = None,
2263
+ contact: Contact | None = None,
2264
+ license_info: License | None = None,
2265
+ security_schemes: dict[str, SecurityScheme] | None = None,
2266
+ security: list[dict[str, list[str]]] | None = None,
2267
+ external_documentation: ExternalDocumentation | None = None,
2268
+ openapi_extensions: dict[str, Any] | None = None,
2269
+ on_conflict: Literal["warn", "error", "first", "last"] = "warn",
2270
+ ):
2271
+ """Configure OpenAPI merge to generate a unified schema from multiple Lambda handlers.
2272
+
2273
+ This method discovers resolver instances across multiple Python files and merges
2274
+ their OpenAPI schemas into a single unified specification. Useful for micro-function
2275
+ architectures where each Lambda has its own resolver.
2276
+
2277
+ Parameters
2278
+ ----------
2279
+ path : str
2280
+ Root directory path to search for resolver files.
2281
+ pattern : str | list[str], optional
2282
+ Glob pattern(s) to match handler files. Default is "handler.py".
2283
+ exclude : list[str], optional
2284
+ Patterns to exclude from search. Default excludes tests, __pycache__, and .venv.
2285
+ resolver_name : str, optional
2286
+ Name of the resolver variable in handler files. Default is "app".
2287
+ recursive : bool, optional
2288
+ Whether to search recursively in subdirectories. Default is False.
2289
+ title : str
2290
+ The title of the unified API.
2291
+ version : str
2292
+ The version of the OpenAPI document.
2293
+ openapi_version : str, default = "3.1.0"
2294
+ The version of the OpenAPI Specification.
2295
+ summary : str, optional
2296
+ A short summary of what the application does.
2297
+ description : str, optional
2298
+ A verbose explanation of the application behavior.
2299
+ tags : list[Tag | str], optional
2300
+ A list of tags used by the specification with additional metadata.
2301
+ servers : list[Server], optional
2302
+ An array of Server Objects for connectivity information.
2303
+ terms_of_service : str, optional
2304
+ A URL to the Terms of Service for the API.
2305
+ contact : Contact, optional
2306
+ The contact information for the exposed API.
2307
+ license_info : License, optional
2308
+ The license information for the exposed API.
2309
+ security_schemes : dict[str, SecurityScheme], optional
2310
+ Security schemes available in the specification.
2311
+ security : list[dict[str, list[str]]], optional
2312
+ Security mechanisms applied globally across the API.
2313
+ external_documentation : ExternalDocumentation, optional
2314
+ A link to external documentation for the API.
2315
+ openapi_extensions : dict[str, Any], optional
2316
+ Additional OpenAPI extensions as a dictionary.
2317
+ on_conflict : str, optional
2318
+ Strategy for handling conflicts when the same path+method is defined
2319
+ in multiple schemas. Options: "warn" (default), "error", "first", "last".
2320
+
2321
+ Example
2322
+ -------
2323
+ >>> from aws_lambda_powertools.event_handler import APIGatewayRestResolver
2324
+ >>>
2325
+ >>> app = APIGatewayRestResolver()
2326
+ >>> app.configure_openapi_merge(
2327
+ ... path="./functions",
2328
+ ... pattern="handler.py",
2329
+ ... exclude=["**/tests/**"],
2330
+ ... resolver_name="app",
2331
+ ... title="My Unified API",
2332
+ ... version="1.0.0",
2333
+ ... )
2334
+
2335
+ See Also
2336
+ --------
2337
+ configure_openapi : Configure OpenAPI for a single resolver
2338
+ enable_swagger : Enable Swagger UI
2339
+ """
2340
+ from aws_lambda_powertools.event_handler.openapi.merge import OpenAPIMerge
2341
+
2342
+ if exclude is None:
2343
+ exclude = ["**/tests/**", "**/__pycache__/**", "**/.venv/**"]
2344
+
2345
+ self._openapi_merge = OpenAPIMerge(
2346
+ title=title,
2347
+ version=version,
2348
+ openapi_version=openapi_version,
2349
+ summary=summary,
2350
+ description=description,
2351
+ tags=tags,
2352
+ servers=servers,
2353
+ terms_of_service=terms_of_service,
2354
+ contact=contact,
2355
+ license_info=license_info,
2356
+ security_schemes=security_schemes,
2357
+ security=security,
2358
+ external_documentation=external_documentation,
2359
+ openapi_extensions=openapi_extensions,
2360
+ on_conflict=on_conflict,
2361
+ )
2362
+ self._openapi_merge.discover(
2363
+ path=path,
2364
+ pattern=pattern,
2365
+ exclude=exclude,
2366
+ resolver_name=resolver_name,
2367
+ recursive=recursive,
2368
+ )
2369
+
2370
+ def get_openapi_merge_schema(self) -> dict[str, Any]:
2371
+ """Get the merged OpenAPI schema from multiple Lambda handlers.
2372
+
2373
+ Returns
2374
+ -------
2375
+ dict[str, Any]
2376
+ The merged OpenAPI schema.
2377
+
2378
+ Raises
2379
+ ------
2380
+ RuntimeError
2381
+ If configure_openapi_merge has not been called.
2382
+ """
2383
+ if not hasattr(self, "_openapi_merge") or self._openapi_merge is None:
2384
+ raise RuntimeError("configure_openapi_merge must be called before get_openapi_merge_schema")
2385
+ return self._openapi_merge.get_openapi_schema()
2386
+
2387
+ def get_openapi_merge_json_schema(self) -> str:
2388
+ """Get the merged OpenAPI schema as JSON from multiple Lambda handlers.
2389
+
2390
+ Returns
2391
+ -------
2392
+ str
2393
+ The merged OpenAPI schema as a JSON string.
2394
+
2395
+ Raises
2396
+ ------
2397
+ RuntimeError
2398
+ If configure_openapi_merge has not been called.
2399
+ """
2400
+ if not hasattr(self, "_openapi_merge") or self._openapi_merge is None:
2401
+ raise RuntimeError("configure_openapi_merge must be called before get_openapi_merge_json_schema")
2402
+ return self._openapi_merge.get_openapi_json_schema()
2403
+
2207
2404
  def enable_swagger(
2208
2405
  self,
2209
2406
  *,
@@ -2310,32 +2507,38 @@ class ApiGatewayResolver(BaseRouter):
2310
2507
 
2311
2508
  openapi_servers = servers or [Server(url=(base_path or "/"))]
2312
2509
 
2313
- spec = self.get_openapi_schema(
2314
- title=title,
2315
- version=version,
2316
- openapi_version=openapi_version,
2317
- summary=summary,
2318
- description=description,
2319
- tags=tags,
2320
- servers=openapi_servers,
2321
- terms_of_service=terms_of_service,
2322
- contact=contact,
2323
- license_info=license_info,
2324
- security_schemes=security_schemes,
2325
- security=security,
2326
- external_documentation=external_documentation,
2327
- openapi_extensions=openapi_extensions,
2328
- )
2510
+ # Use merged schema if configure_openapi_merge was called, otherwise use regular schema
2511
+ if hasattr(self, "_openapi_merge") and self._openapi_merge is not None:
2512
+ # Get merged schema as JSON string (already properly serialized)
2513
+ escaped_spec = self._openapi_merge.get_openapi_json_schema().replace("</", "<\\/")
2514
+ else:
2515
+ spec = self.get_openapi_schema(
2516
+ title=title,
2517
+ version=version,
2518
+ openapi_version=openapi_version,
2519
+ summary=summary,
2520
+ description=description,
2521
+ tags=tags,
2522
+ servers=openapi_servers,
2523
+ terms_of_service=terms_of_service,
2524
+ contact=contact,
2525
+ license_info=license_info,
2526
+ security_schemes=security_schemes,
2527
+ security=security,
2528
+ external_documentation=external_documentation,
2529
+ openapi_extensions=openapi_extensions,
2530
+ )
2329
2531
 
2330
- # The .replace('</', '<\\/') part is necessary to prevent a potential issue where the JSON string contains
2331
- # </script> or similar tags. Escaping the forward slash in </ as <\/ ensures that the JSON does not
2332
- # inadvertently close the script tag, and the JSON remains a valid string within the JavaScript code.
2333
- escaped_spec = model_json(
2334
- spec,
2335
- by_alias=True,
2336
- exclude_none=True,
2337
- indent=2,
2338
- ).replace("</", "<\\/")
2532
+ # The .replace('</', '<\\/') part is necessary to prevent a potential issue where the JSON
2533
+ # string contains </script> or similar tags. Escaping the forward slash in </ as <\/ ensures
2534
+ # that the JSON does not inadvertently close the script tag, and the JSON remains a valid
2535
+ # string within the JavaScript code.
2536
+ escaped_spec = model_json(
2537
+ spec,
2538
+ by_alias=True,
2539
+ exclude_none=True,
2540
+ indent=2,
2541
+ ).replace("</", "<\\/")
2339
2542
 
2340
2543
  # Check for query parameters; if "format" is specified as "json",
2341
2544
  # respond with the JSON used in the OpenAPI spec
@@ -2402,6 +2605,7 @@ class ApiGatewayResolver(BaseRouter):
2402
2605
  security: list[dict[str, list[str]]] | None = None,
2403
2606
  openapi_extensions: dict[str, Any] | None = None,
2404
2607
  deprecated: bool = False,
2608
+ enable_validation: bool | None = None,
2405
2609
  custom_response_validation_http_code: int | HTTPStatus | None = None,
2406
2610
  middlewares: list[Callable[..., Any]] | None = None,
2407
2611
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -2436,6 +2640,7 @@ class ApiGatewayResolver(BaseRouter):
2436
2640
  security,
2437
2641
  openapi_extensions,
2438
2642
  deprecated,
2643
+ enable_validation,
2439
2644
  custom_response_validation_http_code,
2440
2645
  middlewares,
2441
2646
  )
@@ -2459,7 +2664,7 @@ class ApiGatewayResolver(BaseRouter):
2459
2664
 
2460
2665
  return register_resolver
2461
2666
 
2462
- def resolve(self, event: dict[str, Any], context: LambdaContext) -> dict[str, Any]:
2667
+ def resolve(self, event: Mapping[str, Any], context: LambdaContext) -> dict[str, Any]:
2463
2668
  """Resolves the response based on the provide event and decorator routes
2464
2669
 
2465
2670
  ## Internals
@@ -2512,10 +2717,10 @@ class ApiGatewayResolver(BaseRouter):
2512
2717
  event = event.raw_event
2513
2718
 
2514
2719
  if self._debug:
2515
- print(self._serializer(event))
2720
+ print(self._serializer(cast(dict, event)))
2516
2721
 
2517
2722
  # Populate router(s) dependencies without keeping a reference to each registered router
2518
- BaseRouter.current_event = self._to_proxy_event(event)
2723
+ BaseRouter.current_event = self._to_proxy_event(cast(dict, event))
2519
2724
  BaseRouter.lambda_context = context
2520
2725
 
2521
2726
  response = self._resolve().build(self.current_event, self._cors)
@@ -2806,6 +3011,18 @@ class ApiGatewayResolver(BaseRouter):
2806
3011
  route=route,
2807
3012
  )
2808
3013
 
3014
+ if isinstance(exp, RequestUnsupportedContentType):
3015
+ errors = [{"loc": e["loc"], "type": e["type"]} for e in exp.errors()]
3016
+ return self._response_builder_class(
3017
+ response=Response(
3018
+ status_code=HTTPStatus.UNSUPPORTED_MEDIA_TYPE,
3019
+ content_type=content_types.APPLICATION_JSON,
3020
+ body={"statusCode": HTTPStatus.UNSUPPORTED_MEDIA_TYPE, "detail": errors},
3021
+ ),
3022
+ serializer=self._serializer,
3023
+ route=route,
3024
+ )
3025
+
2809
3026
  if isinstance(exp, ServiceError):
2810
3027
  return self._response_builder_class(
2811
3028
  response=Response(
@@ -2951,6 +3168,7 @@ class Router(BaseRouter):
2951
3168
  security: list[dict[str, list[str]]] | None = None,
2952
3169
  openapi_extensions: dict[str, Any] | None = None,
2953
3170
  deprecated: bool = False,
3171
+ enable_validation: bool | None = None,
2954
3172
  custom_response_validation_http_code: int | HTTPStatus | None = None,
2955
3173
  middlewares: list[Callable[..., Any]] | None = None,
2956
3174
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -2978,6 +3196,7 @@ class Router(BaseRouter):
2978
3196
  frozen_security,
2979
3197
  frozen_openapi_extensions,
2980
3198
  deprecated,
3199
+ enable_validation,
2981
3200
  custom_response_validation_http_code,
2982
3201
  )
2983
3202
 
@@ -3067,6 +3286,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
3067
3286
  security: list[dict[str, list[str]]] | None = None,
3068
3287
  openapi_extensions: dict[str, Any] | None = None,
3069
3288
  deprecated: bool = False,
3289
+ enable_validation: bool | None = None,
3070
3290
  custom_response_validation_http_code: int | HTTPStatus | None = None,
3071
3291
  middlewares: list[Callable[..., Any]] | None = None,
3072
3292
  ) -> Callable[[AnyCallableT], AnyCallableT]:
@@ -3087,6 +3307,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
3087
3307
  security,
3088
3308
  openapi_extensions,
3089
3309
  deprecated,
3310
+ enable_validation,
3090
3311
  custom_response_validation_http_code,
3091
3312
  middlewares,
3092
3313
  )
@@ -3152,8 +3373,34 @@ class ALBResolver(ApiGatewayResolver):
3152
3373
  enable_validation: bool = False,
3153
3374
  response_validation_error_http_code: HTTPStatus | int | None = None,
3154
3375
  json_body_deserializer: Callable[[str], dict] | None = None,
3376
+ decode_query_parameters: bool = False,
3155
3377
  ):
3156
- """Amazon Application Load Balancer (ALB) resolver"""
3378
+ """Amazon Application Load Balancer (ALB) resolver
3379
+
3380
+
3381
+ Parameters
3382
+ ----------
3383
+ cors: CORSConfig
3384
+ Optionally configure and enabled CORS. Not each route will need to have to cors=True
3385
+ debug: bool | None
3386
+ Enables debug mode, by default False. Can be also be enabled by "POWERTOOLS_DEV"
3387
+ environment variable
3388
+ serializer: Callable, optional
3389
+ function to serialize `obj` to a JSON formatted `str`, by default json.dumps
3390
+ strip_prefixes: list[str | Pattern], optional
3391
+ optional list of prefixes to be removed from the request path before doing the routing.
3392
+ This is often used with api gateways with multiple custom mappings.
3393
+ Each prefix can be a static string or a compiled regex pattern
3394
+ enable_validation: bool | None
3395
+ Enables validation of the request body against the route schema, by default False.
3396
+ response_validation_error_http_code
3397
+ Sets the returned status code if response is not validated. enable_validation must be True.
3398
+ json_body_deserializer: Callable[[str], dict], optional
3399
+ function to deserialize `str`, `bytes`, `bytearray` containing a JSON document to a Python `dict`,
3400
+ by default json.loads when integrating with EventSource data class
3401
+ decode_query_parameters: bool | None
3402
+ Enables URL-decoding of query parameters (both keys and values), by default False.
3403
+ """
3157
3404
  super().__init__(
3158
3405
  ProxyEventType.ALBEvent,
3159
3406
  cors,
@@ -3164,6 +3411,7 @@ class ALBResolver(ApiGatewayResolver):
3164
3411
  response_validation_error_http_code,
3165
3412
  json_body_deserializer=json_body_deserializer,
3166
3413
  )
3414
+ self.decode_query_parameters = decode_query_parameters
3167
3415
 
3168
3416
  def _get_base_path(self) -> str:
3169
3417
  # ALB doesn't have a stage variable, so we just return an empty string
@@ -3190,3 +3438,10 @@ class ALBResolver(ApiGatewayResolver):
3190
3438
  result.body = ""
3191
3439
 
3192
3440
  return super()._to_response(result)
3441
+
3442
+ @override
3443
+ def _to_proxy_event(self, event: dict) -> BaseProxyEvent:
3444
+ proxy_event = super()._to_proxy_event(event)
3445
+ if isinstance(proxy_event, ALBEvent):
3446
+ proxy_event.decode_query_parameters = self.decode_query_parameters
3447
+ return proxy_event
@@ -124,6 +124,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
124
124
  include_in_schema: bool = True,
125
125
  openapi_extensions: dict[str, Any] | None = None,
126
126
  deprecated: bool = False,
127
+ enable_validation: bool | None = None,
127
128
  custom_response_validation_http_code: int | HTTPStatus | None = None,
128
129
  middlewares: list[Callable[..., Any]] | None = None,
129
130
  ) -> Callable[[Callable[..., Any]], Callable[..., Any]]:
@@ -144,6 +145,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
144
145
  security,
145
146
  openapi_extensions,
146
147
  deprecated,
148
+ enable_validation,
147
149
  custom_response_validation_http_code,
148
150
  middlewares,
149
151
  )
@@ -165,6 +167,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
165
167
  include_in_schema: bool = True,
166
168
  openapi_extensions: dict[str, Any] | None = None,
167
169
  deprecated: bool = False,
170
+ enable_validation: bool | None = None,
168
171
  custom_response_validation_http_code: int | HTTPStatus | None = None,
169
172
  middlewares: list[Callable[..., Any]] | None = None,
170
173
  ):
@@ -185,6 +188,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
185
188
  security,
186
189
  openapi_extensions,
187
190
  deprecated,
191
+ enable_validation,
188
192
  custom_response_validation_http_code,
189
193
  middlewares,
190
194
  )
@@ -206,6 +210,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
206
210
  include_in_schema: bool = True,
207
211
  openapi_extensions: dict[str, Any] | None = None,
208
212
  deprecated: bool = False,
213
+ enable_validation: bool | None = None,
209
214
  custom_response_validation_http_code: int | HTTPStatus | None = None,
210
215
  middlewares: list[Callable[..., Any]] | None = None,
211
216
  ):
@@ -226,6 +231,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
226
231
  security,
227
232
  openapi_extensions,
228
233
  deprecated,
234
+ enable_validation,
229
235
  custom_response_validation_http_code,
230
236
  middlewares,
231
237
  )
@@ -247,6 +253,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
247
253
  include_in_schema: bool = True,
248
254
  openapi_extensions: dict[str, Any] | None = None,
249
255
  deprecated: bool = False,
256
+ enable_validation: bool | None = None,
250
257
  custom_response_validation_http_code: int | HTTPStatus | None = None,
251
258
  middlewares: list[Callable] | None = None,
252
259
  ):
@@ -267,6 +274,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
267
274
  security,
268
275
  openapi_extensions,
269
276
  deprecated,
277
+ enable_validation,
270
278
  custom_response_validation_http_code,
271
279
  middlewares,
272
280
  )
@@ -288,6 +296,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
288
296
  include_in_schema: bool = True,
289
297
  openapi_extensions: dict[str, Any] | None = None,
290
298
  deprecated: bool = False,
299
+ enable_validation: bool | None = None,
291
300
  custom_response_validation_http_code: int | HTTPStatus | None = None,
292
301
  middlewares: list[Callable[..., Any]] | None = None,
293
302
  ):
@@ -308,6 +317,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
308
317
  security,
309
318
  openapi_extensions,
310
319
  deprecated,
320
+ enable_validation,
311
321
  custom_response_validation_http_code,
312
322
  middlewares,
313
323
  )