aws-lambda-powertools 2.41.1a0__tar.gz → 2.41.1a2__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 (246) hide show
  1. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/PKG-INFO +1 -1
  2. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/api_gateway.py +43 -0
  3. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/bedrock_agent.py +11 -0
  4. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/compat.py +2 -2
  5. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/models.py +63 -6
  6. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/version.py +1 -1
  7. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/pyproject.toml +2 -2
  8. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/setup.py +1 -1
  9. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/LICENSE +0 -0
  10. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/README.md +0 -0
  11. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/THIRD-PARTY-LICENSES +0 -0
  12. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/__init__.py +0 -0
  13. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/__init__.py +0 -0
  14. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/appsync.py +0 -0
  15. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/content_types.py +0 -0
  16. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
  17. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
  18. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
  19. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
  20. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
  21. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
  22. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
  23. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
  24. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
  25. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +0 -0
  26. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
  27. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
  28. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
  29. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
  30. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
  31. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
  32. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
  33. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
  34. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
  35. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
  36. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
  37. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
  38. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
  39. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
  40. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/router.py +0 -0
  41. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/types.py +0 -0
  42. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/util.py +0 -0
  43. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
  44. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/exceptions/__init__.py +0 -0
  45. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/__init__.py +0 -0
  46. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/constants.py +0 -0
  47. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
  48. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/exceptions.py +0 -0
  49. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/filters.py +0 -0
  50. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/formatter.py +0 -0
  51. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
  52. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
  53. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/lambda_context.py +0 -0
  54. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/logger.py +0 -0
  55. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/types.py +0 -0
  56. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/logging/utils.py +0 -0
  57. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/__init__.py +0 -0
  58. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/base.py +0 -0
  59. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/exceptions.py +0 -0
  60. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/functions.py +0 -0
  61. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/metric.py +0 -0
  62. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/metrics.py +0 -0
  63. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
  64. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/base.py +0 -0
  65. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
  66. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
  67. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
  68. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
  69. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
  70. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
  71. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
  72. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
  73. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
  74. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
  75. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
  76. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/metrics/types.py +0 -0
  77. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
  78. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
  79. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
  80. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/package_logger.py +0 -0
  81. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/py.typed +0 -0
  82. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/__init__.py +0 -0
  83. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/cache_dict.py +0 -0
  84. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/constants.py +0 -0
  85. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/cookies.py +0 -0
  86. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/functions.py +0 -0
  87. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
  88. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/json_encoder.py +0 -0
  89. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/lazy_import.py +0 -0
  90. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/types.py +0 -0
  91. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/shared/user_agent.py +0 -0
  92. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/tracing/__init__.py +0 -0
  93. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/tracing/base.py +0 -0
  94. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/tracing/extensions.py +0 -0
  95. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/tracing/tracer.py +0 -0
  96. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/__init__.py +0 -0
  97. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
  98. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/batch/base.py +0 -0
  99. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
  100. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
  101. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
  102. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/batch/types.py +0 -0
  103. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
  104. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
  105. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
  106. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
  107. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
  108. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
  109. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
  110. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
  111. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
  112. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
  113. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
  114. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
  115. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
  116. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
  117. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
  118. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
  119. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
  120. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
  121. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
  122. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
  123. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
  124. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
  125. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
  126. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
  127. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
  128. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
  129. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
  130. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
  131. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
  132. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
  133. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
  134. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
  135. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
  136. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
  137. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
  138. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
  139. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
  140. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
  141. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
  142. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
  143. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
  144. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
  145. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
  146. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
  147. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
  148. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
  149. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
  150. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
  151. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
  152. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
  153. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
  154. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
  155. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
  156. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
  157. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
  158. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
  159. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
  160. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
  161. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
  162. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
  163. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
  164. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
  165. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
  166. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
  167. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
  168. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
  169. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
  170. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
  171. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
  172. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
  173. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
  174. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
  175. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
  176. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
  177. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
  178. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
  179. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
  180. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
  181. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
  182. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/compat.py +0 -0
  183. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
  184. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
  185. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
  186. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
  187. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
  188. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
  189. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
  190. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
  191. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
  192. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
  193. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
  194. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
  195. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
  196. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
  197. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
  198. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
  199. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
  200. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
  201. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
  202. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
  203. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
  204. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
  205. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
  206. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
  207. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
  208. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
  209. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
  210. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
  211. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
  212. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
  213. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
  214. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/s3.py +0 -0
  215. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
  216. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
  217. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
  218. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
  219. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
  220. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
  221. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
  222. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
  223. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
  224. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/pydantic.py +0 -0
  225. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/parser/types.py +0 -0
  226. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/serialization.py +0 -0
  227. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
  228. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
  229. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
  230. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
  231. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
  232. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
  233. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
  234. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
  235. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
  236. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
  237. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
  238. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
  239. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
  240. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
  241. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
  242. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/validation/base.py +0 -0
  243. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
  244. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
  245. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
  246. {aws_lambda_powertools-2.41.1a0 → aws_lambda_powertools-2.41.1a2}/aws_lambda_powertools/warnings/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aws-lambda-powertools
