aws-lambda-powertools 3.8.1a4__tar.gz → 3.8.1a6__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 (265) hide show
  1. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/PKG-INFO +1 -1
  2. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/api_gateway.py +196 -15
  3. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/lambda_function_url.py +4 -0
  4. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +13 -2
  5. aws_lambda_powertools-3.8.1a6/aws_lambda_powertools/event_handler/openapi/config.py +80 -0
  6. aws_lambda_powertools-3.8.1a6/aws_lambda_powertools/event_handler/openapi/constants.py +3 -0
  7. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/exceptions.py +10 -0
  8. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/vpc_lattice.py +22 -2
  9. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/version.py +1 -1
  10. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/s3.py +2 -2
  11. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/pyproject.toml +3 -3
  12. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/setup.py +1 -1
  13. aws_lambda_powertools-3.8.1a4/aws_lambda_powertools/event_handler/openapi/constants.py +0 -2
  14. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/LICENSE +0 -0
  15. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/README.md +0 -0
  16. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/THIRD-PARTY-LICENSES +0 -0
  17. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/__init__.py +0 -0
  18. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/__init__.py +0 -0
  19. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/appsync.py +0 -0
  20. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
  21. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/content_types.py +0 -0
  22. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
  23. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
  24. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
  25. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
  26. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
  27. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
  28. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
  29. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
  30. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
  31. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
  32. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
  33. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
  34. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
  35. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
  36. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
  37. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
  38. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
  39. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
  40. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
  41. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
  42. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
  43. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
  44. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/router.py +0 -0
  45. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/types.py +0 -0
  46. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/util.py +0 -0
  47. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/exceptions/__init__.py +0 -0
  48. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/__init__.py +0 -0
  49. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/buffer/__init__.py +0 -0
  50. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/buffer/cache.py +0 -0
  51. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/buffer/config.py +0 -0
  52. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/buffer/functions.py +0 -0
  53. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/constants.py +0 -0
  54. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
  55. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/exceptions.py +0 -0
  56. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/filters.py +0 -0
  57. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/formatter.py +0 -0
  58. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
  59. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
  60. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/lambda_context.py +0 -0
  61. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/logger.py +0 -0
  62. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/types.py +0 -0
  63. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/utils.py +0 -0
  64. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/__init__.py +0 -0
  65. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/base.py +0 -0
  66. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/exceptions.py +0 -0
  67. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/functions.py +0 -0
  68. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/metric.py +0 -0
  69. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/metrics.py +0 -0
  70. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
  71. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/base.py +0 -0
  72. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
  73. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
  74. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
  75. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
  76. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
  77. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
  78. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
  79. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
  80. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
  81. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
  82. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
  83. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/types.py +0 -0
  84. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
  85. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
  86. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
  87. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/package_logger.py +0 -0
  88. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/py.typed +0 -0
  89. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/__init__.py +0 -0
  90. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/cache_dict.py +0 -0
  91. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/constants.py +0 -0
  92. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/cookies.py +0 -0
  93. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
  94. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/functions.py +0 -0
  95. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
  96. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/json_encoder.py +0 -0
  97. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/lazy_import.py +0 -0
  98. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/types.py +0 -0
  99. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/user_agent.py +0 -0
  100. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/tracing/__init__.py +0 -0
  101. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/tracing/base.py +0 -0
  102. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/tracing/extensions.py +0 -0
  103. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/tracing/tracer.py +0 -0
  104. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/__init__.py +0 -0
  105. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
  106. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/base.py +0 -0
  107. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
  108. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
  109. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
  110. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/types.py +0 -0
  111. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
  112. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
  113. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
  114. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
  115. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
  116. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
  117. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
  118. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
  119. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
  120. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
  121. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
  122. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
  123. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
  124. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
  125. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
  126. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +0 -0
  127. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
  128. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
  129. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
  130. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
  131. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
  132. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
  133. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
  134. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/iot_registry_event.py +0 -0
  135. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
  136. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
  137. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
  138. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
  139. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
  140. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
  141. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
  142. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
  143. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
  144. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
  145. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
  146. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
  147. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
  148. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +0 -0
  149. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
  150. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
  151. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
  152. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
  153. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
  154. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
  155. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
  156. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
  157. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
  158. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
  159. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
  160. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
  161. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
  162. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
  163. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
  164. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
  165. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
  166. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
  167. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
  168. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
  169. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
  170. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
  171. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
  172. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
  173. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
  174. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
  175. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
  176. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
  177. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
  178. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
  179. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
  180. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
  181. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
  182. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/functions.py +0 -0
  183. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
  184. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
  185. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
  186. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
  187. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
  188. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
  189. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
  190. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
  191. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
  192. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
  193. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
  194. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
  195. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
  196. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
  197. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
  198. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
  199. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/apigw_websocket.py +0 -0
  200. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
  201. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
  202. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
  203. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
  204. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
  205. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
  206. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
  207. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
  208. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
  209. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
  210. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
  211. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
  212. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
  213. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
  214. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
  215. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/functions.py +0 -0
  216. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
  217. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
  218. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
  219. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/apigw_websocket.py +0 -0
  220. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
  221. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
  222. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
  223. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
  224. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
  225. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
  226. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/iot_registry_events.py +0 -0
  227. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
  228. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
  229. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
  230. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
  231. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
  232. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
  233. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
  234. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
  235. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
  236. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
  237. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
  238. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/transfer_family.py +0 -0
  239. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
  240. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
  241. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
  242. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/types.py +0 -0
  243. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/serialization.py +0 -0
  244. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
  245. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
  246. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
  247. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
  248. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
  249. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
  250. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
  251. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
  252. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
  253. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
  254. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
  255. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
  256. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
  257. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
  258. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
  259. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
  260. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
  261. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/base.py +0 -0
  262. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
  263. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
  264. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
  265. {aws_lambda_powertools-3.8.1a4 → aws_lambda_powertools-3.8.1a6}/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.8.1a4
