aws-lambda-powertools 3.0.2.dev1__tar.gz → 3.1.1a0__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 (253) hide show
  1. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/PKG-INFO +2 -1
  2. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/README.md +1 -0
  3. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/models.py +1 -1
  4. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/version.py +1 -1
  5. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/__init__.py +4 -0
  6. aws_lambda_powertools-3.1.1a0/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +13 -0
  7. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/base.py +8 -11
  8. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +5 -6
  9. aws_lambda_powertools-3.1.1a0/aws_lambda_powertools/utilities/parser/functions.py +79 -0
  10. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/s3.py +4 -2
  11. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/parser.py +8 -8
  12. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/pyproject.toml +9 -9
  13. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/setup.py +2 -2
  14. aws_lambda_powertools-3.0.2.dev1/aws_lambda_powertools/utilities/parser/functions.py +0 -40
  15. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/LICENSE +0 -0
  16. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/THIRD-PARTY-LICENSES +0 -0
  17. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/__init__.py +0 -0
  18. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/__init__.py +0 -0
  19. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/api_gateway.py +0 -0
  20. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
  21. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
  22. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
  23. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
  24. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
  25. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
  26. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
  27. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
  28. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
  29. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
  30. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
  31. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
  32. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +0 -0
  33. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
  34. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
  35. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
  36. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
  37. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
  38. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
  39. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
  40. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
  41. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
  42. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
  43. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
  44. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
  45. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
  46. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
  47. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
  48. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/router.py +0 -0
  49. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/types.py +0 -0
  50. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/util.py +0 -0
  51. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
  52. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
  53. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/__init__.py +0 -0
  54. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/constants.py +0 -0
  55. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
  56. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/exceptions.py +0 -0
  57. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/filters.py +0 -0
  58. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/formatter.py +0 -0
  59. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
  60. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
  61. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
  62. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/logger.py +0 -0
  63. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/types.py +0 -0
  64. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/logging/utils.py +0 -0
  65. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/__init__.py +0 -0
  66. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/base.py +0 -0
  67. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
  68. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/functions.py +0 -0
  69. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/metric.py +0 -0
  70. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/metrics.py +0 -0
  71. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
  72. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/base.py +0 -0
  73. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
  74. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
  75. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
  76. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
  77. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
  78. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
  79. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
  80. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
  81. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
  82. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
  83. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
  84. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/metrics/types.py +0 -0
  85. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
  86. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
  87. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
  88. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/package_logger.py +0 -0
  89. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/py.typed +0 -0
  90. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/__init__.py +0 -0
  91. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
  92. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/constants.py +0 -0
  93. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/cookies.py +0 -0
  94. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
  95. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/functions.py +0 -0
  96. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
  97. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
  98. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
  99. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/types.py +0 -0
  100. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/shared/user_agent.py +0 -0
  101. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/tracing/__init__.py +0 -0
  102. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/tracing/base.py +0 -0
  103. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/tracing/extensions.py +0 -0
  104. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/tracing/tracer.py +0 -0
  105. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/__init__.py +0 -0
  106. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
  107. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
  108. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
  109. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
  110. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
  111. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/batch/types.py +0 -0
  112. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
  113. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
  114. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
  115. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
  116. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
  117. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
  118. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
  119. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
  120. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
  121. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
  122. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
  123. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
  124. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
  125. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
  126. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
  127. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
  128. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
  129. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
  130. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
  131. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
  132. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
  133. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
  134. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
  135. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
  136. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
  137. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
  138. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
  139. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
  140. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
  141. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
  142. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
  143. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
  144. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
  145. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
  146. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
  147. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
  148. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
  149. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
  150. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
  151. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
  152. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
  153. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
  154. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
  155. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
  156. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
  157. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
  158. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
  159. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
  160. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
  161. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
  162. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
  163. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
  164. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
  165. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
  166. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
  167. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
  168. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
  169. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
  170. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
  171. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
  172. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
  173. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
  174. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
  175. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
  176. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
  177. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
  178. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
  179. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
  180. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
  181. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
  182. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
  183. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
  184. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
  185. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
  186. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
  187. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
  188. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
  189. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
  190. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
  191. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
  192. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
  193. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
  194. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
  195. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
  196. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
  197. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
  198. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
  199. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
  200. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
  201. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
  202. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
  203. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
  204. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
  205. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
  206. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
  207. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
  208. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
  209. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
  210. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
  211. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
  212. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
  213. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
  214. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
  215. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
  216. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
  217. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
  218. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
  219. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
  220. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
  221. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
  222. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
  223. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
  224. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
  225. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
  226. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
  227. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
  228. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
  229. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
  230. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
  231. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/serialization.py +0 -0
  232. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
  233. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
  234. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
  235. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
  236. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
  237. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
  238. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
  239. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
  240. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
  241. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
  242. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
  243. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
  244. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
  245. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
  246. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
  247. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
  248. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
  249. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
  250. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
  251. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
  252. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
  253. {aws_lambda_powertools-3.0.2.dev1 → aws_lambda_powertools-3.1.1a0}/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: 3.0.2.dev1