3
- Version: 2.41.1a0
3
+ Version: 2.41.1a2
4
4
  Summary: Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.
5
5
  Home-page: https://github.com/aws-powertools/powertools-lambda-python
6
6
  License: MIT
@@ -323,6 +323,7 @@ class Route:
323
323
  operation_id: Optional[str] = None,
324
324
  include_in_schema: bool = True,
325
325
  security: Optional[List[Dict[str, List[str]]]] = None,
326
+ openapi_extensions: Optional[Dict[str, Any]] = None,
326
327
  middlewares: Optional[List[Callable[..., Response]]] = None,
327
328
  ):
328
329
  """
@@ -360,6 +361,8 @@ class Route:
360
361
  Whether or not to include this route in the OpenAPI schema
361
362
  security: List[Dict[str, List[str]]], optional
362
363
  The OpenAPI security for this route
364
+ openapi_extensions: Dict[str, Any], optional
365
+ Additional OpenAPI extensions as a dictionary.
363
366
  middlewares: Optional[List[Callable[..., Response]]]
364
367
  The list of route middlewares to be called in order.
365
368
  """
@@ -383,6 +386,7 @@ class Route:
383
386
  self.tags = tags or []
384
387
  self.include_in_schema = include_in_schema
385
388
  self.security = security
389
+ self.openapi_extensions = openapi_extensions
386
390
  self.middlewares = middlewares or []
387
391
  self.operation_id = operation_id or self._generate_operation_id()
388
392
 
@@ -534,6 +538,10 @@ class Route:
534
538
  if self.security:
535
539
  operation["security"] = self.security
536
540
 
541
+ # Add OpenAPI extensions if present
542
+ if self.openapi_extensions:
543
+ operation.update(self.openapi_extensions)
544
+
537
545
  # Add the parameters to the OpenAPI operation
538
546
  if parameters:
539
547
  all_parameters = {(param["in"], param["name"]): param for param in parameters}
@@ -939,6 +947,7 @@ class BaseRouter(ABC):
939
947
  operation_id: Optional[str] = None,
940
948
  include_in_schema: bool = True,
941
949
  security: Optional[List[Dict[str, List[str]]]] = None,
950
+ openapi_extensions: Optional[Dict[str, Any]] = None,
942
951
  middlewares: Optional[List[Callable[..., Any]]] = None,
943
952
  ):
944
953
  raise NotImplementedError()
@@ -998,6 +1007,7 @@ class BaseRouter(ABC):
998
1007
  operation_id: Optional[str] = None,
999
1008
  include_in_schema: bool = True,
1000
1009
  security: Optional[List[Dict[str, List[str]]]] = None,
1010
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1001
1011
  middlewares: Optional[List[Callable[..., Any]]] = None,
1002
1012
  ):
1003
1013
  """Get route decorator with GET `method`
@@ -1036,6 +1046,7 @@ class BaseRouter(ABC):
1036
1046
  operation_id,
1037
1047
  include_in_schema,
1038
1048
  security,
1049
+ openapi_extensions,
1039
1050
  middlewares,
1040
1051
  )
1041
1052
 
@@ -1053,6 +1064,7 @@ class BaseRouter(ABC):
1053
1064
  operation_id: Optional[str] = None,
1054
1065
  include_in_schema: bool = True,
1055
1066
  security: Optional[List[Dict[str, List[str]]]] = None,
1067
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1056
1068
  middlewares: Optional[List[Callable[..., Any]]] = None,
1057
1069
  ):
1058
1070
  """Post route decorator with POST `method`
