aws-lambda-powertools 3.5.1a8__tar.gz → 3.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/PKG-INFO +1 -1
  2. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/functions.py +27 -0
  3. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/metrics.py +2 -0
  4. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +5 -1
  5. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +3 -2
  6. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/constants.py +1 -0
  7. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/version.py +1 -1
  8. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +157 -16
  9. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/base.py +204 -31
  10. aws_lambda_powertools-3.6.0/aws_lambda_powertools/utilities/data_masking/provider/base.py +189 -0
  11. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/pyproject.toml +2 -2
  12. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/setup.py +1 -1
  13. aws_lambda_powertools-3.5.1a8/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -81
  14. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/LICENSE +0 -0
  15. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/README.md +0 -0
  16. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/THIRD-PARTY-LICENSES +0 -0
  17. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/__init__.py +0 -0
  18. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/__init__.py +0 -0
  19. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/api_gateway.py +0 -0
  20. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
  21. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
  22. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
  23. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
  24. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
  25. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
  26. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
  27. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
  28. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
  29. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
  30. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
  31. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
  32. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +0 -0
  33. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
  34. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
  35. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
  36. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
  37. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
  38. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
  39. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
  40. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
  41. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
  42. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
  43. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
  44. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
  45. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
  46. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
  47. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
  48. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
  49. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/router.py +0 -0
  50. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/types.py +0 -0
  51. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/util.py +0 -0
  52. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
  53. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
  54. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/__init__.py +0 -0
  55. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/constants.py +0 -0
  56. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
  57. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/exceptions.py +0 -0
  58. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/filters.py +0 -0
  59. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/formatter.py +0 -0
  60. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
  61. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
  62. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
  63. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/logger.py +0 -0
  64. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/types.py +0 -0
  65. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/utils.py +0 -0
  66. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/__init__.py +0 -0
  67. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/base.py +0 -0
  68. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
  69. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/metric.py +0 -0
  70. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
  71. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/base.py +0 -0
  72. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
  73. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
  74. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
  75. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
  76. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
  77. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
  78. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
  79. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
  80. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
  81. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/types.py +0 -0
  82. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
  83. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
  84. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
  85. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/package_logger.py +0 -0
  86. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/py.typed +0 -0
  87. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/__init__.py +0 -0
  88. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
  89. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/cookies.py +0 -0
  90. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
  91. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/functions.py +0 -0
  92. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
  93. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
  94. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
  95. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/types.py +0 -0
  96. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/user_agent.py +0 -0
  97. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/tracing/__init__.py +0 -0
  98. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/tracing/base.py +0 -0
  99. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/tracing/extensions.py +0 -0
  100. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/tracing/tracer.py +0 -0
  101. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/__init__.py +0 -0
  102. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
  103. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
  104. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
  105. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
  106. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
  107. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/types.py +0 -0
  108. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
  109. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
  110. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
  111. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
  112. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
  113. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
  114. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
  115. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
  116. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
  117. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
  118. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
  119. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
  120. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
  121. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
  122. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +0 -0
  123. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
  124. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
  125. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
  126. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
  127. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
  128. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
  129. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
  130. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
  131. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
  132. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
  133. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
  134. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
  135. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
  136. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
  137. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
  138. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
  139. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
  140. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
  141. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
  142. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
  143. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +0 -0
  144. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
  145. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
  146. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
  147. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
  148. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
  149. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
  150. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
  151. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
  152. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
  153. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
  154. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
  155. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
  156. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
  157. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
  158. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
  159. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
  160. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
  161. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
  162. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
  163. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
  164. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
  165. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
  166. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
  167. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
  168. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
  169. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
  170. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
  171. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
  172. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
  173. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
  174. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
  175. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/functions.py +0 -0
  176. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
  177. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
  178. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
  179. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
  180. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
  181. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
  182. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
  183. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
  184. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
  185. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
  186. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
  187. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
  188. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
  189. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
  190. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
  191. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
  192. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw_websocket.py +0 -0
  193. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
  194. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
  195. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
  196. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
  197. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
  198. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
  199. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
  200. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
  201. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
  202. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
  203. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
  204. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
  205. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
  206. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
  207. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
  208. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/functions.py +0 -0
  209. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
  210. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
  211. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
  212. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/apigw_websocket.py +0 -0
  213. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
  214. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
  215. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
  216. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
  217. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
  218. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
  219. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
  220. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
  221. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
  222. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
  223. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
  224. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/s3.py +0 -0
  225. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
  226. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
  227. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
  228. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
  229. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
  230. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
  231. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/transfer_family.py +0 -0
  232. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
  233. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
  234. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
  235. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
  236. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/serialization.py +0 -0
  237. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
  238. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
  239. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
  240. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
  241. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
  242. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
  243. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
  244. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
  245. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
  246. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
  247. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
  248. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
  249. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
  250. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
  251. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
  252. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
  253. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
  254. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
  255. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
  256. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
  257. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
  258. {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/warnings/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: aws_lambda_powertools
3
- Version: 3.5.1a8
3
+ Version: 3.6.0
4
4
  Summary: Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.
5
5
  License: MIT
6
6
  Keywords: aws_lambda_powertools,aws,tracing,logging,lambda,powertools,feature_flags,idempotency,middleware
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import os
3
4
  from datetime import datetime
4
5
 
5
6
  from aws_lambda_powertools.metrics.provider.cloudwatch_emf.exceptions import (
@@ -8,6 +9,7 @@ from aws_lambda_powertools.metrics.provider.cloudwatch_emf.exceptions import (
8
9
  )
9
10
  from aws_lambda_powertools.metrics.provider.cloudwatch_emf.metric_properties import MetricResolution, MetricUnit
10
11
  from aws_lambda_powertools.shared import constants
12
+ from aws_lambda_powertools.shared.functions import strtobool
11
13
 
12
14
 
13
15
  def extract_cloudwatch_metric_resolution_value(metric_resolutions: list, resolution: int | MetricResolution) -> int:
@@ -134,3 +136,28 @@ def convert_timestamp_to_emf_format(timestamp: int | datetime) -> int:
134
136
  # Returning zero represents the initial date of epoch time,
135
137
  # which will be skipped by Amazon CloudWatch.
136
138
  return 0
139
+
140
+
141
+ def is_metrics_disabled() -> bool:
142
+ """
143
+ Determine if metrics should be disabled based on environment variables.
144
+
145
+ Returns:
146
+ bool: True if metrics are disabled, False otherwise.
147
+
148
+ Rules:
149
+ - If POWERTOOLS_DEV is True and POWERTOOLS_METRICS_DISABLED is True: Disable metrics
150
+ - If POWERTOOLS_METRICS_DISABLED is True: Disable metrics
151
+ - If POWERTOOLS_DEV is True and POWERTOOLS_METRICS_DISABLED is not set: Disable metrics
152
+ """
153
+
154
+ is_dev_mode = strtobool(os.getenv(constants.POWERTOOLS_DEV_ENV, "false"))
155
+ is_metrics_disabled = strtobool(os.getenv(constants.METRICS_DISABLED_ENV, "false"))
156
+
157
+ disable_conditions = [
158
+ is_metrics_disabled,
159
+ is_metrics_disabled and is_dev_mode,
160
+ is_dev_mode and os.getenv(constants.METRICS_DISABLED_ENV) is None,
161
+ ]
162
+
163
+ return any(disable_conditions)
@@ -47,6 +47,8 @@ class Metrics:
47
47
  metric namespace
48
48
  POWERTOOLS_SERVICE_NAME : str
49
49
  service name used for default dimension
50
+ POWERTOOLS_METRICS_DISABLED: bool
51
+ Powertools metrics disabled (e.g. `"true", "True", "TRUE"`)
50
52
 
51
53
  Parameters
52
54
  ----------
@@ -15,6 +15,7 @@ from aws_lambda_powertools.metrics.functions import (
15
15
  convert_timestamp_to_emf_format,
16
16
  extract_cloudwatch_metric_resolution_value,
17
17
  extract_cloudwatch_metric_unit_value,
18
+ is_metrics_disabled,
18
19
  validate_emf_timestamp,
19
20
  )
20
21
  from aws_lambda_powertools.metrics.provider.base import BaseProvider
@@ -77,6 +78,7 @@ class AmazonCloudWatchEMFProvider(BaseProvider):
77
78
  self.default_dimensions = default_dimensions or {}
78
79
  self.namespace = resolve_env_var_choice(choice=namespace, env=os.getenv(constants.METRICS_NAMESPACE_ENV))
79
80
  self.service = resolve_env_var_choice(choice=service, env=os.getenv(constants.SERVICE_NAME_ENV))
81
+
80
82
  self.metadata_set = metadata_set if metadata_set is not None else {}
81
83
  self.timestamp: int | None = None
82
84
 
@@ -127,6 +129,7 @@ class AmazonCloudWatchEMFProvider(BaseProvider):
127
129
  MetricResolutionError
128
130
  When metric resolution is not supported by CloudWatch
129
131
  """
132
+
130
133
  if not isinstance(value, numbers.Number):
131
134
  raise MetricValueError(f"{value} is not a valid number")
132
135
 
@@ -268,6 +271,7 @@ class AmazonCloudWatchEMFProvider(BaseProvider):
268
271
  value : str
269
272
  Dimension value
270
273
  """
274
+
271
275
  logger.debug(f"Adding dimension: {name}:{value}")
272
276
  if len(self.dimension_set) == MAX_DIMENSIONS:
273
277
  raise SchemaValidationError(
@@ -374,7 +378,7 @@ class AmazonCloudWatchEMFProvider(BaseProvider):
374
378
  "If application metrics should never be empty, consider using 'raise_on_empty_metrics'",
375
379
  stacklevel=2,
376
380
  )
377
- else:
381
+ elif not is_metrics_disabled():
378
382
  logger.debug("Flushing existing metrics")
379
383
  metrics = self.serialize_metric_set()
380
384
  print(json.dumps(metrics, separators=(",", ":")))
@@ -10,6 +10,7 @@ import warnings
10
10
  from typing import TYPE_CHECKING, Any
11
11
 
12
12
  from aws_lambda_powertools.metrics.exceptions import MetricValueError, SchemaValidationError
13
+ from aws_lambda_powertools.metrics.functions import is_metrics_disabled
13
14
  from aws_lambda_powertools.metrics.provider import BaseProvider
14
15
  from aws_lambda_powertools.metrics.provider.datadog.warnings import DatadogDataValidationWarning
15
16
  from aws_lambda_powertools.shared import constants
@@ -99,7 +100,6 @@ class DatadogProvider(BaseProvider):
99
100
  >>> sales='sam'
100
101
  >>> )
101
102
  """
102
-
103
103
  # validating metric name
104
104
  if not self._validate_datadog_metric_name(name):
105
105
  docs = "https://docs.datadoghq.com/metrics/custom_metrics/#naming-custom-metrics"
@@ -180,6 +180,7 @@ class DatadogProvider(BaseProvider):
180
180
  raise_on_empty_metrics : bool, optional
181
181
  raise exception if no metrics are emitted, by default False
182
182
  """
183
+
183
184
  if not raise_on_empty_metrics and len(self.metric_set) == 0:
184
185
  warnings.warn(
185
186
  "No application metrics to publish. The cold-start metric may be published if enabled. "
@@ -200,7 +201,7 @@ class DatadogProvider(BaseProvider):
200
201
  timestamp=metric_item["e"],
201
202
  tags=metric_item["t"],
202
203
  )
203
- else:
204
+ elif not is_metrics_disabled():
204
205
  # dd module not found: flush to log, this format can be recognized via datadog log forwarder
205
206
  # https://github.com/Datadog/datadog-lambda-python/blob/main/datadog_lambda/metric.py#L77
206
207
  for metric_item in metrics:
@@ -40,6 +40,7 @@ LAMBDA_LOG_LEVEL_ENV: str = "AWS_LAMBDA_LOG_LEVEL"
40
40
  METRICS_NAMESPACE_ENV: str = "POWERTOOLS_METRICS_NAMESPACE"
41
41
  DATADOG_FLUSH_TO_LOG: str = "DD_FLUSH_TO_LOG"
42
42
  SERVICE_NAME_ENV: str = "POWERTOOLS_SERVICE_NAME"
43
+ METRICS_DISABLED_ENV: str = "POWERTOOLS_METRICS_DISABLED"
43
44
  # If the timestamp of log event is more than 2 hours in future, the log event is skipped.
44
45
  # If the timestamp of log event is more than 14 days in past, the log event is skipped.
45
46
  # See https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html
@@ -1,3 +1,3 @@
1
1
  """Exposes version constant to avoid circular dependencies."""
2
2
 
3
- VERSION = "3.5.1a8"
3
+ VERSION = "3.6.0"
@@ -5,7 +5,7 @@ import re
5
5
  import warnings
6
6
  from typing import Any, overload
7
7
 
8
- from typing_extensions import deprecated
8
+ from typing_extensions import deprecated, override
9
9
 
10
10
  from aws_lambda_powertools.utilities.data_classes.common import (
11
11
  BaseRequestContext,
@@ -28,9 +28,10 @@ class APIGatewayRouteArn:
28
28
  aws_account_id: str,
29
29
  api_id: str,
30
30
  stage: str,
31
- http_method: str,
31
+ http_method: str | None,
32
32
  resource: str,
33
33
  partition: str = "aws",
34
+ is_websocket_authorizer: bool = False,
34
35
  ):
35
36
  self.partition = partition
36
37
  self.region = region
@@ -40,39 +41,54 @@ class APIGatewayRouteArn:
40
41
  self.http_method = http_method
41
42
  # Remove matching "/" from `resource`.
42
43
  self.resource = resource.lstrip("/")
44
+ self.is_websocket_authorizer = is_websocket_authorizer
43
45
 
44
46
  @property
45
47
  def arn(self) -> str:
46
48
  """Build an arn from its parts
47
49
  eg: arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request"""
48
- return (
49
- f"arn:{self.partition}:execute-api:{self.region}:{self.aws_account_id}:{self.api_id}/{self.stage}/"
50
- f"{self.http_method}/{self.resource}"
51
- )
50
+ base_arn = f"arn:{self.partition}:execute-api:{self.region}:{self.aws_account_id}:{self.api_id}/{self.stage}"
51
+
52
+ if not self.is_websocket_authorizer:
53
+ return f"{base_arn}/{self.http_method}/{self.resource}"
54
+ else:
55
+ return f"{base_arn}/{self.resource}"
52
56
 
53
57
 
54
- def parse_api_gateway_arn(arn: str) -> APIGatewayRouteArn:
58
+ def parse_api_gateway_arn(arn: str, is_websocket_authorizer: bool = False) -> APIGatewayRouteArn:
55
59
  """Parses a gateway route arn as a APIGatewayRouteArn class
56
60
 
57
61
  Parameters
58
62
  ----------
59
63
  arn : str
60
64
  ARN string for a methodArn or a routeArn
65
+ is_websocket_authorizer: bool
66
+ If it's a API Gateway Websocket
67
+
61
68
  Returns
62
69
  -------
63
70
  APIGatewayRouteArn
64
71
  """
65
72
  arn_parts = arn.split(":")
66
73
  api_gateway_arn_parts = arn_parts[5].split("/")
74
+
75
+ if not is_websocket_authorizer:
76
+ http_method = api_gateway_arn_parts[2]
77
+ resource = "/".join(api_gateway_arn_parts[3:]) if len(api_gateway_arn_parts) >= 4 else ""
78
+ else:
79
+ http_method = None
80
+ resource = "/".join(api_gateway_arn_parts[2:])
81
+
67
82
  return APIGatewayRouteArn(
68
83
  partition=arn_parts[1],
69
84
  region=arn_parts[3],
70
85
  aws_account_id=arn_parts[4],
71
86
  api_id=api_gateway_arn_parts[0],
72
87
  stage=api_gateway_arn_parts[1],
73
- http_method=api_gateway_arn_parts[2],
88
+ http_method=http_method,
74
89
  # conditional allow us to handle /path/{proxy+} resources, as their length changes.
75
- resource="/".join(api_gateway_arn_parts[3:]) if len(api_gateway_arn_parts) >= 4 else "",
90
+ resource=resource,
91
+ is_websocket_authorizer=is_websocket_authorizer,
76
92
  )
77
93
 
78
94
 
@@ -512,13 +528,14 @@ class APIGatewayAuthorizerResponse:
512
528
  raise ValueError(f"Invalid resource path: {resource}. Path should match {self.path_regex}")
513
529
 
514
530
  resource_arn = APIGatewayRouteArn(
515
- self.region,
516
- self.aws_account_id,
517
- self.api_id,
518
- self.stage,
519
- http_method,
520
- resource,
521
- self.partition,
531
+ region=self.region,
532
+ aws_account_id=self.aws_account_id,
533
+ api_id=self.api_id,
534
+ stage=self.stage,
535
+ http_method=http_method,
536
+ resource=resource,
537
+ partition=self.partition,
538
+ is_websocket_authorizer=False,
522
539
  ).arn
523
540
 
524
541
  route = {"resourceArn": resource_arn, "conditions": conditions}
@@ -617,3 +634,127 @@ class APIGatewayAuthorizerResponse:
617
634
  response["context"] = self.context
618
635
 
619
636
  return response
637
+
638
+
639
+ class APIGatewayAuthorizerResponseWebSocket(APIGatewayAuthorizerResponse):
640
+ """The IAM Policy Response required for API Gateway WebSocket APIs
641
+
642
+ Based on: - https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/blob/\
643
+ master/blueprints/python/api-gateway-authorizer-python.py
644
+
645
+ Documentation:
646
+ -------------
647
+ - https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html
648
+ - https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html
649
+ """
650
+
651
+ @staticmethod
652
+ def from_route_arn(
653
+ arn: str,
654
+ principal_id: str,
655
+ context: dict | None = None,
656
+ usage_identifier_key: str | None = None,
657
+ ) -> APIGatewayAuthorizerResponseWebSocket:
658
+ parsed_arn = parse_api_gateway_arn(arn, is_websocket_authorizer=True)
659
+ return APIGatewayAuthorizerResponseWebSocket(
660
+ principal_id,
661
+ parsed_arn.region,
662
+ parsed_arn.aws_account_id,
663
+ parsed_arn.api_id,
664
+ parsed_arn.stage,
665
+ context,
666
+ usage_identifier_key,
667
+ )
668
+
669
+ # Note: we need ignore[override] because we are removing the http_method field
670
+ @override
671
+ def _add_route(self, effect: str, resource: str, conditions: list[dict] | None = None): # type: ignore[override]
672
+ """Adds a route to the internal lists of allowed or denied routes. Each object in
673
+ the internal list contains a resource ARN and a condition statement. The condition
674
+ statement can be null."""
675
+ resource_arn = APIGatewayRouteArn(
676
+ region=self.region,
677
+ aws_account_id=self.aws_account_id,
678
+ api_id=self.api_id,
679
+ stage=self.stage,
680
+ http_method=None,
681
+ resource=resource,
682
+ partition=self.partition,
683
+ is_websocket_authorizer=True,
684
+ ).arn
685
+
686
+ route = {"resourceArn": resource_arn, "conditions": conditions}
687
+
688
+ if effect.lower() == "allow":
689
+ self._allow_routes.append(route)
690
+ else: # deny
691
+ self._deny_routes.append(route)
692
+
693
+ @override
694
+ def allow_all_routes(self):
695
+ """Adds a '*' allow to the policy to authorize access to all methods of an API"""
696
+ self._add_route(effect="Allow", resource="*")
697
+
698
+ @override
699
+ def deny_all_routes(self):
700
+ """Adds a '*' allow to the policy to deny access to all methods of an API"""
701
+
702
+ self._add_route(effect="Deny", resource="*")
703
+
704
+ # Note: we need ignore[override] because we are removing the http_method field
705
+ @override
706
+ def allow_route(self, resource: str, conditions: list[dict] | None = None): # type: ignore[override]
707
+ """
708
+ Add an API Gateway Websocket method to the list of allowed methods for the policy.
709
+
710
+ This method adds an API Gateway Websocket method Resource path) to the list of
711
+ allowed methods for the policy. It optionally includes conditions for the policy statement.
712
+
713
+ Parameters
714
+ ----------
715
+ resource : str
716
+ The API Gateway resource path to allow.
717
+ conditions : list[dict] | None, optional
718
+ A list of condition dictionaries to apply to the policy statement.
719
+ Default is None.
720
+
721
+ Notes
722
+ -----
723
+ For more information on AWS policy conditions, see:
724
+ https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Condition
725
+
726
+ Example
727
+ --------
728
+ >>> policy = APIGatewayAuthorizerResponseWebSocket(...)
729
+ >>> policy.allow_route("/api/users", [{"StringEquals": {"aws:RequestTag/Environment": "Production"}}])
730
+ """
731
+ self._add_route(effect="Allow", resource=resource, conditions=conditions)
732
+
733
+ # Note: we need ignore[override] because we are removing the http_method field
734
+ @override
735
+ def deny_route(self, resource: str, conditions: list[dict] | None = None): # type: ignore[override]
736
+ """
737
+ Add an API Gateway Websocket method to the list of allowed methods for the policy.
738
+
739
+ This method adds an API Gateway Websocket method Resource path) to the list of
740
+ denied methods for the policy. It optionally includes conditions for the policy statement.
741
+
742
+ Parameters
743
+ ----------
744
+ resource : str
745
+ The API Gateway resource path to allow.
746
+ conditions : list[dict] | None, optional
747
+ A list of condition dictionaries to apply to the policy statement.
748
+ Default is None.
749
+
750
+ Notes
751
+ -----
752
+ For more information on AWS policy conditions, see:
753
+ https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Condition
754
+
755
+ Example
756
+ --------
757
+ >>> policy = APIGatewayAuthorizerResponseWebSocket(...)
758
+ >>> policy.deny_route("/api/users", [{"StringEquals": {"aws:RequestTag/Environment": "Production"}}])
759
+ """
760
+ self._add_route(effect="Deny", resource=resource, conditions=conditions)