3
+ Version: 3.1.1a0
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
@@ -107,6 +107,7 @@ The following companies, among others, use Powertools:
107
107
  * [CPQi (Exadel Financial Services)](https://cpqi.com/)
108
108
  * [CloudZero](https://www.cloudzero.com/)
109
109
  * [CyberArk](https://www.cyberark.com/)
110
+ * [Flyweight](https://flyweight.io/)
110
111
  * [globaldatanet](https://globaldatanet.com/)
111
112
  * [IMS](https://ims.tech/)
112
113
  * [Jit Security](https://www.jit.io/)
@@ -63,6 +63,7 @@ The following companies, among others, use Powertools:
63
63
  * [CPQi (Exadel Financial Services)](https://cpqi.com/)
64
64
  * [CloudZero](https://www.cloudzero.com/)
65
65
  * [CyberArk](https://www.cyberark.com/)
66
+ * [Flyweight](https://flyweight.io/)
66
67
  * [globaldatanet](https://globaldatanet.com/)
67
68
  * [IMS](https://ims.tech/)
68
69
  * [Jit Security](https://www.jit.io/)
@@ -201,7 +201,7 @@ class Schema(BaseModel):
201
201
  deprecated: Optional[bool] = None
202
202
  readOnly: Optional[bool] = None
203
203
  writeOnly: Optional[bool] = None
204
- examples: Optional[List["Example"]] = None
204
+ examples: Optional[Union[List["Example"], List[str]]] = None
205
205
  # Ref: OpenAPI 3.0.0: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#schema-object
206
206
  # Schema Object
207
207
  discriminator: Optional[Discriminator] = None
@@ -1,3 +1,3 @@
1
1
  """Exposes version constant to avoid circular dependencies."""
2
2
 
3
- VERSION = "3.0.2.dev1"
3
+ VERSION = "3.1.1a0"
@@ -18,6 +18,9 @@ from .cloud_watch_alarm_event import (
18
18
  from .cloud_watch_custom_widget_event import CloudWatchDashboardCustomWidgetEvent
19
19
  from .cloud_watch_logs_event import CloudWatchLogsEvent
20
20
  from .cloudformation_custom_resource_event import CloudFormationCustomResourceEvent
21
+ from .code_deploy_lifecycle_hook_event import (
22
+ CodeDeployLifecycleHookEvent,
23
+ )
21
24
  from .code_pipeline_job_event import CodePipelineJobEvent
22
25
  from .connect_contact_flow_event import ConnectContactFlowEvent
23
26
  from .dynamo_db_stream_event import DynamoDBStreamEvent
@@ -59,6 +62,7 @@ __all__ = [
59
62
  "CloudWatchAlarmMetricStat",
60
63
  "CloudWatchDashboardCustomWidgetEvent",
61
64
  "CloudWatchLogsEvent",
65
+ "CodeDeployLifecycleHookEvent",
62
66
  "CodePipelineJobEvent",
63
67
  "ConnectContactFlowEvent",
64
68
  "DynamoDBStreamEvent",
@@ -0,0 +1,13 @@
1
+ from aws_lambda_powertools.utilities.data_classes.common import DictWrapper
2
+
3
+
4
+ class CodeDeployLifecycleHookEvent(DictWrapper):
5
+ @property
6
+ def deployment_id(self) -> str:
7
+ """The unique ID of the calling CodeDeploy Deployment."""
8
+ return self["DeploymentId"]
9
+
10
+ @property
11
+ def lifecycle_event_hook_execution_id(self) -> str:
12
+ """The unique ID of a deployments lifecycle hook."""
13
+ return self["LifecycleEventHookExecutionId"]
@@ -239,18 +239,15 @@ class IdempotencyHandler:
239
239
  f"Execution already in progress with idempotency key: "
240
240
  f"{self.persistence_store.event_key_jmespath}={data_record.idempotency_key}",
241
241
  )
242
- response_dict: dict | None = data_record.response_json_as_dict()
243
- if response_dict is not None:
244
- serialized_response = self.output_serializer.from_dict(response_dict)
245
- if self.config.response_hook is not None:
246
- logger.debug("Response hook configured, invoking function")
247
- return self.config.response_hook(
248
- serialized_response,
249
- data_record,
250
- )
251
- return serialized_response
252
242
 
253
- return None
243
+ response_dict = data_record.response_json_as_dict()
244
+ serialized_response = self.output_serializer.from_dict(response_dict) if response_dict else None
245
+
246
+ if self.config.response_hook:
247
+ logger.debug("Response hook configured, invoking function")
248
+ return self.config.response_hook(serialized_response, data_record)
249
+
250
+ return serialized_response
254
251
 
255
252
  def _get_function_response(self):
256
253
  try:
@@ -4,7 +4,10 @@ import logging
4
4
  from abc import ABC, abstractmethod
5
5
  from typing import TYPE_CHECKING, Any, TypeVar
6
6
 
7
- from aws_lambda_powertools.utilities.parser.functions import _retrieve_or_set_model_from_cache
7
+ from aws_lambda_powertools.utilities.parser.functions import (
8
+ _parse_and_validate_event,
9
+ _retrieve_or_set_model_from_cache,
10
+ )
8
11
 
9
12
  if TYPE_CHECKING:
10
13
  from aws_lambda_powertools.utilities.parser.types import T
@@ -38,11 +41,7 @@ class BaseEnvelope(ABC):
38
41
  adapter = _retrieve_or_set_model_from_cache(model=model)
39
42
 
40
43
  logger.debug("parsing event against model")
41
- if isinstance(data, str):
42
- logger.debug("parsing event as string")
43
- return adapter.validate_json(data)
44
-
45
- return adapter.validate_python(data)
44
+ return _parse_and_validate_event(data=data, adapter=adapter)
46
45
 
47
46
  @abstractmethod
48
47
  def parse(self, data: dict[str, Any] | Any | None, model: type[T]):
@@ -0,0 +1,79 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import logging
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from pydantic import TypeAdapter
8
+
9
+ from aws_lambda_powertools.shared.cache_dict import LRUDict
10
+
11
+ if TYPE_CHECKING:
12
+ from aws_lambda_powertools.utilities.parser.types import T
13
+
14
+ CACHE_TYPE_ADAPTER = LRUDict(max_items=1024)
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ def _retrieve_or_set_model_from_cache(model: type[T]) -> TypeAdapter:
20
+ """
21
+ Retrieves or sets a TypeAdapter instance from the cache for the given model.
22
+
23
+ If the model is already present in the cache, the corresponding TypeAdapter
24
+ instance is returned. Otherwise, a new TypeAdapter instance is created,
25
+ stored in the cache, and returned.
26
+
27
+ Parameters
28
+ ----------
29
+ model: type[T]
30
+ The model type for which the TypeAdapter instance should be retrieved or set.
31
+
32
+ Returns
33
+ -------
34
+ TypeAdapter
35
+ The TypeAdapter instance for the given model,
36
+ either retrieved from the cache or newly created and stored in the cache.
37
+ """
38
+ id_model = id(model)
39
+
40
+ if id_model in CACHE_TYPE_ADAPTER:
41
+ return CACHE_TYPE_ADAPTER[id_model]
42
+
43
+ CACHE_TYPE_ADAPTER[id_model] = TypeAdapter(model)
44
+ return CACHE_TYPE_ADAPTER[id_model]
45
+
46
+
47
+ def _parse_and_validate_event(data: dict[str, Any] | Any, adapter: TypeAdapter):
48
+ """
49
+ Parse and validate the event data using the provided adapter.
50
+
51
+ Params
52
+ ------
53
+ data: dict | Any
54
+ The event data to be parsed and validated.
55
+ adapter: TypeAdapter
56
+ The adapter object used for validation.
57
+
58
+ Returns:
59
+ dict: The validated event data.
60
+
61
+ Raises:
62
+ ValidationError: If the data is invalid or cannot be parsed.
63
+ """
64
+ logger.debug("Parsing event against model")
65
+
66
+ if isinstance(data, str):
67
+ logger.debug("Parsing event as string")
68
+ try:
69
+ return adapter.validate_json(data)
70
+ except NotImplementedError:
71
+ # See: https://github.com/aws-powertools/powertools-lambda-python/issues/5303
72
+ # See: https://github.com/pydantic/pydantic/issues/8890
73
+ logger.debug(
74
+ "Falling back to Python validation due to Pydantic implementation."
75
+ "See issue: https://github.com/aws-powertools/powertools-lambda-python/issues/5303",
76
+ )
77
+ data = json.loads(data)
78
+
79
+ return adapter.validate_python(data)
@@ -103,8 +103,10 @@ class S3RecordModel(BaseModel):
103
103
  def validate_s3_object(cls, values):
104
104
  event_name = values.get("eventName")
105
105
  s3_object = values.get("s3").get("object")
106
- if "ObjectRemoved" not in event_name and (s3_object.get("size") is None or s3_object.get("eTag") is None):
107
- raise ValueError("S3Object.size and S3Object.eTag are required for non-ObjectRemoved events")
106
+ if ":Delete" not in event_name and (s3_object.get("size") is None or s3_object.get("eTag") is None):
107
+ raise ValueError(
108
+ "Size and eTag fields are required for all events except ObjectRemoved:* and LifecycleExpiration:*.",
109
+ )
108
110
  return values
109
111
 
110
112
 
@@ -4,11 +4,14 @@ import logging
4
4
  import typing
5
5
  from typing import TYPE_CHECKING, Any, Callable, overload
6
6
 
7
- from pydantic import PydanticSchemaGenerationError, ValidationError
7
+ from pydantic import PydanticSchemaGenerationError
8
8
 
9
9
  from aws_lambda_powertools.middleware_factory import lambda_handler_decorator
10
10
  from aws_lambda_powertools.utilities.parser.exceptions import InvalidEnvelopeError, InvalidModelTypeError
11
- from aws_lambda_powertools.utilities.parser.functions import _retrieve_or_set_model_from_cache
11
+ from aws_lambda_powertools.utilities.parser.functions import (
12
+ _parse_and_validate_event,
13
+ _retrieve_or_set_model_from_cache,
14
+ )
12
15
 
13
16
  if TYPE_CHECKING:
14
17
  from aws_lambda_powertools.utilities.parser.envelopes.base import Envelope
@@ -108,7 +111,7 @@ def event_parser(
108
111
 
109
112
  logger.debug(f"Calling handler {handler.__name__}")
110
113
  return handler(parsed_event, context, **kwargs)
111
- except (ValidationError, AttributeError) as exc:
114
+ except AttributeError as exc:
112
115
  raise InvalidModelTypeError(f"Error: {str(exc)}. Please ensure the type you're trying to parse into is correct")
113
116
 
114
117
 
@@ -189,17 +192,14 @@ def parse(event: dict[str, Any], model: type[T], envelope: type[Envelope] | None
189
192
  adapter = _retrieve_or_set_model_from_cache(model=model)
190
193
 
191
194
  logger.debug("Parsing and validating event model; no envelope used")
192
- if isinstance(event, str):
193
- return adapter.validate_json(event)
194
-
195
- return adapter.validate_python(event)
195
+ return _parse_and_validate_event(data=event, adapter=adapter)
196
196
 
197
197
  # Pydantic raises PydanticSchemaGenerationError when the model is not a Pydantic model
198
198
  # This is seen in the tests where we pass a non-Pydantic model type to the parser or
199
199
  # when we pass a data structure that does not match the model (trying to parse a true/false/etc into a model)
200
200
  except PydanticSchemaGenerationError as exc:
201
201
  raise InvalidModelTypeError(f"The event supplied is unable to be validated into {type(model)}") from exc
202
- except ValidationError as exc:
202
+ except AttributeError as exc:
203
203
  raise InvalidModelTypeError(
204
204
  f"Error: {str(exc)}. Please ensure the Input model inherits from BaseModel,\n"
205
205
  "and your payload adheres to the specified Input model structure.\n"
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "aws_lambda_powertools"
3
- version = "3.0.2.dev1"
3
+ version = "3.1.1a0"
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"]
@@ -64,22 +64,22 @@ pytest-cov = "^5.0.0"
64
64
  pytest-mock = "^3.14.0"
65
65
  pdoc3 = "^0.11.0"
66
66
  pytest-asyncio = "^0.24.0"
67
- bandit = "^1.7.9"
67
+ bandit = "^1.7.10"
68
68
  radon = "^6.0.1"
69
69
  xenon = "^0.9.1"
70
70
  mkdocs-git-revision-date-plugin = "^0.3.2"
71
71
  mike = "^2.1.2"
72
72
  pytest-xdist = "^3.6.1"
73
- aws-cdk-lib = "^2.157.0"
73
+ aws-cdk-lib = "^2.161.1"
74
74
  "aws-cdk.aws-apigatewayv2-alpha" = "^2.38.1-alpha.0"
75
75
  "aws-cdk.aws-apigatewayv2-integrations-alpha" = "^2.38.1-alpha.0"
76
76
  "aws-cdk.aws-apigatewayv2-authorizers-alpha" = "^2.38.1-alpha.0"
77
- "aws-cdk.aws-lambda-python-alpha" = "^2.156.0a0"
78
- "cdklabs.generative-ai-cdk-constructs" = "^0.1.264"
77
+ "aws-cdk.aws-lambda-python-alpha" = "^2.161.1a0"
78
+ "cdklabs.generative-ai-cdk-constructs" = "^0.1.273"
79
79
  pytest-benchmark = "^4.0.0"
80
80
  types-requests = "^2.31.0"
81
81
  typing-extensions = "^4.12.2"
82
- mkdocs-material = "^9.5.34"
82
+ mkdocs-material = "^9.5.39"
83
83
  filelock = "^3.16.0"
84
84
  dirhash = "^0.5.0"
85
85
  mypy-boto3-appconfigdata = "^1.35.0"
@@ -87,7 +87,7 @@ ijson = "^3.3.0"
87
87
  typed-ast = { version = "^1.5.5", python = "< 3.8" }
88
88
  hvac = "^2.3.0"
89
89
  aws-requests-auth = "^0.4.3"
90
- datadog-lambda = "^6.98.0"
90
+ datadog-lambda = "^6.99.0"
91
91
 
92
92
  [tool.poetry.extras]
93
93
  parser = ["pydantic"]
@@ -107,13 +107,13 @@ datadog = ["datadog-lambda"]
107
107
  datamasking = ["aws-encryption-sdk", "jsonpath-ng"]
108
108
 
109
109
  [tool.poetry.group.dev.dependencies]
110
- cfn-lint = "1.12.4"
110
+ cfn-lint = "1.16.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.28.0"
115
115
  sentry-sdk = ">=1.22.2,<3.0.0"
116
- ruff = ">=0.5.1,<0.6.5"
116
+ ruff = ">=0.5.1,<0.6.10"
117
117
  retry2 = "^0.9.5"
118
118
  pytest-socket = ">=0.6,<0.8"
119
119
  types-redis = "^4.6.0.7"
@@ -63,9 +63,9 @@ extras_require = \
63
63
 
64
64
  setup_kwargs = {
65
65
  'name': 'aws-lambda-powertools',
66
- 'version': '3.0.2.dev1',
66
+ 'version': '3.1.1a0',
67
67
  'description': 'Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.',
68
- '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* [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* [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',
68
+ '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* [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',
69
69
  'author': 'Amazon Web Services',
70
70
  'author_email': 'None',
71
71
  'maintainer': 'None',
@@ -1,40 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
-
5
- from pydantic import TypeAdapter
6
-
7
- from aws_lambda_powertools.shared.cache_dict import LRUDict
8
-
9
- if TYPE_CHECKING:
10
- from aws_lambda_powertools.utilities.parser.types import T
11
-
12
- CACHE_TYPE_ADAPTER = LRUDict(max_items=1024)
13
-
14
-
15
- def _retrieve_or_set_model_from_cache(model: type[T]) -> TypeAdapter:
16
- """
17
- Retrieves or sets a TypeAdapter instance from the cache for the given model.
18
-
19
- If the model is already present in the cache, the corresponding TypeAdapter
20
- instance is returned. Otherwise, a new TypeAdapter instance is created,
21
- stored in the cache, and returned.
22
-
23
- Parameters
24
- ----------
25
- model: type[T]
26
- The model type for which the TypeAdapter instance should be retrieved or set.
27
-
28
- Returns
29
- -------
30
- TypeAdapter
31
- The TypeAdapter instance for the given model,
32
- either retrieved from the cache or newly created and stored in the cache.
33
- """
34
- id_model = id(model)
35
-
36
- if id_model in CACHE_TYPE_ADAPTER:
37
- return CACHE_TYPE_ADAPTER[id_model]
38
-
39
- CACHE_TYPE_ADAPTER[id_model] = TypeAdapter(model)
40
- return CACHE_TYPE_ADAPTER[id_model]