aws-lambda-powertools 3.1.1a0__tar.gz → 3.2.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 (252) hide show
  1. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/PKG-INFO +1 -1
  2. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/formatter.py +81 -2
  3. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/logger.py +19 -0
  4. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/version.py +1 -1
  5. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/pyproject.toml +8 -8
  6. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/setup.py +1 -1
  7. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/LICENSE +0 -0
  8. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/README.md +0 -0
  9. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/THIRD-PARTY-LICENSES +0 -0
  10. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/__init__.py +0 -0
  11. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/__init__.py +0 -0
  12. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/api_gateway.py +0 -0
  13. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
  14. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
  15. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
  16. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
  17. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
  18. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
  19. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
  20. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
  21. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
  22. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
  23. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
  24. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
  25. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +0 -0
  26. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
  27. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
  28. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
  29. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
  30. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
  31. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
  32. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
  33. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
  34. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
  35. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
  36. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
  37. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
  38. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
  39. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
  40. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
  41. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
  42. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/router.py +0 -0
  43. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/types.py +0 -0
  44. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/util.py +0 -0
  45. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
  46. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
  47. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/__init__.py +0 -0
  48. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/constants.py +0 -0
  49. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
  50. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/exceptions.py +0 -0
  51. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/filters.py +0 -0
  52. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
  53. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
  54. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
  55. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/types.py +0 -0
  56. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/logging/utils.py +0 -0
  57. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/__init__.py +0 -0
  58. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/base.py +0 -0
  59. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
  60. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/functions.py +0 -0
  61. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/metric.py +0 -0
  62. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/metrics.py +0 -0
  63. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
  64. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/base.py +0 -0
  65. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
  66. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
  67. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
  68. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
  69. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
  70. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
  71. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
  72. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
  73. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
  74. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
  75. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
  76. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/metrics/types.py +0 -0
  77. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
  78. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
  79. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
  80. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/package_logger.py +0 -0
  81. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/py.typed +0 -0
  82. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/__init__.py +0 -0
  83. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
  84. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/constants.py +0 -0
  85. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/cookies.py +0 -0
  86. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
  87. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/functions.py +0 -0
  88. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
  89. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
  90. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
  91. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/types.py +0 -0
  92. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/shared/user_agent.py +0 -0
  93. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/tracing/__init__.py +0 -0
  94. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/tracing/base.py +0 -0
  95. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/tracing/extensions.py +0 -0
  96. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/tracing/tracer.py +0 -0
  97. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/__init__.py +0 -0
  98. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
  99. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
  100. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
  101. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
  102. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
  103. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/batch/types.py +0 -0
  104. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
  105. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
  106. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
  107. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
  108. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
  109. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
  110. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
  111. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
  112. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
  113. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
  114. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
  115. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
  116. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
  117. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
  118. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
  119. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +0 -0
  120. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
  121. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
  122. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
  123. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
  124. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
  125. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
  126. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
  127. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
  128. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
  129. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
  130. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
  131. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
  132. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
  133. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
  134. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
  135. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
  136. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
  137. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
  138. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
  139. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
  140. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
  141. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
  142. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
  143. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
  144. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
  145. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
  146. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
  147. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
  148. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
  149. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
  150. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
  151. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
  152. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
  153. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
  154. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
  155. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
  156. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
  157. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
  158. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
  159. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
  160. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
  161. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
  162. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
  163. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
  164. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
  165. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
  166. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
  167. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
  168. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
  169. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
  170. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
  171. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
  172. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
  173. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
  174. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
  175. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
  176. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
  177. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
  178. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
  179. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
  180. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
  181. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
  182. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
  183. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
  184. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
  185. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
  186. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
  187. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
  188. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
  189. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
  190. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
  191. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
  192. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
  193. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
  194. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
  195. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
  196. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
  197. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
  198. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
  199. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
  200. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
  201. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
  202. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
  203. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
  204. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/functions.py +0 -0
  205. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
  206. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
  207. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
  208. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
  209. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
  210. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
  211. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
  212. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
  213. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
  214. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
  215. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
  216. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
  217. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
  218. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
  219. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/s3.py +0 -0
  220. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
  221. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
  222. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
  223. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
  224. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
  225. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
  226. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
  227. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
  228. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
  229. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
  230. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/serialization.py +0 -0
  231. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
  232. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
  233. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
  234. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
  235. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
  236. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
  237. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
  238. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
  239. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
  240. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
  241. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
  242. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
  243. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
  244. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
  245. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
  246. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
  247. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
  248. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
  249. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
  250. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
  251. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.1a0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
  252. {aws_lambda_powertools-3.1.1a0 → aws_lambda_powertools-3.2.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.1.1a0
3
+ Version: 3.2.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
@@ -7,6 +7,7 @@ import os
7
7
  import time
8
8
  import traceback
9
9
  from abc import ABCMeta, abstractmethod
10
+ from contextvars import ContextVar
10
11
  from datetime import datetime, timezone
11
12
  from functools import partial
12
13
  from typing import TYPE_CHECKING, Any, Callable, Iterable
@@ -61,6 +62,21 @@ class BasePowertoolsFormatter(logging.Formatter, metaclass=ABCMeta):
61
62
  """Removes any previously added logging keys"""
62
63
  raise NotImplementedError()
63
64
 
65
+ # These specific thread-safe methods are necessary to manage shared context in concurrent environments.
66
+ # They prevent race conditions and ensure data consistency across multiple threads.
67
+ def thread_safe_append_keys(self, **additional_keys) -> None:
68
+ raise NotImplementedError()
69
+
70
+ def thread_safe_get_current_keys(self) -> dict[str, Any]:
71
+ return {}
72
+
73
+ def thread_safe_remove_keys(self, keys: Iterable[str]) -> None:
74
+ raise NotImplementedError()
75
+
76
+ def thread_safe_clear_keys(self) -> None:
77
+ """Removes any previously added logging keys in a specific thread"""
78
+ raise NotImplementedError()
79
+
64
80
 
65
81
  class LambdaPowertoolsFormatter(BasePowertoolsFormatter):
66
82
  """Powertools for AWS Lambda (Python) Logging formatter.
@@ -247,6 +263,24 @@ class LambdaPowertoolsFormatter(BasePowertoolsFormatter):
247
263
  self.log_format = dict.fromkeys(self.log_record_order)
248
264
  self.log_format.update(**self.keys_combined)
249
265
 
266
+ # These specific thread-safe methods are necessary to manage shared context in concurrent environments.
267
+ # They prevent race conditions and ensure data consistency across multiple threads.
268
+ def thread_safe_append_keys(self, **additional_keys) -> None:
269
+ # Append additional key-value pairs to the context safely in a thread-safe manner.
270
+ set_context_keys(**additional_keys)
271
+
272
+ def thread_safe_get_current_keys(self) -> dict[str, Any]:
273
+ # Retrieve the current context keys safely in a thread-safe manner.
274
+ return _get_context().get()
275
+
276
+ def thread_safe_remove_keys(self, keys: Iterable[str]) -> None:
277
+ # Remove specified keys from the context safely in a thread-safe manner.
278
+ remove_context_keys(keys)
279
+
280
+ def thread_safe_clear_keys(self) -> None:
281
+ # Clear all keys from the context safely in a thread-safe manner.
282
+ clear_context_keys()
283
+
250
284
  @staticmethod
251
285
  def _build_default_keys() -> dict[str, str]:
252
286
  return {
@@ -345,14 +379,33 @@ class LambdaPowertoolsFormatter(BasePowertoolsFormatter):
345
379
  record_dict["asctime"] = self.formatTime(record=log_record)
346
380
  extras = {k: v for k, v in record_dict.items() if k not in RESERVED_LOG_ATTRS}
347
381
 
348
- formatted_log = {}
382
+ formatted_log: dict[str, Any] = {}
349
383
 
350
384
  # Iterate over a default or existing log structure
351
385
  # then replace any std log attribute e.g. '%(level)s' to 'INFO', '%(process)d to '4773'
386
+ # check if the value is a str if the key is a reserved attribute, the modulo operator only supports string
352
387
  # lastly add or replace incoming keys (those added within the constructor or .structure_logs method)
353
388
  for key, value in self.log_format.items():
354
389
  if value and key in RESERVED_LOG_ATTRS:
355
- formatted_log[key] = value % record_dict
390
+ if isinstance(value, str):
391
+ formatted_log[key] = value % record_dict
392
+ else:
393
+ raise ValueError(
394
+ "Logging keys that override reserved log attributes need to be type 'str', "
395
+ f"instead got '{type(value).__name__}'",
396
+ )
397
+ else:
398
+ formatted_log[key] = value
399
+
400
+ for key, value in _get_context().get().items():
401
+ if value and key in RESERVED_LOG_ATTRS:
402
+ if isinstance(value, str):
403
+ formatted_log[key] = value % record_dict
404
+ else:
405
+ raise ValueError(
406
+ "Logging keys that override reserved log attributes need to be type 'str', "
407
+ f"instead got '{type(value).__name__}'",
408
+ )
356
409
  else:
357
410
  formatted_log[key] = value
358
411
 
@@ -370,3 +423,29 @@ JsonFormatter = LambdaPowertoolsFormatter # alias to previous formatter
370
423
 
371
424
  # Fetch current and future parameters from PowertoolsFormatter that should be reserved
372
425
  RESERVED_FORMATTER_CUSTOM_KEYS: list[str] = inspect.getfullargspec(LambdaPowertoolsFormatter).args[1:]
426
+
427
+ # ContextVar for thread local keys
428
+ THREAD_LOCAL_KEYS: ContextVar[dict[str, Any]] = ContextVar("THREAD_LOCAL_KEYS", default={})
429
+
430
+
431
+ def _get_context() -> ContextVar[dict[str, Any]]:
432
+ return THREAD_LOCAL_KEYS
433
+
434
+
435
+ def clear_context_keys() -> None:
436
+ _get_context().set({})
437
+
438
+
439
+ def set_context_keys(**kwargs: dict[str, Any]) -> None:
440
+ context = _get_context()
441
+ context.set({**context.get(), **kwargs})
442
+
443
+
444
+ def remove_context_keys(keys: Iterable[str]) -> None:
445
+ context = _get_context()
446
+ context_values = context.get()
447
+
448
+ for k in keys:
449
+ context_values.pop(k, None)
450
+
451
+ context.set(context_values)
@@ -589,6 +589,24 @@ class Logger:
589
589
  def remove_keys(self, keys: Iterable[str]) -> None:
590
590
  self.registered_formatter.remove_keys(keys)
591
591
 
592
+ # These specific thread-safe methods are necessary to manage shared context in concurrent environments.
593
+ # They prevent race conditions and ensure data consistency across multiple threads.
594
+ def thread_safe_append_keys(self, **additional_keys: object) -> None:
595
+ # Append additional key-value pairs to the context safely in a thread-safe manner.
596
+ self.registered_formatter.thread_safe_append_keys(**additional_keys)
597
+
598
+ def thread_safe_get_current_keys(self) -> dict[str, Any]:
599
+ # Retrieve the current context keys safely in a thread-safe manner.
600
+ return self.registered_formatter.thread_safe_get_current_keys()
601
+
602
+ def thread_safe_remove_keys(self, keys: Iterable[str]) -> None:
603
+ # Remove specified keys from the context safely in a thread-safe manner.
604
+ self.registered_formatter.thread_safe_remove_keys(keys)
605
+
606
+ def thread_safe_clear_keys(self) -> None:
607
+ # Clear all keys from the context safely in a thread-safe manner.
608
+ self.registered_formatter.thread_safe_clear_keys()
609
+
592
610
  def structure_logs(self, append: bool = False, formatter_options: dict | None = None, **keys) -> None:
593
611
  """Sets logging formatting to JSON.
594
612
 
@@ -633,6 +651,7 @@ class Logger:
633
651
 
634
652
  # Mode 3
635
653
  self.registered_formatter.clear_state()
654
+ self.registered_formatter.thread_safe_clear_keys()
636
655
  self.registered_formatter.append_keys(**log_keys)
637
656
 
638
657
  def set_correlation_id(self, value: str | None) -> None:
@@ -1,3 +1,3 @@
1
1
  """Exposes version constant to avoid circular dependencies."""
2
2
 
3
- VERSION = "3.1.1a0"
3
+ VERSION = "3.2.1a0"
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "aws_lambda_powertools"
3
- version = "3.1.1a0"
3
+ version = "3.2.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"]
@@ -66,20 +66,20 @@ pdoc3 = "^0.11.0"
66
66
  pytest-asyncio = "^0.24.0"