@@ -1092,6 +1104,7 @@ class BaseRouter(ABC):
1092
1104
  operation_id,
1093
1105
  include_in_schema,
1094
1106
  security,
1107
+ openapi_extensions,
1095
1108
  middlewares,
1096
1109
  )
1097
1110
 
@@ -1109,6 +1122,7 @@ class BaseRouter(ABC):
1109
1122
  operation_id: Optional[str] = None,
1110
1123
  include_in_schema: bool = True,
1111
1124
  security: Optional[List[Dict[str, List[str]]]] = None,
1125
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1112
1126
  middlewares: Optional[List[Callable[..., Any]]] = None,
1113
1127
  ):
1114
1128
  """Put route decorator with PUT `method`
@@ -1148,6 +1162,7 @@ class BaseRouter(ABC):
1148
1162
  operation_id,
1149
1163
  include_in_schema,
1150
1164
  security,
1165
+ openapi_extensions,
1151
1166
  middlewares,
1152
1167
  )
1153
1168
 
@@ -1165,6 +1180,7 @@ class BaseRouter(ABC):
1165
1180
  operation_id: Optional[str] = None,
1166
1181
  include_in_schema: bool = True,
1167
1182
  security: Optional[List[Dict[str, List[str]]]] = None,
1183
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1168
1184
  middlewares: Optional[List[Callable[..., Any]]] = None,
1169
1185
  ):
1170
1186
  """Delete route decorator with DELETE `method`
@@ -1203,6 +1219,7 @@ class BaseRouter(ABC):
1203
1219
  operation_id,
1204
1220
  include_in_schema,
1205
1221
  security,
1222
+ openapi_extensions,
1206
1223
  middlewares,
1207
1224
  )
1208
1225
 
@@ -1220,6 +1237,7 @@ class BaseRouter(ABC):
1220
1237
  operation_id: Optional[str] = None,
1221
1238
  include_in_schema: bool = True,
1222
1239
  security: Optional[List[Dict[str, List[str]]]] = None,
1240
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1223
1241
  middlewares: Optional[List[Callable]] = None,
1224
1242
  ):
1225
1243
  """Patch route decorator with PATCH `method`
@@ -1261,6 +1279,7 @@ class BaseRouter(ABC):
1261
1279
  operation_id,
1262
1280
  include_in_schema,
1263
1281
  security,
1282
+ openapi_extensions,
1264
1283
  middlewares,
1265
1284
  )
1266
1285
 
@@ -1278,6 +1297,7 @@ class BaseRouter(ABC):
1278
1297
  operation_id: Optional[str] = None,
1279
1298
  include_in_schema: bool = True,
1280
1299
  security: Optional[List[Dict[str, List[str]]]] = None,
1300
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1281
1301
  middlewares: Optional[List[Callable]] = None,
1282
1302
  ):
1283
1303
  """Head route decorator with HEAD `method`
@@ -1318,6 +1338,7 @@ class BaseRouter(ABC):
1318
1338
  operation_id,
1319
1339
  include_in_schema,
1320
1340
  security,
1341
+ openapi_extensions,
1321
1342
  middlewares,
1322
1343
  )
1323
1344
 
@@ -1541,6 +1562,7 @@ class ApiGatewayResolver(BaseRouter):
1541
1562
  license_info: Optional["License"] = None,
1542
1563
  security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
1543
1564
  security: Optional[List[Dict[str, List[str]]]] = None,
1565
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1544
1566
  ) -> "OpenAPI":
