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.
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/PKG-INFO +1 -1
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/functions.py +27 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/metrics.py +2 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +5 -1
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +3 -2
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/constants.py +1 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/version.py +1 -1
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/base.py +204 -31
- aws_lambda_powertools-3.6.0/aws_lambda_powertools/utilities/data_masking/provider/base.py +189 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/pyproject.toml +2 -2
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/setup.py +1 -1
- aws_lambda_powertools-3.5.1a8/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -81
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/LICENSE +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/README.md +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/THIRD-PARTY-LICENSES +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/api_gateway.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
- {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
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/router.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/util.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/constants.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/filters.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/formatter.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/logger.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/logging/utils.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/metric.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/metrics/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/package_logger.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/py.typed +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/cookies.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/functions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/shared/user_agent.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/tracing/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/tracing/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/tracing/extensions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/tracing/tracer.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/batch/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
- {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
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/functions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/functions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/s3.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/transfer_family.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/serialization.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
- {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
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
- {aws_lambda_powertools-3.5.1a8 → aws_lambda_powertools-3.6.0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
- {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.
|
|
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)
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
@@ -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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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=
|
|
88
|
+
http_method=http_method,
|
|
74
89
|
# conditional allow us to handle /path/{proxy+} resources, as their length changes.
|
|
75
|
-
resource=
|
|
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)
|