67
67
  bandit = "^1.7.10"
68
68
  radon = "^6.0.1"
69
- xenon = "^0.9.1"
69
+ xenon = "^0.9.3"
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.161.1"
73
+ aws-cdk-lib = "^2.162.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.161.1a0"
78
- "cdklabs.generative-ai-cdk-constructs" = "^0.1.273"
77
+ "aws-cdk.aws-lambda-python-alpha" = "^2.162.1a0"
78
+ "cdklabs.generative-ai-cdk-constructs" = "^0.1.277"
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.39"
82
+ mkdocs-material = "^9.5.42"
83
83
  filelock = "^3.16.0"
84
84
  dirhash = "^0.5.0"
85
85
  mypy-boto3-appconfigdata = "^1.35.0"
@@ -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.16.0"
110
+ cfn-lint = "1.18.1"
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.10"
116
+ ruff = ">=0.5.1,<0.7.1"
117
117
  retry2 = "^0.9.5"
118
118
  pytest-socket = ">=0.6,<0.8"
119
119
  types-redis = "^4.6.0.7"
@@ -63,7 +63,7 @@ extras_require = \
63
63
 
64
64
  setup_kwargs = {
65
65
  'name': 'aws-lambda-powertools',
66
- 'version': '3.1.1a0',
66
+ 'version': '3.2.1a0',
67
67
  'description': 'Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.',
68
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',