1545
1567
  """
1546
1568
  Returns the OpenAPI schema as a pydantic model.
@@ -1571,6 +1593,8 @@ class ApiGatewayResolver(BaseRouter):
1571
1593
  A declaration of the security schemes available to be used in the specification.
1572
1594
  security: List[Dict[str, List[str]]], optional
1573
1595
  A declaration of which security mechanisms are applied globally across the API.
1596
+ openapi_extensions: Dict[str, Any], optional
1597
+ Additional OpenAPI extensions as a dictionary.
1574
1598
 
1575
1599
  Returns
1576
1600
  -------
@@ -1603,11 +1627,15 @@ class ApiGatewayResolver(BaseRouter):
1603
1627
 
1604
1628
  info.update({field: value for field, value in optional_fields.items() if value})
1605
1629
 
1630
+ if not isinstance(openapi_extensions, Dict):
1631
+ openapi_extensions = {}
1632
+
1606
1633
  output: Dict[str, Any] = {
1607
1634
  "openapi": openapi_version,
1608
1635
  "info": info,
1609
1636
  "servers": self._get_openapi_servers(servers),
1610
1637
  "security": self._get_openapi_security(security, security_schemes),
1638
+ **openapi_extensions,
1611
1639
  }
1612
1640
 
1613
1641
  components: Dict[str, Dict[str, Any]] = {}
@@ -1726,6 +1754,7 @@ class ApiGatewayResolver(BaseRouter):
1726
1754
  license_info: Optional["License"] = None,
1727
1755
  security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
1728
1756
  security: Optional[List[Dict[str, List[str]]]] = None,
1757
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1729
1758
  ) -> str:
1730
1759
  """
1731
1760
  Returns the OpenAPI schema as a JSON serializable dict
@@ -1756,6 +1785,8 @@ class ApiGatewayResolver(BaseRouter):
1756
1785
  A declaration of the security schemes available to be used in the specification.
1757
1786
  security: List[Dict[str, List[str]]], optional
1758
1787
  A declaration of which security mechanisms are applied globally across the API.
1788
+ openapi_extensions: Dict[str, Any], optional
1789
+ Additional OpenAPI extensions as a dictionary.
1759
1790
 
1760
1791
  Returns
1761
1792
  -------
@@ -1778,6 +1809,7 @@ class ApiGatewayResolver(BaseRouter):
1778
1809
  license_info=license_info,
1779
1810
  security_schemes=security_schemes,
1780
1811
  security=security,
1812
+ openapi_extensions=openapi_extensions,
1781
1813
  ),
1782
1814
  by_alias=True,
1783
1815
  exclude_none=True,
@@ -1805,6 +1837,7 @@ class ApiGatewayResolver(BaseRouter):
1805
1837
  security: Optional[List[Dict[str, List[str]]]] = None,
1806
1838
  oauth2_config: Optional["OAuth2Config"] = None,
1807
1839
  persist_authorization: bool = False,
1840
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1808
1841
  ):
1809
1842
  """
1810
1843
  Returns the OpenAPI schema as a JSON serializable dict
@@ -1847,6 +1880,8 @@ class ApiGatewayResolver(BaseRouter):
1847
1880
  The OAuth2 configuration for the Swagger UI.
1848
1881
  persist_authorization: bool, optional
1849
1882
  Whether to persist authorization data on browser close/refresh.
1883
+ openapi_extensions: Dict[str, Any], optional
1884
+ Additional OpenAPI extensions as a dictionary.
1850
1885
  """
1851
1886
  from aws_lambda_powertools.event_handler.openapi.compat import model_json
1852
1887
  from aws_lambda_powertools.event_handler.openapi.models import Server
@@ -1896,6 +1931,7 @@ class ApiGatewayResolver(BaseRouter):
1896
1931
  license_info=license_info,
1897
1932
  security_schemes=security_schemes,
1898
1933
  security=security,
1934
+ openapi_extensions=openapi_extensions,
1899
1935
  )
1900
1936
 
1901
1937
  # The .replace('</', '<\\/') part is necessary to prevent a potential issue where the JSON string contains
@@ -1949,6 +1985,7 @@ class ApiGatewayResolver(BaseRouter):
1949
1985
  operation_id: Optional[str] = None,
1950
1986
  include_in_schema: bool = True,
1951
1987
  security: Optional[List[Dict[str, List[str]]]] = None,
1988
+ openapi_extensions: Optional[Dict[str, Any]] = None,
1952
1989
  middlewares: Optional[List[Callable[..., Any]]] = None,
1953
1990
  ):
1954
1991
  """Route decorator includes parameter `method`"""
@@ -1976,6 +2013,7 @@ class ApiGatewayResolver(BaseRouter):
1976
2013
  operation_id,
1977
2014
  include_in_schema,