3
+ Version: 3.8.1a6
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
@@ -18,8 +18,17 @@ from typing_extensions import override
18
18
 
19
19
  from aws_lambda_powertools.event_handler import content_types
20
20
  from aws_lambda_powertools.event_handler.exceptions import NotFoundError, ServiceError
21
- from aws_lambda_powertools.event_handler.openapi.constants import DEFAULT_API_VERSION, DEFAULT_OPENAPI_VERSION
22
- from aws_lambda_powertools.event_handler.openapi.exceptions import RequestValidationError, SchemaValidationError
21
+ from aws_lambda_powertools.event_handler.openapi.config import OpenAPIConfig
22
+ from aws_lambda_powertools.event_handler.openapi.constants import (
23
+ DEFAULT_API_VERSION,
24
+ DEFAULT_OPENAPI_TITLE,
25
+ DEFAULT_OPENAPI_VERSION,
26
+ )
27
+ from aws_lambda_powertools.event_handler.openapi.exceptions import (
28
+ RequestValidationError,
29
+ ResponseValidationError,
30
+ SchemaValidationError,
31
+ )
23
32
  from aws_lambda_powertools.event_handler.openapi.types import (
24
33
  COMPONENT_REF_PREFIX,
25
34
  METHODS_WITH_BODY,
@@ -1496,6 +1505,7 @@ class ApiGatewayResolver(BaseRouter):
1496
1505
  serializer: Callable[[dict], str] | None = None,
1497
1506
  strip_prefixes: list[str | Pattern] | None = None,
1498
1507
  enable_validation: bool = False,
1508
+ response_validation_error_http_code: HTTPStatus | int | None = None,
1499
1509
  ):
1500
1510
  """
1501
1511
  Parameters
@@ -1515,6 +1525,8 @@ class ApiGatewayResolver(BaseRouter):
1515
1525
  Each prefix can be a static string or a compiled regex pattern
1516
1526
  enable_validation: bool | None
1517
1527
  Enables validation of the request body against the route schema, by default False.
1528
+ response_validation_error_http_code
1529
+ Sets the returned status code if response is not validated. enable_validation must be True.
1518
1530
  """
1519
1531
  self._proxy_type = proxy_type
1520
1532
  self._dynamic_routes: list[Route] = []
@@ -1530,6 +1542,12 @@ class ApiGatewayResolver(BaseRouter):
1530
1542
  self.context: dict = {} # early init as customers might add context before event resolution
1531
1543
  self.processed_stack_frames = []
1532
1544
  self._response_builder_class = ResponseBuilder[BaseProxyEvent]
1545
+ self.openapi_config = OpenAPIConfig() # starting an empty dataclass
1546
+ self._has_response_validation_error = response_validation_error_http_code is not None
1547
+ self._response_validation_error_http_code = self._validate_response_validation_error_http_code(
1548
+ response_validation_error_http_code,
1549
+ enable_validation,
1550
+ )
1533
1551
 
1534
1552
  # Allow for a custom serializer or a concise json serialization
1535
1553
  self._serializer = serializer or partial(json.dumps, separators=(",", ":"), cls=Encoder)
@@ -1539,12 +1557,41 @@ class ApiGatewayResolver(BaseRouter):
1539
1557
 
1540
1558
  # Note the serializer argument: only use custom serializer if provided by the caller
1541
1559
  # Otherwise, fully rely on the internal Pydantic based mechanism to serialize responses for validation.
1542
- self.use([OpenAPIValidationMiddleware(validation_serializer=serializer)])
1560
+ self.use(
1561
+ [
1562
+ OpenAPIValidationMiddleware(
1563
+ validation_serializer=serializer,
1564
+ has_response_validation_error=self._has_response_validation_error,
1565
+ ),
1566
+ ],
1567
+ )
1568
+
1569
+ def _validate_response_validation_error_http_code(
1570
+ self,
1571
+ response_validation_error_http_code: HTTPStatus | int | None,
1572
+ enable_validation: bool,
1573
+ ) -> HTTPStatus:
1574
+ if response_validation_error_http_code and not enable_validation:
1575
+ msg = "'response_validation_error_http_code' cannot be set when enable_validation is False."
1576
+ raise ValueError(msg)
1577
+
1578
+ if (
1579
+ not isinstance(response_validation_error_http_code, HTTPStatus)
1580
+ and response_validation_error_http_code is not None
1581
+ ):
1582
+
1583
+ try:
1584
+ response_validation_error_http_code = HTTPStatus(response_validation_error_http_code)
1585
+ except ValueError:
1586
+ msg = f"'{response_validation_error_http_code}' must be an integer representing an HTTP status code."
1587
+ raise ValueError(msg) from None
1588
+
1589
+ return response_validation_error_http_code or HTTPStatus.UNPROCESSABLE_ENTITY
1543
1590
 
