aws-lambda-powertools 2.37.0__tar.gz → 2.38.1__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-2.37.0 → aws_lambda_powertools-2.38.1}/PKG-INFO +1 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/THIRD-PARTY-LICENSES +24 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/api_gateway.py +64 -3
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +1 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/compat.py +1 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +1 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +4 -0
- aws_lambda_powertools-2.38.1/aws_lambda_powertools/logging/constants.py +5 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/logger.py +6 -3
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/utils.py +16 -4
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/constants.py +2 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/version.py +1 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/batch/types.py +2 -2
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/alb_event.py +1 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +46 -45
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +1 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/common.py +1 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/s3_event.py +7 -7
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +2 -2
- aws_lambda_powertools-2.38.1/aws_lambda_powertools/utilities/data_masking/__init__.py +5 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_masking/base.py +0 -4
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/compat.py +2 -2
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/s3.py +1 -1
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/parser.py +10 -9
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/pyproject.toml +20 -19
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/setup.py +1 -1
- aws_lambda_powertools-2.37.0/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -11
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/LICENSE +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/README.md +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/appsync.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/content_types.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/router.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/types.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/util.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/exceptions/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/filters.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/formatter.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/lambda_context.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/types.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/functions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/metric.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/metrics.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/metrics/types.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/package_logger.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/py.typed +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/cache_dict.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/cookies.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/functions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/json_encoder.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/lazy_import.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/types.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/shared/user_agent.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/tracing/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/tracing/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/tracing/extensions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/tracing/tracer.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/batch/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/pydantic.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/parser/types.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/serialization.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/validation/base.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
- {aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: aws-lambda-powertools
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.38.1
|
|
4
4
|
Summary: Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.
|
|
5
5
|
Home-page: https://github.com/aws-powertools/powertools-lambda-python
|
|
6
6
|
License: MIT
|
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
** FastAPI - https://github.com/tiangolo/fastapi/ - Used in the OpenAPI feature
|
|
2
|
+
|
|
3
|
+
The MIT License (MIT)
|
|
4
|
+
|
|
5
|
+
Copyright (c) 2018 Sebastián Ramírez
|
|
6
|
+
|
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
in the Software without restriction, including without limitation the rights
|
|
10
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
furnished to do so, subject to the following conditions:
|
|
13
|
+
|
|
14
|
+
The above copyright notice and this permission notice shall be included in
|
|
15
|
+
all copies or substantial portions of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
+
THE SOFTWARE.
|
|
24
|
+
|
|
1
25
|
** Tensorflow - https://github.com/tensorflow/tensorflow/
|
|
2
26
|
|
|
3
27
|
Apache License
|
|
@@ -1222,6 +1222,63 @@ class BaseRouter(ABC):
|
|
|
1222
1222
|
middlewares,
|
|
1223
1223
|
)
|
|
1224
1224
|
|
|
1225
|
+
def head(
|
|
1226
|
+
self,
|
|
1227
|
+
rule: str,
|
|
1228
|
+
cors: Optional[bool] = None,
|
|
1229
|
+
compress: bool = False,
|
|
1230
|
+
cache_control: Optional[str] = None,
|
|
1231
|
+
summary: Optional[str] = None,
|
|
1232
|
+
description: Optional[str] = None,
|
|
1233
|
+
responses: Optional[Dict[int, OpenAPIResponse]] = None,
|
|
1234
|
+
response_description: str = _DEFAULT_OPENAPI_RESPONSE_DESCRIPTION,
|
|
1235
|
+
tags: Optional[List[str]] = None,
|
|
1236
|
+
operation_id: Optional[str] = None,
|
|
1237
|
+
include_in_schema: bool = True,
|
|
1238
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1239
|
+
middlewares: Optional[List[Callable]] = None,
|
|
1240
|
+
):
|
|
1241
|
+
"""Head route decorator with HEAD `method`
|
|
1242
|
+
|
|
1243
|
+
Examples
|
|
1244
|
+
--------
|
|
1245
|
+
Simple example with a custom lambda handler using the Tracer capture_lambda_handler decorator
|
|
1246
|
+
|
|
1247
|
+
```python
|
|
1248
|
+
from aws_lambda_powertools import Tracer
|
|
1249
|
+
from aws_lambda_powertools.event_handler import APIGatewayRestResolver, Response, content_types
|
|
1250
|
+
|
|
1251
|
+
tracer = Tracer()
|
|
1252
|
+
app = APIGatewayRestResolver()
|
|
1253
|
+
|
|
1254
|
+
@app.head("/head-call")
|
|
1255
|
+
def simple_head():
|
|
1256
|
+
return Response(status_code=200,
|
|
1257
|
+
content_type=content_types.APPLICATION_JSON,
|
|
1258
|
+
headers={"Content-Length": "123"})
|
|
1259
|
+
|
|
1260
|
+
@tracer.capture_lambda_handler
|
|
1261
|
+
def lambda_handler(event, context):
|
|
1262
|
+
return app.resolve(event, context)
|
|
1263
|
+
```
|
|
1264
|
+
"""
|
|
1265
|
+
return self.route(
|
|
1266
|
+
rule,
|
|
1267
|
+
"HEAD",
|
|
1268
|
+
cors,
|
|
1269
|
+
compress,
|
|
1270
|
+
cache_control,
|
|
1271
|
+
summary,
|
|
1272
|
+
description,
|
|
1273
|
+
responses,
|
|
1274
|
+
response_description,
|
|
1275
|
+
tags,
|
|
1276
|
+
operation_id,
|
|
1277
|
+
include_in_schema,
|
|
1278
|
+
security,
|
|
1279
|
+
middlewares,
|
|
1280
|
+
)
|
|
1281
|
+
|
|
1225
1282
|
def _push_processed_stack_frame(self, frame: str):
|
|
1226
1283
|
"""
|
|
1227
1284
|
Add Current Middleware to the Middleware Stack Frames
|
|
@@ -1589,13 +1646,13 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1589
1646
|
from aws_lambda_powertools.event_handler.openapi.pydantic_loader import PYDANTIC_V2
|
|
1590
1647
|
|
|
1591
1648
|
# Pydantic V2 has no support for OpenAPI schema 3.0
|
|
1592
|
-
if PYDANTIC_V2 and not openapi_version.startswith("3.1"):
|
|
1649
|
+
if PYDANTIC_V2 and not openapi_version.startswith("3.1"): # pragma: no cover
|
|
1593
1650
|
warnings.warn(
|
|
1594
1651
|
"You are using Pydantic v2, which is incompatible with OpenAPI schema 3.0. Forcing OpenAPI 3.1",
|
|
1595
1652
|
stacklevel=2,
|
|
1596
1653
|
)
|
|
1597
1654
|
openapi_version = "3.1.0"
|
|
1598
|
-
elif not PYDANTIC_V2 and not openapi_version.startswith("3.0"):
|
|
1655
|
+
elif not PYDANTIC_V2 and not openapi_version.startswith("3.0"): # pragma: no cover
|
|
1599
1656
|
warnings.warn(
|
|
1600
1657
|
"You are using Pydantic v1, which is incompatible with OpenAPI schema 3.1. Forcing OpenAPI 3.0",
|
|
1601
1658
|
stacklevel=2,
|
|
@@ -1696,6 +1753,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1696
1753
|
security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
|
|
1697
1754
|
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1698
1755
|
oauth2_config: Optional["OAuth2Config"] = None,
|
|
1756
|
+
persist_authorization: bool = False,
|
|
1699
1757
|
):
|
|
1700
1758
|
"""
|
|
1701
1759
|
Returns the OpenAPI schema as a JSON serializable dict
|
|
@@ -1736,6 +1794,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1736
1794
|
A declaration of which security mechanisms are applied globally across the API.
|
|
1737
1795
|
oauth2_config: OAuth2Config, optional
|
|
1738
1796
|
The OAuth2 configuration for the Swagger UI.
|
|
1797
|
+
persist_authorization: bool, optional
|
|
1798
|
+
Whether to persist authorization data on browser close/refresh.
|
|
1739
1799
|
"""
|
|
1740
1800
|
from aws_lambda_powertools.event_handler.openapi.compat import model_json
|
|
1741
1801
|
from aws_lambda_powertools.event_handler.openapi.models import Server
|
|
@@ -1814,6 +1874,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1814
1874
|
swagger_css,
|
|
1815
1875
|
swagger_base_url,
|
|
1816
1876
|
oauth2_config,
|
|
1877
|
+
persist_authorization,
|
|
1817
1878
|
)
|
|
1818
1879
|
|
|
1819
1880
|
return Response(
|
|
@@ -2135,7 +2196,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2135
2196
|
|
|
2136
2197
|
def exception_handler(self, exc_class: Union[Type[Exception], List[Type[Exception]]]):
|
|
2137
2198
|
def register_exception_handler(func: Callable):
|
|
2138
|
-
if isinstance(exc_class, list):
|
|
2199
|
+
if isinstance(exc_class, list): # pragma: no cover
|
|
2139
2200
|
for exp in exc_class:
|
|
2140
2201
|
self._exception_handlers[exp] = func
|
|
2141
2202
|
else:
|
|
@@ -410,7 +410,7 @@ def _normalize_multi_query_string_with_param(
|
|
|
410
410
|
return resolved_query_string
|
|
411
411
|
|
|
412
412
|
|
|
413
|
-
def _normalize_multi_header_values_with_param(headers:
|
|
413
|
+
def _normalize_multi_header_values_with_param(headers: Dict[str, Any], params: Sequence[ModelField]):
|
|
414
414
|
"""
|
|
415
415
|
Extract and normalize resolved_headers_field
|
|
416
416
|
|
|
@@ -40,7 +40,7 @@ sequence_types = tuple(sequence_annotation_to_type.keys())
|
|
|
40
40
|
|
|
41
41
|
RequestErrorModel: Type[BaseModel] = create_model("Request")
|
|
42
42
|
|
|
43
|
-
if PYDANTIC_V2:
|
|
43
|
+
if PYDANTIC_V2: # pragma: no cover # false positive; dropping in v3
|
|
44
44
|
from pydantic import TypeAdapter, ValidationError
|
|
45
45
|
from pydantic._internal._typing_extra import eval_type_lenient
|
|
46
46
|
from pydantic.fields import FieldInfo
|
|
@@ -10,6 +10,7 @@ def generate_swagger_html(
|
|
|
10
10
|
swagger_css: str,
|
|
11
11
|
swagger_base_url: str,
|
|
12
12
|
oauth2_config: Optional[OAuth2Config],
|
|
13
|
+
persist_authorization: bool = False,
|
|
13
14
|
) -> str:
|
|
14
15
|
"""
|
|
15
16
|
Generate Swagger UI HTML page
|
|
@@ -28,6 +29,8 @@ def generate_swagger_html(
|
|
|
28
29
|
The base URL for Swagger UI
|
|
29
30
|
oauth2_config: OAuth2Config, optional
|
|
30
31
|
The OAuth2 configuration.
|
|
32
|
+
persist_authorization: bool, optional
|
|
33
|
+
Whether to persist authorization data on browser close/refresh.
|
|
31
34
|
"""
|
|
32
35
|
|
|
33
36
|
# If Swagger base URL is present, generate HTML content with linked CSS and JavaScript files
|
|
@@ -86,6 +89,7 @@ def generate_swagger_html(
|
|
|
86
89
|
SwaggerUIBundle.plugins.DownloadUrl
|
|
87
90
|
],
|
|
88
91
|
withCredentials: true,
|
|
92
|
+
persistAuthorization: {str(persist_authorization).lower()},
|
|
89
93
|
oauth2RedirectUrl: baseUrl + "?format=oauth2-redirect",
|
|
90
94
|
}}
|
|
91
95
|
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# logger.powertools_handler is set with Powertools Logger handler; useful when there are many handlers
|
|
2
|
+
LOGGER_ATTRIBUTE_POWERTOOLS_HANDLER = "powertools_handler"
|
|
3
|
+
# logger.init attribute is set when Logger has been configured
|
|
4
|
+
LOGGER_ATTRIBUTE_PRECONFIGURED = "init"
|
|
5
|
+
LOGGER_ATTRIBUTE_HANDLER = "logger_handler"
|
|
@@ -22,6 +22,9 @@ from typing import (
|
|
|
22
22
|
overload,
|
|
23
23
|
)
|
|
24
24
|
|
|
25
|
+
from aws_lambda_powertools.logging.constants import (
|
|
26
|
+
LOGGER_ATTRIBUTE_PRECONFIGURED,
|
|
27
|
+
)
|
|
25
28
|
from aws_lambda_powertools.shared import constants
|
|
26
29
|
from aws_lambda_powertools.shared.functions import (
|
|
27
30
|
extract_event_from_common_models,
|
|
@@ -264,7 +267,7 @@ class Logger:
|
|
|
264
267
|
|
|
265
268
|
# Prevent __getattr__ from shielding unknown attribute errors in type checkers
|
|
266
269
|
# https://github.com/aws-powertools/powertools-lambda-python/issues/1660
|
|
267
|
-
if not TYPE_CHECKING:
|
|
270
|
+
if not TYPE_CHECKING: # pragma: no cover
|
|
268
271
|
|
|
269
272
|
def __getattr__(self, name):
|
|
270
273
|
# Proxy attributes not found to actual logger to support backward compatibility
|
|
@@ -292,7 +295,7 @@ class Logger:
|
|
|
292
295
|
# a) multiple handlers being attached
|
|
293
296
|
# b) different sampling mechanisms
|
|
294
297
|
# c) multiple messages from being logged as handlers can be duplicated
|
|
295
|
-
is_logger_preconfigured = getattr(self._logger,
|
|
298
|
+
is_logger_preconfigured = getattr(self._logger, LOGGER_ATTRIBUTE_PRECONFIGURED, False)
|
|
296
299
|
if self.child or is_logger_preconfigured:
|
|
297
300
|
return
|
|
298
301
|
|
|
@@ -613,7 +616,7 @@ class Logger:
|
|
|
613
616
|
|
|
614
617
|
# Mode 1
|
|
615
618
|
log_keys = {**self._default_log_keys, **keys}
|
|
616
|
-
is_logger_preconfigured = getattr(self._logger,
|
|
619
|
+
is_logger_preconfigured = getattr(self._logger, LOGGER_ATTRIBUTE_PRECONFIGURED, False)
|
|
617
620
|
if not is_logger_preconfigured:
|
|
618
621
|
formatter = self.logger_formatter or LambdaPowertoolsFormatter(**formatter_options, **log_keys)
|
|
619
622
|
self.registered_handler.setFormatter(formatter)
|
{aws_lambda_powertools-2.37.0 → aws_lambda_powertools-2.38.1}/aws_lambda_powertools/logging/utils.py
RENAMED
|
@@ -9,6 +9,7 @@ PACKAGE_LOGGER = "aws_lambda_powertools"
|
|
|
9
9
|
def copy_config_to_registered_loggers(
|
|
10
10
|
source_logger: Logger,
|
|
11
11
|
log_level: Optional[Union[int, str]] = None,
|
|
12
|
+
ignore_log_level=False,
|
|
12
13
|
exclude: Optional[Set[str]] = None,
|
|
13
14
|
include: Optional[Set[str]] = None,
|
|
14
15
|
) -> None:
|
|
@@ -16,10 +17,13 @@ def copy_config_to_registered_loggers(
|
|
|
16
17
|
|
|
17
18
|
Parameters
|
|
18
19
|
----------
|
|
20
|
+
ignore_log_level
|
|
19
21
|
source_logger : Logger
|
|
20
22
|
Powertools for AWS Lambda (Python) Logger to copy configuration from
|
|
21
23
|
log_level : Union[int, str], optional
|
|
22
24
|
Logging level to set to registered loggers, by default uses source_logger logging level
|
|
25
|
+
ignore_log_level: bool
|
|
26
|
+
Whether to not touch log levels for discovered loggers. log_level param is disregarded when this is set.
|
|
23
27
|
include : Optional[Set[str]], optional
|
|
24
28
|
List of logger names to include, by default all registered loggers are included
|
|
25
29
|
exclude : Optional[Set[str]], optional
|
|
@@ -54,7 +58,7 @@ def copy_config_to_registered_loggers(
|
|
|
54
58
|
|
|
55
59
|
registered_loggers = _find_registered_loggers(source_logger, loggers, filter_func)
|
|
56
60
|
for logger in registered_loggers:
|
|
57
|
-
_configure_logger(source_logger, logger, level)
|
|
61
|
+
_configure_logger(source_logger=source_logger, logger=logger, level=level, ignore_log_level=ignore_log_level)
|
|
58
62
|
|
|
59
63
|
|
|
60
64
|
def _include_registered_loggers_filter(loggers: Set[str]):
|
|
@@ -78,13 +82,21 @@ def _find_registered_loggers(
|
|
|
78
82
|
return root_loggers
|
|
79
83
|
|
|
80
84
|
|
|
81
|
-
def _configure_logger(
|
|
85
|
+
def _configure_logger(
|
|
86
|
+
source_logger: Logger,
|
|
87
|
+
logger: logging.Logger,
|
|
88
|
+
level: Union[int, str],
|
|
89
|
+
ignore_log_level: bool = False,
|
|
90
|
+
) -> None:
|
|
91
|
+
# customers may not want to copy the same log level from Logger to discovered loggers
|
|
92
|
+
if not ignore_log_level:
|
|
93
|
+
logger.setLevel(level)
|
|
94
|
+
source_logger.debug(f"Logger {logger} reconfigured to use logging level {level}")
|
|
95
|
+
|
|
82
96
|
logger.handlers = []
|
|
83
|
-
logger.setLevel(level)
|
|
84
97
|
logger.propagate = False # ensure we don't propagate logs to existing loggers, #1073
|
|
85
98
|
source_logger.append_keys(name="%(name)s") # include logger name, see #1267
|
|
86
99
|
|
|
87
|
-
source_logger.debug(f"Logger {logger} reconfigured to use logging level {level}")
|
|
88
100
|
for source_handler in source_logger.handlers:
|
|
89
101
|
logger.addHandler(source_handler)
|
|
90
102
|
source_logger.debug(f"Logger {logger} reconfigured to use {source_handler}")
|
|
@@ -9,6 +9,7 @@ MIDDLEWARE_FACTORY_TRACE_ENV: str = "POWERTOOLS_TRACE_MIDDLEWARES"
|
|
|
9
9
|
INVALID_XRAY_NAME_CHARACTERS = r"[?;*()!$~^<>]"
|
|
10
10
|
|
|
11
11
|
# Logger constants
|
|
12
|
+
# maintenance: future major version should start having localized `constants.py` to ease future modularization
|
|
12
13
|
LOGGER_LOG_SAMPLING_RATE: str = "POWERTOOLS_LOGGER_SAMPLE_RATE"
|
|
13
14
|
LOGGER_LOG_EVENT_ENV: str = "POWERTOOLS_LOGGER_LOG_EVENT"
|
|
14
15
|
LOGGER_LOG_DEDUPLICATION_ENV: str = "POWERTOOLS_LOG_DEDUPLICATION_DISABLED"
|
|
@@ -61,7 +62,7 @@ POWERTOOLS_DEBUG_ENV: str = "POWERTOOLS_DEBUG"
|
|
|
61
62
|
|
|
62
63
|
# JSON constants
|
|
63
64
|
PRETTY_INDENT: int = 4
|
|
64
|
-
COMPACT_INDENT = None
|
|
65
|
+
COMPACT_INDENT: None = None
|
|
65
66
|
|
|
66
67
|
# Idempotency constants
|
|
67
68
|
IDEMPOTENCY_DISABLED_ENV: str = "POWERTOOLS_IDEMPOTENCY_DISABLED"
|
|
@@ -7,7 +7,7 @@ has_pydantic = "pydantic" in sys.modules
|
|
|
7
7
|
|
|
8
8
|
# For IntelliSense and Mypy to work, we need to account for possible SQS subclasses
|
|
9
9
|
# We need them as subclasses as we must access their message ID or sequence number metadata via dot notation
|
|
10
|
-
if has_pydantic:
|
|
10
|
+
if has_pydantic: # pragma: no cover
|
|
11
11
|
from aws_lambda_powertools.utilities.parser.models import DynamoDBStreamRecordModel, SqsRecordModel
|
|
12
12
|
from aws_lambda_powertools.utilities.parser.models import (
|
|
13
13
|
KinesisDataStreamRecord as KinesisDataStreamRecordModel,
|
|
@@ -17,7 +17,7 @@ if has_pydantic:
|
|
|
17
17
|
Union[Type[SqsRecordModel], Type[DynamoDBStreamRecordModel], Type[KinesisDataStreamRecordModel]]
|
|
18
18
|
]
|
|
19
19
|
BatchSqsTypeModel = Optional[Type[SqsRecordModel]]
|
|
20
|
-
else:
|
|
20
|
+
else: # pragma: no cover
|
|
21
21
|
BatchTypeModels = "BatchTypeModels" # type: ignore
|
|
22
22
|
BatchSqsTypeModel = "BatchSqsTypeModel" # type: ignore
|
|
23
23
|
|
|
@@ -43,7 +43,7 @@ class ALBEvent(BaseProxyEvent):
|
|
|
43
43
|
return super().resolved_query_string_parameters
|
|
44
44
|
|
|
45
45
|
@property
|
|
46
|
-
def resolved_headers_field(self) ->
|
|
46
|
+
def resolved_headers_field(self) -> Dict[str, Any]:
|
|
47
47
|
headers: Dict[str, Any] = {}
|
|
48
48
|
|
|
49
49
|
if self.multi_value_headers:
|
|
@@ -15,18 +15,18 @@ from aws_lambda_powertools.utilities.data_classes.common import (
|
|
|
15
15
|
|
|
16
16
|
class APIGatewayEventAuthorizer(DictWrapper):
|
|
17
17
|
@property
|
|
18
|
-
def claims(self) ->
|
|
19
|
-
return self.get("claims")
|
|
18
|
+
def claims(self) -> Dict[str, Any]:
|
|
19
|
+
return self.get("claims") or {} # key might exist but can be `null`
|
|
20
20
|
|
|
21
21
|
@property
|
|
22
|
-
def scopes(self) ->
|
|
23
|
-
return self.get("scopes")
|
|
22
|
+
def scopes(self) -> List[str]:
|
|
23
|
+
return self.get("scopes") or [] # key might exist but can be `null`
|
|
24
24
|
|
|
25
25
|
@property
|
|
26
|
-
def principal_id(self) ->
|
|
26
|
+
def principal_id(self) -> str:
|
|
27
27
|
"""The principal user identification associated with the token sent by the client and returned from an
|
|
28
28
|
API Gateway Lambda authorizer (formerly known as a custom authorizer)"""
|
|
29
|
-
return self.get("principalId")
|
|
29
|
+
return self.get("principalId") or "" # key might exist but can be `null`
|
|
30
30
|
|
|
31
31
|
@property
|
|
32
32
|
def integration_latency(self) -> Optional[int]:
|
|
@@ -91,7 +91,8 @@ class APIGatewayEventRequestContext(BaseRequestContext):
|
|
|
91
91
|
|
|
92
92
|
@property
|
|
93
93
|
def authorizer(self) -> APIGatewayEventAuthorizer:
|
|
94
|
-
|
|
94
|
+
authz_data = self._data.get("requestContext", {}).get("authorizer", {})
|
|
95
|
+
return APIGatewayEventAuthorizer(authz_data)
|
|
95
96
|
|
|
96
97
|
|
|
97
98
|
class APIGatewayProxyEvent(BaseProxyEvent):
|
|
@@ -112,11 +113,11 @@ class APIGatewayProxyEvent(BaseProxyEvent):
|
|
|
112
113
|
|
|
113
114
|
@property
|
|
114
115
|
def multi_value_headers(self) -> Dict[str, List[str]]:
|
|
115
|
-
return self.get("multiValueHeaders") or {}
|
|
116
|
+
return self.get("multiValueHeaders") or {} # key might exist but can be `null`
|
|
116
117
|
|
|
117
118
|
@property
|
|
118
119
|
def multi_value_query_string_parameters(self) -> Dict[str, List[str]]:
|
|
119
|
-
return self.get("multiValueQueryStringParameters") or {}
|
|
120
|
+
return self.get("multiValueQueryStringParameters") or {} # key might exist but can be `null`
|
|
120
121
|
|
|
121
122
|
@property
|
|
122
123
|
def resolved_query_string_parameters(self) -> Dict[str, List[str]]:
|
|
@@ -126,7 +127,7 @@ class APIGatewayProxyEvent(BaseProxyEvent):
|
|
|
126
127
|
return super().resolved_query_string_parameters
|
|
127
128
|
|
|
128
129
|
@property
|
|
129
|
-
def resolved_headers_field(self) ->
|
|
130
|
+
def resolved_headers_field(self) -> Dict[str, Any]:
|
|
130
131
|
headers: Dict[str, Any] = {}
|
|
131
132
|
|
|
132
133
|
if self.multi_value_headers:
|
|
@@ -154,72 +155,72 @@ class APIGatewayProxyEvent(BaseProxyEvent):
|
|
|
154
155
|
|
|
155
156
|
class RequestContextV2AuthorizerIam(DictWrapper):
|
|
156
157
|
@property
|
|
157
|
-
def access_key(self) ->
|
|
158
|
+
def access_key(self) -> str:
|
|
158
159
|
"""The IAM user access key associated with the request."""
|
|
159
|
-
return self.get("accessKey")
|
|
160
|
+
return self.get("accessKey") or "" # key might exist but can be `null`
|
|
160
161
|
|
|
161
162
|
@property
|
|
162
|
-
def account_id(self) ->
|
|
163
|
+
def account_id(self) -> str:
|
|
163
164
|
"""The AWS account ID associated with the request."""
|
|
164
|
-
return self.get("accountId")
|
|
165
|
+
return self.get("accountId") or "" # key might exist but can be `null`
|
|
165
166
|
|
|
166
167
|
@property
|
|
167
|
-
def caller_id(self) ->
|
|
168
|
+
def caller_id(self) -> str:
|
|
168
169
|
"""The principal identifier of the caller making the request."""
|
|
169
|
-
return self.get("callerId")
|
|
170
|
+
return self.get("callerId") or "" # key might exist but can be `null`
|
|
170
171
|
|
|
171
172
|
def _cognito_identity(self) -> Dict:
|
|
172
|
-
return self.get("cognitoIdentity"
|
|
173
|
+
return self.get("cognitoIdentity") or {} # not available in FunctionURL; key might exist but can be `null`
|
|
173
174
|
|
|
174
175
|
@property
|
|
175
|
-
def cognito_amr(self) ->
|
|
176
|
+
def cognito_amr(self) -> List[str]:
|
|
176
177
|
"""This represents how the user was authenticated.
|
|
177
178
|
AMR stands for Authentication Methods References as per the openid spec"""
|
|
178
|
-
return self._cognito_identity().get("amr")
|
|
179
|
+
return self._cognito_identity().get("amr", [])
|
|
179
180
|
|
|
180
181
|
@property
|
|
181
|
-
def cognito_identity_id(self) ->
|
|
182
|
+
def cognito_identity_id(self) -> str:
|
|
182
183
|
"""The Amazon Cognito identity ID of the caller making the request.
|
|
183
184
|
Available only if the request was signed with Amazon Cognito credentials."""
|
|
184
|
-
return self._cognito_identity().get("identityId")
|
|
185
|
+
return self._cognito_identity().get("identityId", "")
|
|
185
186
|
|
|
186
187
|
@property
|
|
187
|
-
def cognito_identity_pool_id(self) ->
|
|
188
|
+
def cognito_identity_pool_id(self) -> str:
|
|
188
189
|
"""The Amazon Cognito identity pool ID of the caller making the request.
|
|
189
190
|
Available only if the request was signed with Amazon Cognito credentials."""
|
|
190
|
-
return self._cognito_identity().get("identityPoolId")
|
|
191
|
+
return self._cognito_identity().get("identityPoolId") or "" # key might exist but can be `null`
|
|
191
192
|
|
|
192
193
|
@property
|
|
193
|
-
def principal_org_id(self) ->
|
|
194
|
+
def principal_org_id(self) -> str:
|
|
194
195
|
"""The AWS organization ID."""
|
|
195
|
-
return self.get("principalOrgId")
|
|
196
|
+
return self.get("principalOrgId") or "" # key might exist but can be `null`
|
|
196
197
|
|
|
197
198
|
@property
|
|
198
|
-
def user_arn(self) ->
|
|
199
|
+
def user_arn(self) -> str:
|
|
199
200
|
"""The Amazon Resource Name (ARN) of the effective user identified after authentication."""
|
|
200
|
-
return self.get("userArn")
|
|
201
|
+
return self.get("userArn") or "" # key might exist but can be `null`
|
|
201
202
|
|
|
202
203
|
@property
|
|
203
|
-
def user_id(self) ->
|
|
204
|
+
def user_id(self) -> str:
|
|
204
205
|
"""The IAM user ID of the effective user identified after authentication."""
|
|
205
|
-
return self.get("userId")
|
|
206
|
+
return self.get("userId") or "" # key might exist but can be `null`
|
|
206
207
|
|
|
207
208
|
|
|
208
209
|
class RequestContextV2Authorizer(DictWrapper):
|
|
209
210
|
@property
|
|
210
|
-
def jwt_claim(self) ->
|
|
211
|
-
jwt = self.get("jwt") or {} # not available in FunctionURL
|
|
212
|
-
return jwt.get("claims")
|
|
211
|
+
def jwt_claim(self) -> Dict[str, Any]:
|
|
212
|
+
jwt = self.get("jwt") or {} # not available in FunctionURL; key might exist but can be `null`
|
|
213
|
+
return jwt.get("claims") or {} # key might exist but can be `null`
|
|
213
214
|
|
|
214
215
|
@property
|
|
215
|
-
def jwt_scopes(self) ->
|
|
216
|
-
jwt = self.get("jwt") or {} # not available in FunctionURL
|
|
217
|
-
return jwt.get("scopes")
|
|
216
|
+
def jwt_scopes(self) -> List[str]:
|
|
217
|
+
jwt = self.get("jwt") or {} # not available in FunctionURL; key might exist but can be `null`
|
|
218
|
+
return jwt.get("scopes", [])
|
|
218
219
|
|
|
219
220
|
@property
|
|
220
|
-
def get_lambda(self) ->
|
|
221
|
+
def get_lambda(self) -> Dict[str, Any]:
|
|
221
222
|
"""Lambda authorization context details"""
|
|
222
|
-
return self.get("lambda")
|
|
223
|
+
return self.get("lambda") or {} # key might exist but can be `null`
|
|
223
224
|
|
|
224
225
|
def get_context(self) -> Dict[str, Any]:
|
|
225
226
|
"""Retrieve the authorization context details injected by a Lambda Authorizer.
|
|
@@ -238,20 +239,20 @@ class RequestContextV2Authorizer(DictWrapper):
|
|
|
238
239
|
Dict[str, Any]
|
|
239
240
|
A dictionary containing Lambda authorization context details.
|
|
240
241
|
"""
|
|
241
|
-
return self.
|
|
242
|
+
return self.get_lambda
|
|
242
243
|
|
|
243
244
|
@property
|
|
244
|
-
def iam(self) ->
|
|
245
|
+
def iam(self) -> RequestContextV2AuthorizerIam:
|
|
245
246
|
"""IAM authorization details used for making the request."""
|
|
246
|
-
iam = self.get("iam")
|
|
247
|
-
return
|
|
247
|
+
iam = self.get("iam") or {} # key might exist but can be `null`
|
|
248
|
+
return RequestContextV2AuthorizerIam(iam)
|
|
248
249
|
|
|
249
250
|
|
|
250
251
|
class RequestContextV2(BaseRequestContextV2):
|
|
251
252
|
@property
|
|
252
|
-
def authorizer(self) ->
|
|
253
|
-
|
|
254
|
-
return
|
|
253
|
+
def authorizer(self) -> RequestContextV2Authorizer:
|
|
254
|
+
ctx = self.get("requestContext") or {} # key might exist but can be `null`
|
|
255
|
+
return RequestContextV2Authorizer(ctx.get("authorizer", {}))
|
|
255
256
|
|
|
256
257
|
|
|
257
258
|
class APIGatewayProxyEventV2(BaseProxyEvent):
|
|
@@ -319,7 +320,7 @@ class APIGatewayProxyEventV2(BaseProxyEvent):
|
|
|
319
320
|
return HttpApiHeadersSerializer()
|
|
320
321
|
|
|
321
322
|
@property
|
|
322
|
-
def resolved_headers_field(self) ->
|
|
323
|
+
def resolved_headers_field(self) -> Dict[str, Any]:
|
|
323
324
|
if self.headers is not None:
|
|
324
325
|
headers = {key.lower(): value.split(",") if "," in value else value for key, value in self.headers.items()}
|
|
325
326
|
return headers
|
|
@@ -111,7 +111,7 @@ class BedrockAgentEvent(BaseProxyEvent):
|
|
|
111
111
|
return {x["name"]: x["value"] for x in self["parameters"]} if self.get("parameters") else None
|
|
112
112
|
|
|
113
113
|
@property
|
|
114
|
-
def resolved_headers_field(self) ->
|
|
114
|
+
def resolved_headers_field(self) -> Dict[str, Any]:
|
|
115
115
|
return {}
|
|
116
116
|
|
|
117
117
|
@cached_property
|
|
@@ -124,7 +124,7 @@ class BaseProxyEvent(DictWrapper):
|
|
|
124
124
|
return {}
|
|
125
125
|
|
|
126
126
|
@property
|
|
127
|
-
def resolved_headers_field(self) ->
|
|
127
|
+
def resolved_headers_field(self) -> Dict[str, Any]:
|
|
128
128
|
"""
|
|
129
129
|
This property determines the appropriate header to be used
|
|
130
130
|
as a trusted source for validating OpenAPI.
|
|
@@ -32,14 +32,14 @@ class S3EventBridgeNotificationObject(DictWrapper):
|
|
|
32
32
|
return unquote_plus(self["key"])
|
|
33
33
|
|
|
34
34
|
@property
|
|
35
|
-
def size(self) ->
|
|
36
|
-
"""Object size"""
|
|
37
|
-
return self
|
|
35
|
+
def size(self) -> Optional[int]:
|
|
36
|
+
"""Object size. Object deletion event doesn't contain size."""
|
|
37
|
+
return self.get("size")
|
|
38
38
|
|
|
39
39
|
@property
|
|
40
40
|
def etag(self) -> str:
|
|
41
|
-
"""Object etag"""
|
|
42
|
-
return self
|
|
41
|
+
"""Object etag. Object deletion event doesn't contain etag; we default to empty string"""
|
|
42
|
+
return self.get("etag", "") # type: ignore[return-value] # false positive
|
|
43
43
|
|
|
44
44
|
@property
|
|
45
45
|
def version_id(self) -> str:
|
|
@@ -178,8 +178,8 @@ class S3Object(DictWrapper):
|
|
|
178
178
|
|
|
179
179
|
@property
|
|
180
180
|
def etag(self) -> str:
|
|
181
|
-
"""
|
|
182
|
-
return self["s3"]["object"]
|
|
181
|
+
"""Object eTag. Object deletion event doesn't contain eTag; we default to empty string"""
|
|
182
|
+
return self["s3"]["object"].get("eTag", "")
|
|
183
183
|
|
|
184
184
|
@property
|
|
185
185
|
def version_id(self) -> Optional[str]:
|
|
@@ -145,7 +145,7 @@ class VPCLatticeEvent(VPCLatticeEventBase):
|
|
|
145
145
|
return self["query_string_parameters"]
|
|
146
146
|
|
|
147
147
|
@property
|
|
148
|
-
def resolved_headers_field(self) ->
|
|
148
|
+
def resolved_headers_field(self) -> Dict[str, Any]:
|
|
149
149
|
if self.headers is not None:
|
|
150
150
|
headers = {key.lower(): value.split(",") if "," in value else value for key, value in self.headers.items()}
|
|
151
151
|
return headers
|
|
@@ -272,7 +272,7 @@ class VPCLatticeEventV2(VPCLatticeEventBase):
|
|
|
272
272
|
return None
|
|
273
273
|
|
|
274
274
|
@property
|
|
275
|
-
def resolved_headers_field(self) ->
|
|
275
|
+
def resolved_headers_field(self) -> Dict[str, str]:
|
|
276
276
|
if self.headers is not None:
|
|
277
277
|
return {key.lower(): value for key, value in self.headers.items()}
|
|
278
278
|
|
|
@@ -19,10 +19,6 @@ logger = logging.getLogger(__name__)
|
|
|
19
19
|
|
|
20
20
|
class DataMasking:
|
|
21
21
|
"""
|
|
22
|
-
Note: This utility is currently in a Non-General Availability (Non-GA) phase and may have limitations.
|
|
23
|
-
Please DON'T USE THIS utility in production environments.
|
|
24
|
-
Keep in mind that when we transition to General Availability (GA), there might be breaking changes introduced.
|
|
25
|
-
|
|
26
22
|
The DataMasking class orchestrates erasing, encrypting, and decrypting
|
|
27
23
|
for the base provider.
|
|
28
24
|
|
|
@@ -22,7 +22,7 @@ def disable_pydantic_v2_warning():
|
|
|
22
22
|
|
|
23
23
|
version = __version__.split(".")
|
|
24
24
|
|
|
25
|
-
if int(version[0]) == 2:
|
|
25
|
+
if int(version[0]) == 2: # pragma: no cover # dropping in v3
|
|
26
26
|
import warnings
|
|
27
27
|
|
|
28
28
|
from pydantic import PydanticDeprecatedSince20, PydanticDeprecationWarning
|
|
@@ -30,5 +30,5 @@ def disable_pydantic_v2_warning():
|
|
|
30
30
|
warnings.filterwarnings("ignore", category=PydanticDeprecationWarning)
|
|
31
31
|
warnings.filterwarnings("ignore", category=PydanticDeprecatedSince20)
|
|
32
32
|
|
|
33
|
-
except ImportError:
|
|
33
|
+
except ImportError: # pragma: no cover # false positive; dropping in v3
|
|
34
34
|
pass
|