1978
2015
  security,
2016
+ openapi_extensions,
1979
2017
  middlewares,
1980
2018
  )
1981
2019
 
@@ -2489,6 +2527,7 @@ class Router(BaseRouter):
2489
2527
  operation_id: Optional[str] = None,
2490
2528
  include_in_schema: bool = True,
2491
2529
  security: Optional[List[Dict[str, List[str]]]] = None,
2530
+ openapi_extensions: Optional[Dict[str, Any]] = None,
2492
2531
  middlewares: Optional[List[Callable[..., Any]]] = None,
2493
2532
  ):
2494
2533
  def register_route(func: Callable):
@@ -2497,6 +2536,7 @@ class Router(BaseRouter):
2497
2536
  frozen_responses = _FrozenDict(responses) if responses else None
2498
2537
  frozen_tags = frozenset(tags) if tags else None
2499
2538
  frozen_security = _FrozenListDict(security) if security else None
2539
+ fronzen_openapi_extensions = _FrozenDict(openapi_extensions) if openapi_extensions else None
2500
2540
 
2501
2541
  route_key = (
2502
2542
  rule,
@@ -2512,6 +2552,7 @@ class Router(BaseRouter):
2512
2552
  operation_id,
2513
2553
  include_in_schema,
2514
2554
  frozen_security,
2555
+ fronzen_openapi_extensions,
2515
2556
  )
2516
2557
 
2517
2558
  # Collate Middleware for routes
@@ -2592,6 +2633,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
2592
2633
  operation_id: Optional[str] = None,
2593
2634
  include_in_schema: bool = True,
2594
2635
  security: Optional[List[Dict[str, List[str]]]] = None,
2636
+ openapi_extensions: Optional[Dict[str, Any]] = None,
2595
2637
  middlewares: Optional[List[Callable[..., Any]]] = None,
2596
2638
  ):
2597
2639
  # NOTE: see #1552 for more context.
@@ -2609,6 +2651,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
2609
2651
  operation_id,
2610
2652
  include_in_schema,
2611
2653
  security,
2654
+ openapi_extensions,
2612
2655
  middlewares,
2613
2656
  )
2614
2657
 
@@ -102,6 +102,8 @@ class BedrockAgentResolver(ApiGatewayResolver):
102
102
  include_in_schema: bool = True,
103
103
  middlewares: Optional[List[Callable[..., Any]]] = None,
104
104
  ) -> Callable[[Callable[..., Any]], Callable[..., Any]]:
105
+
106
+ openapi_extensions = None
105
107
  security = None
106
108
 
107
109
  return super(BedrockAgentResolver, self).get(
@@ -117,6 +119,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
117
119
  operation_id,
118
120
  include_in_schema,
119
121
  security,
122
+ openapi_extensions,
120
123
  middlewares,
121
124
  )
122
125
 
@@ -137,6 +140,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
137
140
  include_in_schema: bool = True,
138
141
  middlewares: Optional[List[Callable[..., Any]]] = None,
139
142
  ):
143
+ openapi_extensions = None
140
144
  security = None
141
145
 
142
146
  return super().post(
@@ -152,6 +156,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
152
156
  operation_id,
153
157
  include_in_schema,
154
158
  security,
159
+ openapi_extensions,
155
160
  middlewares,
156
161
  )
157
162
 
@@ -172,6 +177,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
172
177
  include_in_schema: bool = True,
173
178
  middlewares: Optional[List[Callable[..., Any]]] = None,
174
179
  ):
180
+ openapi_extensions = None
175
181
  security = None
176
182
 
177
183
  return super().put(
@@ -187,6 +193,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
187
193
  operation_id,
188
194
  include_in_schema,
189
195
  security,
196
+ openapi_extensions,
190
197
  middlewares,
191
198
  )
192
199
 
@@ -207,6 +214,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
207
214
  include_in_schema: bool = True,
208
215
  middlewares: Optional[List[Callable]] = None,
209
216
  ):
217
+ openapi_extensions = None
210
218
  security = None
211
219
 
212
220
  return super().patch(
@@ -222,6 +230,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
222
230
  operation_id,
223
231
  include_in_schema,
224
232
  security,
233
+ openapi_extensions,
225
234
  middlewares,
226
235
  )