1544
1591
  def get_openapi_schema(
1545
1592
  self,
1546
1593
  *,
1547
- title: str = "Powertools API",
1594
+ title: str = DEFAULT_OPENAPI_TITLE,
1548
1595
  version: str = DEFAULT_API_VERSION,
1549
1596
  openapi_version: str = DEFAULT_OPENAPI_VERSION,
1550
1597
  summary: str | None = None,
@@ -1596,6 +1643,29 @@ class ApiGatewayResolver(BaseRouter):
1596
1643
  The OpenAPI schema as a pydantic model.
1597
1644
  """
1598
1645
 
1646
+ # DEPRECATION: Will be removed in v4.0.0. Use configure_api() instead.
1647
+ # Maintained for backwards compatibility.
1648
+ # See: https://github.com/aws-powertools/powertools-lambda-python/issues/6122
1649
+ if title == DEFAULT_OPENAPI_TITLE and self.openapi_config.title:
1650
+ title = self.openapi_config.title
1651
+
1652
+ if version == DEFAULT_API_VERSION and self.openapi_config.version:
1653
+ version = self.openapi_config.version
1654
+
1655
+ if openapi_version == DEFAULT_OPENAPI_VERSION and self.openapi_config.openapi_version:
1656
+ openapi_version = self.openapi_config.openapi_version
1657
+
1658
+ summary = summary or self.openapi_config.summary
1659
+ description = description or self.openapi_config.description
1660
+ tags = tags or self.openapi_config.tags
1661
+ servers = servers or self.openapi_config.servers
1662
+ terms_of_service = terms_of_service or self.openapi_config.terms_of_service
1663
+ contact = contact or self.openapi_config.contact
1664
+ license_info = license_info or self.openapi_config.license_info
1665
+ security_schemes = security_schemes or self.openapi_config.security_schemes
1666
+ security = security or self.openapi_config.security
1667
+ openapi_extensions = openapi_extensions or self.openapi_config.openapi_extensions
1668
+
1599
1669
  from aws_lambda_powertools.event_handler.openapi.compat import (
1600
1670
  GenerateJsonSchema,
1601
1671
  get_compat_model_name_map,
@@ -1694,7 +1764,7 @@ class ApiGatewayResolver(BaseRouter):
1694
1764
 
1695
1765
  # If the 'servers' property is not provided or is an empty array,
1696
1766
  # the default behavior is to return a Server Object with a URL value of "/".
1697
- return servers if servers else [Server(url="/")]
1767
+ return servers or [Server(url="/")]
1698
1768
 
1699
1769
  @staticmethod
1700
1770
  def _get_openapi_security(
@@ -1726,7 +1796,7 @@ class ApiGatewayResolver(BaseRouter):
1726
1796
  def get_openapi_json_schema(
1727
1797
  self,
1728
1798
  *,
1729
- title: str = "Powertools API",
1799
+ title: str = DEFAULT_OPENAPI_TITLE,
1730
1800
  version: str = DEFAULT_API_VERSION,
1731
1801
  openapi_version: str = DEFAULT_OPENAPI_VERSION,
1732
1802
  summary: str | None = None,
@@ -1777,6 +1847,7 @@ class ApiGatewayResolver(BaseRouter):
1777
1847
  str
1778
1848
  The OpenAPI schema as a JSON serializable dict.
1779
1849
  """
1850
+
1780
1851
  from aws_lambda_powertools.event_handler.openapi.compat import model_json
1781
1852
 
1782
1853
  return model_json(
@@ -1800,11 +1871,94 @@ class ApiGatewayResolver(BaseRouter):
1800
1871
  indent=2,
1801
1872
  )
1802
1873
 
1874
+ def configure_openapi(
1875
+ self,
1876
+ title: str = DEFAULT_OPENAPI_TITLE,
1877
+ version: str = DEFAULT_API_VERSION,
1878
+ openapi_version: str = DEFAULT_OPENAPI_VERSION,
1879
+ summary: str | None = None,
1880
+ description: str | None = None,
1881
+ tags: list[Tag | str] | None = None,
1882
+ servers: list[Server] | None = None,
1883
+ terms_of_service: str | None = None,
1884
+ contact: Contact | None = None,
1885
+ license_info: License | None = None,
1886
+ security_schemes: dict[str, SecurityScheme] | None = None,
1887
+ security: list[dict[str, list[str]]] | None = None,
1888
+ openapi_extensions: dict[str, Any] | None = None,
1889
+ ):
1890
+ """Configure OpenAPI specification settings for the API.
1891
+
1892
+ Sets up the OpenAPI documentation configuration that can be later used
1893
+ when enabling Swagger UI or generating OpenAPI specifications.
1894
+
1895
+ Parameters
1896
+ ----------
1897
+ title: str
1898
+ The title of the application.
1899
+ version: str
1900
+ The version of the OpenAPI document (which is distinct from the OpenAPI Specification version or the API
1901
+ openapi_version: str, default = "3.0.0"
1902
+ The version of the OpenAPI Specification (which the document uses).
1903
+ summary: str, optional
1904
+ A short summary of what the application does.
1905
+ description: str, optional
1906
+ A verbose explanation of the application behavior.
1907
+ tags: list[Tag, str], optional
1908
+ A list of tags used by the specification with additional metadata.
1909
+ servers: list[Server], optional
1910
+ An array of Server Objects, which provide connectivity information to a target server.
1911
+ terms_of_service: str, optional
1912
+ A URL to the Terms of Service for the API. MUST be in the format of a URL.
1913
+ contact: Contact, optional
1914
+ The contact information for the exposed API.
1915
+ license_info: License, optional
1916
+ The license information for the exposed API.
1917
+ security_schemes: dict[str, SecurityScheme]], optional
1918
+ A declaration of the security schemes available to be used in the specification.
1919
+ security: list[dict[str, list[str]]], optional
1920
+ A declaration of which security mechanisms are applied globally across the API.
1921
+ openapi_extensions: Dict[str, Any], optional
1922
+ Additional OpenAPI extensions as a dictionary.
1923
+
1924
+ Example
1925
+ --------
1926
+ >>> api.configure_openapi(
1927
+ ... title="My API",
1928
+ ... version="1.0.0",
1929
+ ... description="API for managing resources",
1930
+ ... contact=Contact(
1931
+ ... name="API Support",
1932
+ ... email="support@example.com"
1933
+ ... )
1934
+ ... )
1935
+
1936
+ See Also
1937
+ --------
1938
+ enable_swagger : Method to enable Swagger UI using these configurations
1939
+ OpenAPIConfig : Data class containing all OpenAPI configuration options
1940
+ """
1941
+ self.openapi_config = OpenAPIConfig(
1942
+ title=title,
1943
+ version=version,
1944
+ openapi_version=openapi_version,
1945
+ summary=summary,
1946
+ description=description,
1947
+ tags=tags,
1948
+ servers=servers,
1949
+ terms_of_service=terms_of_service,
1950
+ contact=contact,
1951
+ license_info=license_info,
1952
+ security_schemes=security_schemes,
1953
+ security=security,
1954
+ openapi_extensions=openapi_extensions,
1955
+ )
1956
+
1803
1957
  def enable_swagger(
1804
1958
  self,
1805
1959
  *,
1806
1960
  path: str = "/swagger",
1807
- title: str = "Powertools for AWS Lambda (Python) API",
1961
+ title: str = DEFAULT_OPENAPI_TITLE,
1808
1962
  version: str = DEFAULT_API_VERSION,
1809
1963
  openapi_version: str = DEFAULT_OPENAPI_VERSION,
1810
1964
  summary: str | None = None,
@@ -1867,6 +2021,7 @@ class ApiGatewayResolver(BaseRouter):
1867
2021
  openapi_extensions: dict[str, Any], optional
1868
2022
  Additional OpenAPI extensions as a dictionary.
1869
2023
  """
2024
+
1870
2025
  from aws_lambda_powertools.event_handler.openapi.compat import model_json
1871
2026
  from aws_lambda_powertools.event_handler.openapi.models import Server
1872
2027
  from aws_lambda_powertools.event_handler.openapi.swagger_ui import (
@@ -2111,10 +2266,7 @@ class ApiGatewayResolver(BaseRouter):
2111
2266
  @staticmethod
2112
2267
  def _has_debug(debug: bool | None = None) -> bool:
2113
2268
  # It might have been explicitly switched off (debug=False)
2114
- if debug is not None:
2115
- return debug
2116
-
2117
- return powertools_dev_is_set()
2269
+ return debug if debug is not None else powertools_dev_is_set()
2118
2270
 
2119
2271
  @staticmethod
2120
2272
  def _compile_regex(rule: str, base_regex: str = _ROUTE_REGEX):
@@ -2227,7 +2379,7 @@ class ApiGatewayResolver(BaseRouter):
2227
2379
  if not isinstance(prefix, str) or prefix == "":
2228
2380
  return False
2229
2381
 
2230
- return path.startswith(prefix + "/")
2382
+ return path.startswith(f"{prefix}/")
2231
2383
 
2232
2384
  def _handle_not_found(self, method: str, path: str) -> ResponseBuilder:
2233
2385
  """Called when no matching route was found and includes support for the cors preflight response"""
@@ -2370,6 +2522,21 @@ class ApiGatewayResolver(BaseRouter):
2370
2522
  route=route,
2371
2523
  )
2372
2524
 
2525
+ # OpenAPIValidationMiddleware will only raise ResponseValidationError when
2526
+ # 'self._response_validation_error_http_code' is not None
2527
+ if isinstance(exp, ResponseValidationError):
2528
+ http_code = self._response_validation_error_http_code
2529
+ errors = [{"loc": e["loc"], "type": e["type"]} for e in exp.errors()]
2530
+ return self._response_builder_class(
2531
+ response=Response(
2532
+ status_code=http_code.value,
2533
+ content_type=content_types.APPLICATION_JSON,
2534
+ body={"statusCode": self._response_validation_error_http_code, "detail": errors},
2535
+ ),
2536
+ serializer=self._serializer,
2537
+ route=route,
2538
+ )
2539
+
2373
2540
  if isinstance(exp, ServiceError):
2374
2541
  return self._response_builder_class(
2375
2542
  response=Response(
@@ -2483,8 +2650,9 @@ class ApiGatewayResolver(BaseRouter):
2483
2650
  if route.dependant.response_extra_models:
2484
2651
  responses_from_routes.extend(route.dependant.response_extra_models)
2485
2652
 
2486
- flat_models = list(responses_from_routes + request_fields_from_routes + body_fields_from_routes)
2487
- return flat_models
2653
+ return list(
2654
+ responses_from_routes + request_fields_from_routes + body_fields_from_routes,
2655
+ )
2488
2656
 
2489
2657
 
2490
2658
  class Router(BaseRouter):
@@ -2582,6 +2750,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
2582
2750
  serializer: Callable[[dict], str] | None = None,
2583
2751
  strip_prefixes: list[str | Pattern] | None = None,
2584
2752
  enable_validation: bool = False,
2753
+ response_validation_error_http_code: HTTPStatus | int | None = None,
2585
2754
  ):
2586
2755
  """Amazon API Gateway REST and HTTP API v1 payload resolver"""
2587
2756
  super().__init__(
@@ -2591,6 +2760,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
2591
2760
  serializer,
2592
2761
  strip_prefixes,
2593
2762
  enable_validation,
2763
+ response_validation_error_http_code,
2594
2764
  )
2595
2765
 
2596
2766
  def _get_base_path(self) -> str:
@@ -2664,6 +2834,7 @@ class APIGatewayHttpResolver(ApiGatewayResolver):
2664
2834
  serializer: Callable[[dict], str] | None = None,
2665
2835
  strip_prefixes: list[str | Pattern] | None = None,
2666
2836
  enable_validation: bool = False,
2837
+ response_validation_error_http_code: HTTPStatus | int | None = None,
2667
2838
  ):
2668
2839
  """Amazon API Gateway HTTP API v2 payload resolver"""
2669
2840
  super().__init__(
@@ -2673,6 +2844,7 @@ class APIGatewayHttpResolver(ApiGatewayResolver):
2673
2844
  serializer,
2674
2845
  strip_prefixes,
2675
2846
  enable_validation,
2847
+ response_validation_error_http_code,
2676
2848
  )
2677
2849
 
2678
2850
  def _get_base_path(self) -> str:
@@ -2701,9 +2873,18 @@ class ALBResolver(ApiGatewayResolver):
2701
2873
  serializer: Callable[[dict], str] | None = None,
2702
2874
  strip_prefixes: list[str | Pattern] | None = None,
2703
2875
  enable_validation: bool = False,
2876
+ response_validation_error_http_code: HTTPStatus | int | None = None,
2704
2877
  ):
2705
2878
  """Amazon Application Load Balancer (ALB) resolver"""
2706
- super().__init__(ProxyEventType.ALBEvent, cors, debug, serializer, strip_prefixes, enable_validation)
2879
+ super().__init__(
2880
+ ProxyEventType.ALBEvent,
2881
+ cors,
2882
+ debug,
2883
+ serializer,
2884
+ strip_prefixes,
2885
+ enable_validation,
2886
+ response_validation_error_http_code,
2887
+ )
2707
2888
 
2708
2889
  def _get_base_path(self) -> str:
2709
2890
  # ALB doesn't have a stage variable, so we just return an empty string
@@ -8,6 +8,8 @@ from aws_lambda_powertools.event_handler.api_gateway import (
8
8
  )
9
9
 
10
10
  if TYPE_CHECKING:
11
+ from http import HTTPStatus
12
+
11
13
  from aws_lambda_powertools.event_handler import CORSConfig
12
14
  from aws_lambda_powertools.utilities.data_classes import LambdaFunctionUrlEvent
13
15
 
@@ -57,6 +59,7 @@ class LambdaFunctionUrlResolver(ApiGatewayResolver):
57
59
  serializer: Callable[[dict], str] | None = None,
58
60
  strip_prefixes: list[str | Pattern] | None = None,
59
61
  enable_validation: bool = False,
62
+ response_validation_error_http_code: HTTPStatus | int | None = None,
60
63
  ):
61
64
  super().__init__(
62
65
  ProxyEventType.LambdaFunctionUrlEvent,
@@ -65,6 +68,7 @@ class LambdaFunctionUrlResolver(ApiGatewayResolver):
65
68
  serializer,
66
69
  strip_prefixes,
67
70
  enable_validation,
71
+ response_validation_error_http_code,
68
72
  )
69
73
 
70
74
  def _get_base_path(self) -> str:
@@ -17,7 +17,7 @@ from aws_lambda_powertools.event_handler.openapi.compat import (
17
17
  )
18
18
  from aws_lambda_powertools.event_handler.openapi.dependant import is_scalar_field
19
19
  from aws_lambda_powertools.event_handler.openapi.encoders import jsonable_encoder
20
- from aws_lambda_powertools.event_handler.openapi.exceptions import RequestValidationError
20
+ from aws_lambda_powertools.event_handler.openapi.exceptions import RequestValidationError, ResponseValidationError
21
21
  from aws_lambda_powertools.event_handler.openapi.params import Param
22
22
 
23
23
  if TYPE_CHECKING:
@@ -58,7 +58,11 @@ class OpenAPIValidationMiddleware(BaseMiddlewareHandler):
58
58
  ```
59
59
  """
60
60
 
61
- def __init__(self, validation_serializer: Callable[[Any], str] | None = None):
61
+ def __init__(
62
+ self,
63
+ validation_serializer: Callable[[Any], str] | None = None,
64
+ has_response_validation_error: bool = False,
65
+ ):
62
66
  """
63
67
  Initialize the OpenAPIValidationMiddleware.
64
68
 
@@ -67,8 +71,13 @@ class OpenAPIValidationMiddleware(BaseMiddlewareHandler):
67
71
  validation_serializer : Callable, optional
68
72
  Optional serializer to use when serializing the response for validation.
69
73
  Use it when you have a custom type that cannot be serialized by the default jsonable_encoder.
74
+
75
+ has_response_validation_error: bool, optional
76
+ Optional flag used to distinguish between payload and validation errors.
77
+ By setting this flag to True, ResponseValidationError will be raised if response could not be validated.
70
78
  """
71
79
  self._validation_serializer = validation_serializer
80
+ self._has_response_validation_error = has_response_validation_error
72
81
 
73
82
  def handler(self, app: EventHandlerInstance, next_middleware: NextMiddleware) -> Response:
74
83
  logger.debug("OpenAPIValidationMiddleware handler")
@@ -164,6 +173,8 @@ class OpenAPIValidationMiddleware(BaseMiddlewareHandler):
164
173
  errors: list[dict[str, Any]] = []
165
174
  value = _validate_field(field=field, value=response_content, loc=("response",), existing_errors=errors)
166
175
  if errors:
176
+ if self._has_response_validation_error:
177
+ raise ResponseValidationError(errors=_normalize_errors(errors), body=response_content)
167
178
  raise RequestValidationError(errors=_normalize_errors(errors), body=response_content)
168
179
 
169
180
  if hasattr(field, "serialize"):
@@ -0,0 +1,80 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import TYPE_CHECKING, Any
5
+
6
+ from aws_lambda_powertools.event_handler.openapi.constants import (
7
+ DEFAULT_API_VERSION,
8
+ DEFAULT_OPENAPI_TITLE,
9
+ DEFAULT_OPENAPI_VERSION,
10
+ )
11
+
12
+ if TYPE_CHECKING:
13
+ from aws_lambda_powertools.event_handler.openapi.models import (
14
+ Contact,
15
+ License,
16
+ SecurityScheme,
17
+ Server,
18
+ Tag,
19
+ )
20
+
21
+
22
+ @dataclass
23
+ class OpenAPIConfig:
24
+ """Configuration class for OpenAPI specification.
25
+
26
+ This class holds all the necessary configuration parameters to generate an OpenAPI specification.
27
+
28
+ Parameters
29
+ ----------
30
+ title: str
31
+ The title of the application.
32
+ version: str
33
+ The version of the OpenAPI document (which is distinct from the OpenAPI Specification version or the API
34
+ openapi_version: str, default = "3.0.0"
35
+ The version of the OpenAPI Specification (which the document uses).
36
+ summary: str, optional
37
+ A short summary of what the application does.
38
+ description: str, optional
39
+ A verbose explanation of the application behavior.
40
+ tags: list[Tag, str], optional
41
+ A list of tags used by the specification with additional metadata.
42
+ servers: list[Server], optional
43
+ An array of Server Objects, which provide connectivity information to a target server.
44
+ terms_of_service: str, optional
45
+ A URL to the Terms of Service for the API. MUST be in the format of a URL.
46
+ contact: Contact, optional
47
+ The contact information for the exposed API.
48
+ license_info: License, optional
49
+ The license information for the exposed API.
50
+ security_schemes: dict[str, SecurityScheme]], optional
51
+ A declaration of the security schemes available to be used in the specification.
52
+ security: list[dict[str, list[str]]], optional
53
+ A declaration of which security mechanisms are applied globally across the API.
54
+ openapi_extensions: Dict[str, Any], optional
55
+ Additional OpenAPI extensions as a dictionary.
56
+
57
+ Example
58
+ --------
59
+ >>> config = OpenAPIConfig(
60
+ ... title="My API",
61
+ ... version="1.0.0",
62
+ ... description="This is my API description",
63
+ ... contact=Contact(name="API Support", email="support@example.com"),
64
+ ... servers=[Server(url="https://api.example.com/v1")]
65
+ ... )
66
+ """
67
+
68
+ title: str = DEFAULT_OPENAPI_TITLE
69
+ version: str = DEFAULT_API_VERSION
70
+ openapi_version: str = DEFAULT_OPENAPI_VERSION
71
+ summary: str | None = None
72
+ description: str | None = None
73
+ tags: list[Tag | str] | None = None
74
+ servers: list[Server] | None = None
75
+ terms_of_service: str | None = None
76
+ contact: Contact | None = None
77
+ license_info: License | None = None
78
+ security_schemes: dict[str, SecurityScheme] | None = None
79
+ security: list[dict[str, list[str]]] | None = None
80
+ openapi_extensions: dict[str, Any] | None = None
@@ -0,0 +1,3 @@
1
+ DEFAULT_API_VERSION = "1.0.0"
2
+ DEFAULT_OPENAPI_VERSION = "3.1.0"
3
+ DEFAULT_OPENAPI_TITLE = "Powertools for AWS Lambda (Python) API"
@@ -23,6 +23,16 @@ class RequestValidationError(ValidationException):
23
23
  self.body = body
24
24
 
25
25
 
26
+ class ResponseValidationError(ValidationException):
27
+ """
28
+ Raised when the response body does not match the OpenAPI schema
29
+ """
30
+
31
+ def __init__(self, errors: Sequence[Any], *, body: Any = None) -> None:
32
+ super().__init__(errors)
33
+ self.body = body
34
+
35
+
26
36
  class SerializationError(Exception):
27
37
  """
28
38
  Base exception for all encoding errors
@@ -8,6 +8,8 @@ from aws_lambda_powertools.event_handler.api_gateway import (
8
8
  )
9
9
 
10
10
  if TYPE_CHECKING:
11
+ from http import HTTPStatus
12
+
11
13
  from aws_lambda_powertools.event_handler import CORSConfig
12
14
  from aws_lambda_powertools.utilities.data_classes import VPCLatticeEvent, VPCLatticeEventV2
13
15
 
@@ -53,9 +55,18 @@ class VPCLatticeResolver(ApiGatewayResolver):
53
55
  serializer: Callable[[dict], str] | None = None,
54
56
  strip_prefixes: list[str | Pattern] | None = None,
55
57
  enable_validation: bool = False,
58
+ response_validation_error_http_code: HTTPStatus | int | None = None,
56
59
  ):
57
60
  """Amazon VPC Lattice resolver"""
58
- super().__init__(ProxyEventType.VPCLatticeEvent, cors, debug, serializer, strip_prefixes, enable_validation)
61
+ super().__init__(
62
+ ProxyEventType.VPCLatticeEvent,
63
+ cors,
64
+ debug,
65
+ serializer,
66
+ strip_prefixes,
67
+ enable_validation,
68
+ response_validation_error_http_code,
69
+ )
59
70
 
60
71
  def _get_base_path(self) -> str:
61
72
  return ""
@@ -102,9 +113,18 @@ class VPCLatticeV2Resolver(ApiGatewayResolver):
102
113
  serializer: Callable[[dict], str] | None = None,
103
114
  strip_prefixes: list[str | Pattern] | None = None,
104
115
  enable_validation: bool = False,
116
+ response_validation_error_http_code: HTTPStatus | int | None = None,
105
117
  ):
106
118
  """Amazon VPC Lattice resolver"""
107
- super().__init__(ProxyEventType.VPCLatticeEventV2, cors, debug, serializer, strip_prefixes, enable_validation)
119
+ super().__init__(
120
+ ProxyEventType.VPCLatticeEventV2,
121
+ cors,
122
+ debug,
123
+ serializer,
124
+ strip_prefixes,
125
+ enable_validation,
126
+ response_validation_error_http_code,
127
+ )
108
128
 
109
129
  def _get_base_path(self) -> str:
110
130
  return ""
@@ -1,3 +1,3 @@
1
1
  """Exposes version constant to avoid circular dependencies."""
2
2
 
3
- VERSION = "3.8.1a4"
3
+ VERSION = "3.8.1a6"
@@ -53,7 +53,7 @@ class S3Message(BaseModel):
53
53
  s3SchemaVersion: str
54
54
  configurationId: str
55
55
  bucket: S3Bucket
56
- object: S3Object # noqa: A003,VNE003
56
+ object: S3Object # noqa: A003
57
57
 
58
58
 
59
59
  class S3EventNotificationObjectModel(BaseModel):
@@ -71,7 +71,7 @@ class S3EventNotificationEventBridgeBucketModel(BaseModel):
71
71
  class S3EventNotificationEventBridgeDetailModel(BaseModel):
72
72
  version: str
73
73
  bucket: S3EventNotificationEventBridgeBucketModel
74
- object: S3EventNotificationObjectModel # noqa: A003,VNE003
74
+ object: S3EventNotificationObjectModel # noqa: A003
75
75
  request_id: str = Field(..., alias="request-id")
76
76
  requester: str
77
77
  source_ip_address: Optional[str] = Field(None, alias="source-ip-address")
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "aws_lambda_powertools"
3
- version = "3.8.1a4"
3
+ version = "3.8.1a6"
4
4
  description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity."
5
5
  authors = ["Amazon Web Services"]
6
6
  include = ["aws_lambda_powertools/py.typed", "THIRD-PARTY-LICENSES"]
@@ -107,13 +107,13 @@ hvac = "^2.3.0"
107
107
  aws-requests-auth = "^0.4.3"
108
108
  urllib3 = "<2"
109
109
  requests = ">=2.32.0"
110
- cfn-lint = "1.29.1"
110
+ cfn-lint = "1.30.0"
111
111
  mypy = "^1.1.1"
112
112
  types-python-dateutil = "^2.8.19.6"
113
113
  aws-cdk-aws-appsync-alpha = "^2.59.0a0"
114
114
  httpx = ">=0.23.3,<0.29.0"
115
115
  sentry-sdk = ">=1.22.2,<3.0.0"
116
- ruff = ">=0.5.1,<0.9.11"
116
+ ruff = ">=0.5.1,<0.11.1"
117
117
  retry2 = "^0.9.5"
118
118
  pytest-socket = ">=0.6,<0.8"
119
119
  types-redis = "^4.6.0.7"
@@ -65,7 +65,7 @@ extras_require = \
65
65
 
66
66
  setup_kwargs = {
67
67
  'name': 'aws_lambda_powertools',
68
- 'version': '3.8.1a4',
68
+ 'version': '3.8.1a6',
69
69
  'description': 'Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.',
70
70
  'long_description': '<!-- markdownlint-disable MD013 MD041 MD043 -->\n# Powertools for AWS Lambda (Python)\n\n[![Build](https://github.com/aws-powertools/powertools-lambda-python/actions/workflows/quality_check.yml/badge.svg)](https://github.com/aws-powertools/powertools-lambda-python/actions/workflows/python_build.yml)\n[![codecov.io](https://codecov.io/github/aws-powertools/powertools-lambda-python/branch/develop/graphs/badge.svg)](https://app.codecov.io/gh/aws-powertools/powertools-lambda-python)\n![PythonSupport](https://img.shields.io/static/v1?label=python&message=%203.9|%203.10|%203.11|%203.12|%203.13&color=blue?style=flat-square&logo=python) ![PyPI version](https://badge.fury.io/py/aws-lambda-powertools.svg) ![PyPi monthly downloads](https://img.shields.io/pypi/dm/aws-lambda-powertools) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/aws-powertools/powertools-lambda-python/badge)](https://api.securityscorecards.dev/projects/github.com/aws-powertools/powertools-lambda-python) [![Join our Discord](https://dcbadge.vercel.app/api/server/B8zZKbbyET?style=flat-square)](https://discord.gg/B8zZKbbyET)\n\nPowertools for AWS Lambda (Python) is a developer toolkit to implement Serverless [best practices and increase developer velocity](https://docs.powertools.aws.dev/lambda/python/latest/#features).\n\n> Also available in [Java](https://github.com/aws-powertools/powertools-lambda-java), [Typescript](https://github.com/aws-powertools/powertools-lambda-typescript), and [.NET](https://github.com/aws-powertools/powertools-lambda-dotnet).\n\n**[📜Documentation](https://docs.powertools.aws.dev/lambda/python/)** | **[🐍PyPi](https://pypi.org/project/aws-lambda-powertools/)** | **[Roadmap](https://docs.powertools.aws.dev/lambda/python/latest/roadmap/)** | **[Detailed blog post](https://aws.amazon.com/blogs/opensource/simplifying-serverless-best-practices-with-lambda-powertools/)**\n\n![hero-image](https://user-images.githubusercontent.com/3340292/198254617-d0fdb672-86a6-4988-8a40-adf437135e0a.png)\n\n## Features\n\n* **[Tracing](https://docs.powertools.aws.dev/lambda/python/latest/core/tracer/)** - Decorators and utilities to trace Lambda function handlers, and both synchronous and asynchronous functions\n* **[Logging](https://docs.powertools.aws.dev/lambda/python/latest/core/logger/)** - Structured logging made easier, and decorator to enrich structured logging with key Lambda context details\n* **[Metrics](https://docs.powertools.aws.dev/lambda/python/latest/core/metrics/)** - Custom Metrics created asynchronously via CloudWatch Embedded Metric Format (EMF)\n* **[Event handler: AppSync](https://docs.powertools.aws.dev/lambda/python/latest/core/event_handler/appsync/)** - AWS AppSync event handler for Lambda Direct Resolver and Amplify GraphQL Transformer function\n* **[Event handler: API Gateway and ALB](https://docs.powertools.aws.dev/lambda/python/latest/core/event_handler/api_gateway/)** - Amazon API Gateway REST/HTTP API and ALB event handler for Lambda functions invoked using Proxy integration\n* **[Event handler: Agents for Amazon Bedrock](https://docs.powertools.aws.dev/lambda/python/latest/core/event_handler/bedrock_agents/)** - Create Agents for Amazon Bedrock, automatically generating OpenAPI schemas\n* **[Bring your own middleware](https://docs.powertools.aws.dev/lambda/python/latest/utilities/middleware_factory/)** - Decorator factory to create your own middleware to run logic before, and after each Lambda invocation\n* **[Parameters utility](https://docs.powertools.aws.dev/lambda/python/latest/utilities/parameters/)** - Retrieve and cache parameter values from Parameter Store, Secrets Manager, or DynamoDB\n* **[Batch processing](https://docs.powertools.aws.dev/lambda/python/latest/utilities/batch/)** - Handle partial failures for AWS SQS batch processing\n* **[Typing](https://docs.powertools.aws.dev/lambda/python/latest/utilities/typing/)** - Static typing classes to speedup development in your IDE\n* **[Validation](https://docs.powertools.aws.dev/lambda/python/latest/utilities/validation/)** - JSON Schema validator for inbound events and responses\n* **[Event source data classes](https://docs.powertools.aws.dev/lambda/python/latest/utilities/data_classes/)** - Data classes describing the schema of common Lambda event triggers\n* **[Parser](https://docs.powertools.aws.dev/lambda/python/latest/utilities/parser/)** - Data parsing and deep validation using Pydantic\n* **[Idempotency](https://docs.powertools.aws.dev/lambda/python/latest/utilities/idempotency/)** - Convert your Lambda functions into idempotent operations which are safe to retry\n* **[Data Masking](https://docs.powertools.aws.dev/lambda/python/latest/utilities/data_masking/)** - Protect confidential data with easy removal or encryption\n* **[Feature Flags](https://docs.powertools.aws.dev/lambda/python/latest/utilities/feature_flags/)** - A simple rule engine to evaluate when one or multiple features should be enabled depending on the input\n* **[Streaming](https://docs.powertools.aws.dev/lambda/python/latest/utilities/streaming/)** - Streams datasets larger than the available memory as streaming data.\n\n### Installation\n\nWith [pip](https://pip.pypa.io/en/latest/index.html) installed, run: ``pip install aws-lambda-powertools``\n\n## Tutorial and Examples\n\n* [Tutorial](https://docs.powertools.aws.dev/lambda/python/latest/tutorial)\n* [Serverless Shopping cart](https://github.com/aws-samples/aws-serverless-shopping-cart)\n* [Serverless Airline](https://github.com/aws-samples/aws-serverless-airline-booking)\n* [Serverless E-commerce platform](https://github.com/aws-samples/aws-serverless-ecommerce-platform)\n* [Serverless GraphQL Nanny Booking Api](https://github.com/trey-rosius/babysitter_api)\n\n## How to support Powertools for AWS Lambda (Python)?\n\n### Becoming a reference customer\n\nKnowing which companies are using this library is important to help prioritize the project internally. If your company is using Powertools for AWS Lambda (Python), you can request to have your name and logo added to the README file by raising a [Support Powertools for AWS Lambda (Python) (become a reference)](https://github.com/aws-powertools/powertools-lambda-python/issues/new?assignees=&labels=customer-reference&template=support_powertools.yml&title=%5BSupport+Lambda+Powertools%5D%3A+%3Cyour+organization+name%3E) issue.\n\nThe following companies, among others, use Powertools:\n\n* [Alma Media](https://www.almamedia.fi/en/)\n* [Banxware](https://www.banxware.com/)\n* [Brsk](https://www.brsk.co.uk/)\n* [BusPatrol](https://buspatrol.com/)\n* [Capital One](https://www.capitalone.com/)\n* [Caylent](https://caylent.com/)\n* [CHS Inc.](https://www.chsinc.com/)\n* [CPQi (Exadel Financial Services)](https://cpqi.com/)\n* [CloudZero](https://www.cloudzero.com/)\n* [CyberArk](https://www.cyberark.com/)\n* [Flyweight](https://flyweight.io/)\n* [globaldatanet](https://globaldatanet.com/)\n* [IMS](https://ims.tech/)\n* [Jit Security](https://www.jit.io/)\n* [LocalStack](https://www.localstack.cloud/)\n* [Propellor.ai](https://www.propellor.ai/)\n* [Pushpay](https://pushpay.com/)\n* [Recast](https://getrecast.com/)\n* [TopSport](https://www.topsport.com.au/)\n* [Transformity](https://transformity.tech/)\n* [Trek10](https://www.trek10.com/)\n* [Vertex Pharmaceuticals](https://www.vrtx.com/)\n\n### Sharing your work\n\nShare what you did with Powertools for AWS Lambda (Python) 💞💞. Blog post, workshops, presentation, sample apps and others. Check out what the community has already shared about Powertools for AWS Lambda (Python) [here](https://docs.powertools.aws.dev/lambda/python/latest/we_made_this/).\n\n### Using Lambda Layer or SAR\n\nThis helps us understand who uses Powertools for AWS Lambda (Python) in a non-intrusive way, and helps us gain future investments for other Powertools for AWS Lambda languages. When [using Layers](https://docs.powertools.aws.dev/lambda/python/latest/#lambda-layer), you can add Powertools for AWS Lambda (Python) as a dev dependency (or as part of your virtual env) to not impact the development process.\n\n## Credits\n\n* Structured logging initial implementation from [aws-lambda-logging](https://gitlab.com/hadrien/aws_lambda_logging)\n* Powertools for AWS Lambda (Python) idea [DAZN Powertools](https://github.com/getndazn/dazn-lambda-powertools/)\n\n## Connect\n\n* **Powertools for AWS Lambda on Discord**: `#python` - **[Invite link](https://discord.gg/B8zZKbbyET)**\n* **Email**: <aws-powertools-maintainers@amazon.com>\n\n## Security disclosures\n\nIf you think you’ve found a potential security issue, please do not post it in the Issues. Instead, please follow the instructions [here](https://aws.amazon.com/security/vulnerability-reporting/) or [email AWS security directly](mailto:aws-security@amazon.com).\n\n## License\n\nThis library is licensed under the MIT-0 License. See the LICENSE file.\n',
71
71
  'author': 'Amazon Web Services',
@@ -1,2 +0,0 @@
1
- DEFAULT_API_VERSION = "1.0.0"
2
- DEFAULT_OPENAPI_VERSION = "3.1.0"