227
236
 
@@ -242,6 +251,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
242
251
  include_in_schema: bool = True,
243
252
  middlewares: Optional[List[Callable[..., Any]]] = None,
244
253
  ):
254
+ openapi_extensions = None
245
255
  security = None
246
256
 
247
257
  return super().delete(
@@ -257,6 +267,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
257
267
  operation_id,
258
268
  include_in_schema,
259
269
  security,
270
+ openapi_extensions,
260
271
  middlewares,
261
272
  )
262
273
 
@@ -41,7 +41,7 @@ sequence_types = tuple(sequence_annotation_to_type.keys())
41
41
  RequestErrorModel: Type[BaseModel] = create_model("Request")
42
42
 
43
43
  if PYDANTIC_V2: # pragma: no cover # false positive; dropping in v3
44
- from pydantic import TypeAdapter, ValidationError
44
+ from pydantic import TypeAdapter, ValidationError, model_validator as parser_openapi_extension
45
45
  from pydantic._internal._typing_extra import eval_type_lenient
46
46
  from pydantic.fields import FieldInfo
47
47
  from pydantic._internal._utils import lenient_issubclass
@@ -217,7 +217,7 @@ if PYDANTIC_V2: # pragma: no cover # false positive; dropping in v3
217
217
  return model.model_dump_json(**kwargs)
218
218
 
219
219
  else:
220
- from pydantic import BaseModel, ValidationError
220
+ from pydantic import BaseModel, ValidationError, root_validator as parser_openapi_extension
221
221
  from pydantic.fields import (
222
222
  ModelField,
223
223
  Required,
@@ -3,7 +3,8 @@ from typing import Any, Dict, List, Optional, Set, Union
3
3
 
4
4
  from pydantic import AnyUrl, BaseModel, Field
5
5
 
6
- from aws_lambda_powertools.event_handler.openapi.compat import model_rebuild
6
+ from aws_lambda_powertools.event_handler.openapi.compat import model_rebuild, parser_openapi_extension
7
+ from aws_lambda_powertools.event_handler.openapi.exceptions import SchemaValidationError
7
8
  from aws_lambda_powertools.event_handler.openapi.pydantic_loader import PYDANTIC_V2
8
9
  from aws_lambda_powertools.shared.types import Annotated, Literal
9
10
 
@@ -13,6 +14,62 @@ These models can be used to parse OpenAPI JSON/YAML files into Python objects, o
13
14
  """
14
15
 
15
16
 
17
+ class OpenAPIExtensions(BaseModel):
18
+ """
19
+ This class serves as a Pydantic proxy model to add OpenAPI extensions.
20
+
21
+ OpenAPI extensions are arbitrary fields, so we remove openapi_extensions when dumping
22
+ and add only the provided value in the schema.
23
+ """
24
+
25
+ openapi_extensions: Optional[Dict[str, Any]] = None
26
+
27
+ # This rule is valid for Pydantic v1 and v2
28
+ # If the 'openapi_extensions' field is present in the 'values' dictionary,
29
+ # And if the extension starts with x- (must respect the RFC)
30
+ # update the 'values' dictionary with the contents of 'openapi_extensions',
31
+ # and then remove the 'openapi_extensions' field from the 'values' dictionary
32
+
33
+ if PYDANTIC_V2:
34
+
35
+ model_config = {"extra": "allow"}
36
+
37
+ @parser_openapi_extension(mode="before")
38
+ def serialize_openapi_extension_v2(self):
39
+ if isinstance(self, dict) and self.get("openapi_extensions"):
40
+
41
+ openapi_extension_value = self.get("openapi_extensions")
42
+
43
+ for extension_key in openapi_extension_value:
44
+ if not str(extension_key).startswith("x-"):
45
+ raise SchemaValidationError("An OpenAPI extension key must start with x-")
46
+
47
+ self.update(openapi_extension_value)
48
+ self.pop("openapi_extensions", None)
49
+
50
+ return self
51
+
52
+ else:
53
+
54
+ @parser_openapi_extension(pre=False, allow_reuse=True)
55
+ def serialize_openapi_extension_v1(cls, values):
56
+ openapi_extension_value = values.get("openapi_extensions")
57
+
58
+ if openapi_extension_value:
59
+
60
+ for extension_key in openapi_extension_value:
61
+ if not str(extension_key).startswith("x-"):
62
+ raise SchemaValidationError("An OpenAPI extension key must start with x-")
63
+
64
+ values.update(values["openapi_extensions"])
65
+ del values["openapi_extensions"]
66
+
67
+ return values
68
+
69
+ class Config:
70
+ extra = "allow"
71
+
72
+
16
73
  # https://swagger.io/specification/#contact-object
17
74
  class Contact(BaseModel):
18
75
  name: Optional[str] = None
@@ -77,7 +134,7 @@ class ServerVariable(BaseModel):
77
134
 
78
135
 
79
136
  # https://swagger.io/specification/#server-object
80
- class Server(BaseModel):
137
+ class Server(OpenAPIExtensions):
81
138
  url: Union[AnyUrl, str]
82
139
  description: Optional[str] = None
83
140
  variables: Optional[Dict[str, ServerVariable]] = None
@@ -379,7 +436,7 @@ class Tag(BaseModel):
379
436
 
380
437
 
381
438
  # https://swagger.io/specification/#operation-object
382
- class Operation(BaseModel):
439
+ class Operation(OpenAPIExtensions):
383
440
  tags: Optional[List[str]] = None
384
441
  summary: Optional[str] = None
385
442
  description: Optional[str] = None
@@ -436,12 +493,12 @@ class SecuritySchemeType(Enum):
436
493
  openIdConnect = "openIdConnect"
437
494
 
438
495
 
439
- class SecurityBase(BaseModel):
496
+ class SecurityBase(OpenAPIExtensions):
440
497
  type_: SecuritySchemeType = Field(alias="type")
441
498
  description: Optional[str] = None
442
499
 
443
500
  if PYDANTIC_V2:
444
- model_config = {"extra": "allow", "populate_by_name": True}
501
+ model_config = {"extra": "allow", "populate_by_name": True} # type: ignore
445
502
 
446
503
  else:
447
504
 
@@ -557,7 +614,7 @@ class Components(BaseModel):
557
614
 
558
615
 
559
616
  # https://swagger.io/specification/#openapi-object
560
- class OpenAPI(BaseModel):
617
+ class OpenAPI(OpenAPIExtensions):
561
618
  openapi: str
562
619
  info: Info
563
620
  jsonSchemaDialect: Optional[str] = None
@@ -1,3 +1,3 @@
1
1
  """Exposes version constant to avoid circular dependencies."""
2
2
 
3
- VERSION = "2.41.1a0"
3
+ VERSION = "2.41.1a2"
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "aws_lambda_powertools"
3
- version = "2.41.1a0"
3
+ version = "2.41.1a2"
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"]
@@ -115,7 +115,7 @@ datadog = ["datadog-lambda"]
115
115
  datamasking = ["aws-encryption-sdk", "jsonpath-ng"]
116
116
 
117
117
  [tool.poetry.group.dev.dependencies]
118
- cfn-lint = "1.6.0"
118
+ cfn-lint = "1.6.1"
119
119
  mypy = "^1.1.1"
120
120
  types-python-dateutil = "^2.8.19.6"
121
121
  aws-cdk-aws-appsync-alpha = "^2.59.0a0"
@@ -61,7 +61,7 @@ extras_require = \
61
61
 
62
62
  setup_kwargs = {
63
63
  'name': 'aws-lambda-powertools',
64
- 'version': '2.41.1a0',
64
+ 'version': '2.41.1a2',
65
65
  'description': 'Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.',
66
66
  '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.8|%203.9|%203.10|%203.11|%203.12&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* [Brsk](https://www.brsk.co.uk/)\n* [BusPatrol](https://buspatrol.com/)\n* [Capital One](https://www.capitalone.com/)\n* [CPQi (Exadel Financial Services)](https://cpqi.com/)\n* [CloudZero](https://www.cloudzero.com/)\n* [CyberArk](https://www.cyberark.com/)\n* [globaldatanet](https://globaldatanet.com/)\n* [IMS](https://ims.tech/)\n* [Jit Security](https://www.jit.io/)\n* [Propellor.ai](https://www.propellor.ai/)\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',
67
67
  'author': 'Amazon Web Services',