aws-lambda-powertools 3.25.0__tar.gz → 3.26.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.25.0 → aws_lambda_powertools-3.26.0}/PKG-INFO +1 -1
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +40 -36
- aws_lambda_powertools-3.26.0/aws_lambda_powertools/logging/buffer/handler.py +72 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/utils.py +24 -1
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/constants.py +7 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/version.py +1 -1
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/batch/base.py +23 -2
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/batch/decorators.py +43 -12
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/batch/types.py +22 -2
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +5 -5
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +3 -3
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +2 -2
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/common.py +6 -6
- aws_lambda_powertools-3.26.0/aws_lambda_powertools/utilities/metadata/__init__.py +17 -0
- aws_lambda_powertools-3.26.0/aws_lambda_powertools/utilities/metadata/exceptions.py +11 -0
- aws_lambda_powertools-3.26.0/aws_lambda_powertools/utilities/metadata/lambda_metadata.py +174 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parameters/appconfig.py +1 -1
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parameters/secrets.py +1 -1
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parameters/ssm.py +6 -4
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/functions.py +2 -2
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/parser.py +1 -1
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/pyproject.toml +5 -5
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/setup.py +2 -1
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/LICENSE +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/README.md +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/THIRD-PARTY-LICENSES +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/api_gateway.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/bedrock_agent_function.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/events_appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/events_appsync/_registry.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/events_appsync/appsync_events.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/events_appsync/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/events_appsync/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/events_appsync/functions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/events_appsync/router.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/events_appsync/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/exception_handling.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/http_resolver.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/config.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/merge.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/router.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/util.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/buffer/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/buffer/cache.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/buffer/config.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/buffer/functions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/constants.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/filters.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/formatter.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/logger.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/functions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/metric.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/metrics.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/metrics/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/package_logger.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/py.typed +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/cookies.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/functions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/shared/user_agent.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/tracing/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/tracing/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/tracing/extensions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/tracing/tracer.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_websocket_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_events_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_function_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/iot_registry_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/persistence/cache.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/serialization/functions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/consumer_records.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/deserializer/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/deserializer/avro.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/deserializer/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/deserializer/default.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/deserializer/deserializer.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/deserializer/json.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/deserializer/protobuf.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/kafka_consumer.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/schema_config.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/serialization/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/serialization/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/serialization/serialization.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/kafka/serialization/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/appsync.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/appsync_events.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/cognito.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/iot_registry_events.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/s3.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/transfer_family.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/serialization.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
- {aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.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.26.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
|
|
@@ -228,20 +228,27 @@ class OpenAPIResponseValidationMiddleware(BaseMiddlewareHandler):
|
|
|
228
228
|
return self._handle_response(route=route, response=response)
|
|
229
229
|
|
|
230
230
|
def _handle_response(self, *, route: Route, response: Response):
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
231
|
+
field = route.dependant.return_param
|
|
232
|
+
|
|
233
|
+
if field is None:
|
|
234
|
+
if not response.is_json():
|
|
235
|
+
return response
|
|
236
|
+
else:
|
|
237
|
+
# JSON serialize the body without validation
|
|
238
|
+
response.body = jsonable_encoder(response.body, custom_serializer=self._validation_serializer)
|
|
239
|
+
else:
|
|
240
|
+
response.body = self._serialize_response_with_validation(
|
|
241
|
+
field=field,
|
|
235
242
|
response_content=response.body,
|
|
236
243
|
has_route_custom_response_validation=route.custom_response_validation_http_code is not None,
|
|
237
244
|
)
|
|
238
245
|
|
|
239
246
|
return response
|
|
240
247
|
|
|
241
|
-
def
|
|
248
|
+
def _serialize_response_with_validation(
|
|
242
249
|
self,
|
|
243
250
|
*,
|
|
244
|
-
field: ModelField
|
|
251
|
+
field: ModelField,
|
|
245
252
|
response_content: Any,
|
|
246
253
|
include: IncEx | None = None,
|
|
247
254
|
exclude: IncEx | None = None,
|
|
@@ -254,33 +261,23 @@ class OpenAPIResponseValidationMiddleware(BaseMiddlewareHandler):
|
|
|
254
261
|
"""
|
|
255
262
|
Serialize the response content according to the field type.
|
|
256
263
|
"""
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
source="route",
|
|
267
|
-
)
|
|
268
|
-
if self._has_response_validation_error:
|
|
269
|
-
raise ResponseValidationError(errors=_normalize_errors(errors), body=response_content, source="app")
|
|
270
|
-
|
|
271
|
-
raise RequestValidationError(errors=_normalize_errors(errors), body=response_content)
|
|
272
|
-
|
|
273
|
-
if hasattr(field, "serialize"):
|
|
274
|
-
return field.serialize(
|
|
275
|
-
value,
|
|
276
|
-
include=include,
|
|
277
|
-
exclude=exclude,
|
|
278
|
-
by_alias=by_alias,
|
|
279
|
-
exclude_unset=exclude_unset,
|
|
280
|
-
exclude_defaults=exclude_defaults,
|
|
281
|
-
exclude_none=exclude_none,
|
|
264
|
+
errors: list[dict[str, Any]] = []
|
|
265
|
+
value = _validate_field(field=field, value=response_content, loc=("response",), existing_errors=errors)
|
|
266
|
+
if errors:
|
|
267
|
+
# route-level validation must take precedence over app-level
|
|
268
|
+
if has_route_custom_response_validation:
|
|
269
|
+
raise ResponseValidationError(
|
|
270
|
+
errors=_normalize_errors(errors),
|
|
271
|
+
body=response_content,
|
|
272
|
+
source="route",
|
|
282
273
|
)
|
|
283
|
-
|
|
274
|
+
if self._has_response_validation_error:
|
|
275
|
+
raise ResponseValidationError(errors=_normalize_errors(errors), body=response_content, source="app")
|
|
276
|
+
|
|
277
|
+
raise RequestValidationError(errors=_normalize_errors(errors), body=response_content)
|
|
278
|
+
|
|
279
|
+
if hasattr(field, "serialize"):
|
|
280
|
+
return field.serialize(
|
|
284
281
|
value,
|
|
285
282
|
include=include,
|
|
286
283
|
exclude=exclude,
|
|
@@ -288,11 +285,18 @@ class OpenAPIResponseValidationMiddleware(BaseMiddlewareHandler):
|
|
|
288
285
|
exclude_unset=exclude_unset,
|
|
289
286
|
exclude_defaults=exclude_defaults,
|
|
290
287
|
exclude_none=exclude_none,
|
|
291
|
-
custom_serializer=self._validation_serializer,
|
|
292
288
|
)
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
289
|
+
|
|
290
|
+
return jsonable_encoder(
|
|
291
|
+
value,
|
|
292
|
+
include=include,
|
|
293
|
+
exclude=exclude,
|
|
294
|
+
by_alias=by_alias,
|
|
295
|
+
exclude_unset=exclude_unset,
|
|
296
|
+
exclude_defaults=exclude_defaults,
|
|
297
|
+
exclude_none=exclude_none,
|
|
298
|
+
custom_serializer=self._validation_serializer,
|
|
299
|
+
)
|
|
296
300
|
|
|
297
301
|
def _prepare_response_content(
|
|
298
302
|
self,
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
from aws_lambda_powertools.logging.buffer.functions import _check_minimum_buffer_log_level
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from aws_lambda_powertools.logging.buffer.cache import LoggerBufferCache
|
|
10
|
+
from aws_lambda_powertools.logging.buffer.config import LoggerBufferConfig
|
|
11
|
+
from aws_lambda_powertools.logging.logger import Logger
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class BufferingHandler(logging.Handler):
|
|
15
|
+
"""
|
|
16
|
+
Handler that buffers logs from external libraries using the source logger's buffer.
|
|
17
|
+
|
|
18
|
+
The handler intercepts log records from external libraries and
|
|
19
|
+
stores them in the source logger's buffer using the same tracer_id mechanism.
|
|
20
|
+
Logs above the buffer verbosity threshold are emitted directly through the source logger.
|
|
21
|
+
Logs at or below the threshold are buffered and flushed together with application logs.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
buffer_cache: LoggerBufferCache,
|
|
27
|
+
buffer_config: LoggerBufferConfig,
|
|
28
|
+
source_logger: Logger,
|
|
29
|
+
):
|
|
30
|
+
"""
|
|
31
|
+
Initialize the BufferingHandler.
|
|
32
|
+
|
|
33
|
+
Parameters
|
|
34
|
+
----------
|
|
35
|
+
buffer_cache : LoggerBufferCache
|
|
36
|
+
Shared buffer cache from the source logger
|
|
37
|
+
buffer_config : LoggerBufferConfig
|
|
38
|
+
Buffer configuration from the source logger
|
|
39
|
+
source_logger : Logger
|
|
40
|
+
The Powertools Logger instance to delegate buffering logic to
|
|
41
|
+
"""
|
|
42
|
+
super().__init__()
|
|
43
|
+
self.buffer_cache = buffer_cache
|
|
44
|
+
self.buffer_config = buffer_config
|
|
45
|
+
self.source_logger = source_logger
|
|
46
|
+
|
|
47
|
+
def emit(self, record: logging.LogRecord) -> None:
|
|
48
|
+
"""
|
|
49
|
+
Buffer or emit the log record based on the buffer verbosity threshold.
|
|
50
|
+
|
|
51
|
+
Logs above the configured buffer_at_verbosity are emitted directly
|
|
52
|
+
through the source logger. Logs at or below the threshold are buffered.
|
|
53
|
+
|
|
54
|
+
Parameters
|
|
55
|
+
----------
|
|
56
|
+
record : logging.LogRecord
|
|
57
|
+
The log record from an external logger
|
|
58
|
+
"""
|
|
59
|
+
level_name = logging.getLevelName(record.levelno)
|
|
60
|
+
|
|
61
|
+
# If log level exceeds buffer threshold, emit directly through source logger
|
|
62
|
+
if _check_minimum_buffer_log_level(self.buffer_config.buffer_at_verbosity, level_name):
|
|
63
|
+
self.source_logger._logger.handle(record)
|
|
64
|
+
return
|
|
65
|
+
|
|
66
|
+
self.source_logger._add_log_record_to_buffer(
|
|
67
|
+
level=record.levelno,
|
|
68
|
+
msg=record.msg,
|
|
69
|
+
args=record.args,
|
|
70
|
+
exc_info=record.exc_info,
|
|
71
|
+
stack_info=False,
|
|
72
|
+
)
|
{aws_lambda_powertools-3.25.0 → aws_lambda_powertools-3.26.0}/aws_lambda_powertools/logging/utils.py
RENAMED
|
@@ -3,6 +3,8 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import TYPE_CHECKING
|
|
5
5
|
|
|
6
|
+
from aws_lambda_powertools.logging.buffer.handler import BufferingHandler
|
|
7
|
+
|
|
6
8
|
if TYPE_CHECKING:
|
|
7
9
|
from collections.abc import Callable
|
|
8
10
|
|
|
@@ -16,6 +18,7 @@ def copy_config_to_registered_loggers(
|
|
|
16
18
|
source_logger: Logger,
|
|
17
19
|
log_level: int | str | None = None,
|
|
18
20
|
ignore_log_level=False,
|
|
21
|
+
include_buffering=False,
|
|
19
22
|
exclude: set[str] | None = None,
|
|
20
23
|
include: set[str] | None = None,
|
|
21
24
|
) -> None:
|
|
@@ -30,6 +33,8 @@ def copy_config_to_registered_loggers(
|
|
|
30
33
|
Logging level to set to registered loggers, by default uses source_logger logging level
|
|
31
34
|
ignore_log_level: bool
|
|
32
35
|
Whether to not touch log levels for discovered loggers. log_level param is disregarded when this is set.
|
|
36
|
+
include_buffering: bool
|
|
37
|
+
Whether to buffer logs from external libraries and report to powertools logger
|
|
33
38
|
include : set[str] | None, optional
|
|
34
39
|
List of logger names to include, by default all registered loggers are included
|
|
35
40
|
exclude : set[str] | None, optional
|
|
@@ -64,7 +69,13 @@ def copy_config_to_registered_loggers(
|
|
|
64
69
|
|
|
65
70
|
registered_loggers = _find_registered_loggers(loggers=loggers, filter_func=filter_func)
|
|
66
71
|
for logger in registered_loggers:
|
|
67
|
-
_configure_logger(
|
|
72
|
+
_configure_logger(
|
|
73
|
+
source_logger=source_logger,
|
|
74
|
+
logger=logger,
|
|
75
|
+
level=level,
|
|
76
|
+
ignore_log_level=ignore_log_level,
|
|
77
|
+
include_buffering=include_buffering,
|
|
78
|
+
)
|
|
68
79
|
|
|
69
80
|
|
|
70
81
|
def _include_registered_loggers_filter(loggers: set[str]):
|
|
@@ -92,6 +103,7 @@ def _configure_logger(
|
|
|
92
103
|
logger: logging.Logger,
|
|
93
104
|
level: int | str,
|
|
94
105
|
ignore_log_level: bool = False,
|
|
106
|
+
include_buffering: bool = False,
|
|
95
107
|
) -> None:
|
|
96
108
|
# customers may not want to copy the same log level from Logger to discovered loggers
|
|
97
109
|
if not ignore_log_level:
|
|
@@ -102,6 +114,17 @@ def _configure_logger(
|
|
|
102
114
|
logger.propagate = False # ensure we don't propagate logs to existing loggers, #1073
|
|
103
115
|
source_logger.append_keys(name="%(name)s") # include logger name, see #1267
|
|
104
116
|
|
|
117
|
+
buffer_config = getattr(source_logger, "_buffer_config", None)
|
|
118
|
+
if include_buffering and buffer_config is not None:
|
|
119
|
+
buffer_handler = BufferingHandler(
|
|
120
|
+
buffer_cache=source_logger._buffer_cache,
|
|
121
|
+
buffer_config=buffer_config,
|
|
122
|
+
source_logger=source_logger,
|
|
123
|
+
)
|
|
124
|
+
logger.addHandler(buffer_handler)
|
|
125
|
+
LOGGER.debug(f"Logger {logger} configured with BufferingHandler")
|
|
126
|
+
return # exit earlier and don't add source handlers, would cause double logging
|
|
127
|
+
|
|
105
128
|
for source_handler in source_logger.handlers:
|
|
106
129
|
logger.addHandler(source_handler)
|
|
107
130
|
LOGGER.debug(f"Logger {logger} reconfigured to use {source_handler}")
|
|
@@ -67,5 +67,12 @@ POWERTOOLS_DEBUG_ENV: str = "POWERTOOLS_DEBUG"
|
|
|
67
67
|
PRETTY_INDENT: int = 4
|
|
68
68
|
COMPACT_INDENT: None = None
|
|
69
69
|
|
|
70
|
+
# Metadata constants
|
|
71
|
+
LAMBDA_METADATA_API_ENV: str = "AWS_LAMBDA_METADATA_API"
|
|
72
|
+
LAMBDA_METADATA_TOKEN_ENV: str = "AWS_LAMBDA_METADATA_TOKEN"
|
|
73
|
+
METADATA_API_VERSION: str = "2026-01-15"
|
|
74
|
+
METADATA_PATH: str = "/metadata/execution-environment"
|
|
75
|
+
METADATA_DEFAULT_TIMEOUT_SECS: float = 1.0
|
|
76
|
+
|
|
70
77
|
# Idempotency constants
|
|
71
78
|
IDEMPOTENCY_DISABLED_ENV: str = "POWERTOOLS_IDEMPOTENCY_DISABLED"
|
|
@@ -25,6 +25,9 @@ from aws_lambda_powertools.utilities.batch.types import BatchTypeModels
|
|
|
25
25
|
from aws_lambda_powertools.utilities.data_classes.dynamo_db_stream_event import (
|
|
26
26
|
DynamoDBRecord,
|
|
27
27
|
)
|
|
28
|
+
from aws_lambda_powertools.utilities.data_classes.kafka_event import (
|
|
29
|
+
KafkaEventRecord,
|
|
30
|
+
)
|
|
28
31
|
from aws_lambda_powertools.utilities.data_classes.kinesis_stream_event import (
|
|
29
32
|
KinesisStreamRecord,
|
|
30
33
|
)
|
|
@@ -46,12 +49,13 @@ class EventType(Enum):
|
|
|
46
49
|
SQS = "SQS"
|
|
47
50
|
KinesisDataStreams = "KinesisDataStreams"
|
|
48
51
|
DynamoDBStreams = "DynamoDBStreams"
|
|
52
|
+
Kafka = "Kafka"
|
|
49
53
|
|
|
50
54
|
|
|
51
55
|
# When using processor with default arguments, records will carry EventSourceDataClassTypes
|
|
52
56
|
# and depending on what EventType it's passed it'll correctly map to the right record
|
|
53
|
-
# When using Pydantic Models, it'll accept any subclass from SQS, DynamoDB and
|
|
54
|
-
EventSourceDataClassTypes = Union[SQSRecord, KinesisStreamRecord, DynamoDBRecord]
|
|
57
|
+
# When using Pydantic Models, it'll accept any subclass from SQS, DynamoDB, Kinesis and Kafka
|
|
58
|
+
EventSourceDataClassTypes = Union[SQSRecord, KinesisStreamRecord, DynamoDBRecord, KafkaEventRecord]
|
|
55
59
|
BatchEventTypes = Union[EventSourceDataClassTypes, BatchTypeModels]
|
|
56
60
|
SuccessResponse = Tuple[str, Any, BatchEventTypes]
|
|
57
61
|
FailureResponse = Tuple[str, str, BatchEventTypes]
|
|
@@ -272,11 +276,13 @@ class BasePartialBatchProcessor(BasePartialProcessor): # noqa
|
|
|
272
276
|
EventType.SQS: self._collect_sqs_failures,
|
|
273
277
|
EventType.KinesisDataStreams: self._collect_kinesis_failures,
|
|
274
278
|
EventType.DynamoDBStreams: self._collect_dynamodb_failures,
|
|
279
|
+
EventType.Kafka: self._collect_kafka_failures,
|
|
275
280
|
}
|
|
276
281
|
self._DATA_CLASS_MAPPING = {
|
|
277
282
|
EventType.SQS: SQSRecord,
|
|
278
283
|
EventType.KinesisDataStreams: KinesisStreamRecord,
|
|
279
284
|
EventType.DynamoDBStreams: DynamoDBRecord,
|
|
285
|
+
EventType.Kafka: KafkaEventRecord,
|
|
280
286
|
}
|
|
281
287
|
|
|
282
288
|
super().__init__()
|
|
@@ -365,6 +371,21 @@ class BasePartialBatchProcessor(BasePartialProcessor): # noqa
|
|
|
365
371
|
failures.append({"itemIdentifier": msg_id})
|
|
366
372
|
return failures
|
|
367
373
|
|
|
374
|
+
def _collect_kafka_failures(self):
|
|
375
|
+
failures = []
|
|
376
|
+
for msg in self.fail_messages:
|
|
377
|
+
# Kafka uses a composite identifier with partition and offset
|
|
378
|
+
# Both data class and Pydantic model use the same field names
|
|
379
|
+
failures.append(
|
|
380
|
+
{
|
|
381
|
+
"itemIdentifier": {
|
|
382
|
+
"partition": f"{msg.topic}-{msg.partition}",
|
|
383
|
+
"offset": msg.offset,
|
|
384
|
+
},
|
|
385
|
+
},
|
|
386
|
+
)
|
|
387
|
+
return failures
|
|
388
|
+
|
|
368
389
|
@overload
|
|
369
390
|
def _to_batch_type(
|
|
370
391
|
self,
|
|
@@ -22,6 +22,47 @@ if TYPE_CHECKING:
|
|
|
22
22
|
from aws_lambda_powertools.utilities.typing import LambdaContext
|
|
23
23
|
|
|
24
24
|
|
|
25
|
+
def _get_records_from_event(
|
|
26
|
+
event: dict[str, Any],
|
|
27
|
+
processor: BasePartialBatchProcessor,
|
|
28
|
+
) -> list[dict]:
|
|
29
|
+
"""
|
|
30
|
+
Extract records from the event based on the processor's event type.
|
|
31
|
+
|
|
32
|
+
For SQS, Kinesis, and DynamoDB: Records are in event["Records"] as a list
|
|
33
|
+
For Kafka: Records are in event["records"] as a dict with topic-partition keys
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
event: dict
|
|
38
|
+
Lambda's original event
|
|
39
|
+
processor: BasePartialBatchProcessor
|
|
40
|
+
Batch Processor to determine event type
|
|
41
|
+
|
|
42
|
+
Returns
|
|
43
|
+
-------
|
|
44
|
+
records: list[dict]
|
|
45
|
+
Flattened list of records to process
|
|
46
|
+
"""
|
|
47
|
+
# Kafka events use lowercase "records" and have a nested dict structure
|
|
48
|
+
if processor.event_type == EventType.Kafka:
|
|
49
|
+
kafka_records = event.get("records", {})
|
|
50
|
+
if not kafka_records or not isinstance(kafka_records, dict):
|
|
51
|
+
raise UnexpectedBatchTypeError(
|
|
52
|
+
"Invalid Kafka event structure. Expected 'records' to be a non-empty dict with topic-partition keys.",
|
|
53
|
+
)
|
|
54
|
+
# Flatten the nested dict: {"topic-0": [r1, r2], "topic-1": [r3]} -> [r1, r2, r3]
|
|
55
|
+
return [record for topic_records in kafka_records.values() for record in topic_records]
|
|
56
|
+
|
|
57
|
+
# SQS, Kinesis, DynamoDB use uppercase "Records" as a list
|
|
58
|
+
records = event.get("Records", [])
|
|
59
|
+
if not records or not isinstance(records, list):
|
|
60
|
+
raise UnexpectedBatchTypeError(
|
|
61
|
+
"Unexpected batch event type. Possible values are: SQS, KinesisDataStreams, DynamoDBStreams, Kafka",
|
|
62
|
+
)
|
|
63
|
+
return records
|
|
64
|
+
|
|
65
|
+
|
|
25
66
|
@lambda_handler_decorator
|
|
26
67
|
@deprecated(
|
|
27
68
|
"`async_batch_processor` decorator is deprecated; use `async_process_partial_response` function instead.",
|
|
@@ -206,12 +247,7 @@ def process_partial_response(
|
|
|
206
247
|
* Async batch processors. Use `async_process_partial_response` instead.
|
|
207
248
|
"""
|
|
208
249
|
try:
|
|
209
|
-
records
|
|
210
|
-
if not records or not isinstance(records, list):
|
|
211
|
-
raise UnexpectedBatchTypeError(
|
|
212
|
-
"Unexpected batch event type. Possible values are: SQS, KinesisDataStreams, DynamoDBStreams",
|
|
213
|
-
)
|
|
214
|
-
|
|
250
|
+
records = _get_records_from_event(event, processor)
|
|
215
251
|
except AttributeError:
|
|
216
252
|
event_types = ", ".join(list(EventType.__members__))
|
|
217
253
|
docs = "https://docs.powertools.aws.dev/lambda/python/latest/utilities/batch/#processing-messages-from-sqs" # noqa: E501 # long-line
|
|
@@ -275,12 +311,7 @@ def async_process_partial_response(
|
|
|
275
311
|
* Sync batch processors. Use `process_partial_response` instead.
|
|
276
312
|
"""
|
|
277
313
|
try:
|
|
278
|
-
records
|
|
279
|
-
if not records or not isinstance(records, list):
|
|
280
|
-
raise UnexpectedBatchTypeError(
|
|
281
|
-
"Unexpected batch event type. Possible values are: SQS, KinesisDataStreams, DynamoDBStreams",
|
|
282
|
-
)
|
|
283
|
-
|
|
314
|
+
records = _get_records_from_event(event, processor)
|
|
284
315
|
except AttributeError:
|
|
285
316
|
event_types = ", ".join(list(EventType.__members__))
|
|
286
317
|
docs = "https://docs.powertools.aws.dev/lambda/python/latest/utilities/batch/#processing-messages-from-sqs" # noqa: E501 # long-line
|
|
@@ -12,9 +12,15 @@ if has_pydantic: # pragma: no cover
|
|
|
12
12
|
from aws_lambda_powertools.utilities.parser.models import (
|
|
13
13
|
KinesisDataStreamRecord as KinesisDataStreamRecordModel,
|
|
14
14
|
)
|
|
15
|
+
from aws_lambda_powertools.utilities.parser.models.kafka import KafkaRecordModel
|
|
15
16
|
|
|
16
17
|
BatchTypeModels = Optional[
|
|
17
|
-
Union[
|
|
18
|
+
Union[
|
|
19
|
+
Type[SqsRecordModel],
|
|
20
|
+
Type[DynamoDBStreamRecordModel],
|
|
21
|
+
Type[KinesisDataStreamRecordModel],
|
|
22
|
+
Type[KafkaRecordModel],
|
|
23
|
+
]
|
|
18
24
|
]
|
|
19
25
|
BatchSqsTypeModel = Optional[Type[SqsRecordModel]]
|
|
20
26
|
else: # pragma: no cover
|
|
@@ -22,8 +28,22 @@ else: # pragma: no cover
|
|
|
22
28
|
BatchSqsTypeModel = "BatchSqsTypeModel" # type: ignore
|
|
23
29
|
|
|
24
30
|
|
|
31
|
+
class KafkaItemIdentifier(TypedDict):
|
|
32
|
+
"""Kafka uses a composite identifier with partition and offset."""
|
|
33
|
+
|
|
34
|
+
partition: str
|
|
35
|
+
offset: int
|
|
36
|
+
|
|
37
|
+
|
|
25
38
|
class PartialItemFailures(TypedDict):
|
|
26
|
-
|
|
39
|
+
"""
|
|
40
|
+
Represents a partial item failure response.
|
|
41
|
+
|
|
42
|
+
For SQS, Kinesis, and DynamoDB: itemIdentifier is a string (message_id or sequence_number)
|
|
43
|
+
For Kafka: itemIdentifier is a KafkaItemIdentifier dict with partition and offset
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
itemIdentifier: str | KafkaItemIdentifier
|
|
27
47
|
|
|
28
48
|
|
|
29
49
|
class PartialItemFailureResponse(TypedDict):
|
|
@@ -14,7 +14,7 @@ from aws_lambda_powertools.utilities.data_classes.common import (
|
|
|
14
14
|
DictWrapper,
|
|
15
15
|
)
|
|
16
16
|
from aws_lambda_powertools.utilities.data_classes.shared_functions import (
|
|
17
|
-
get_header_value,
|
|
17
|
+
get_header_value, # ty: ignore[deprecated]
|
|
18
18
|
)
|
|
19
19
|
from aws_lambda_powertools.warnings import PowertoolsDeprecationWarning
|
|
20
20
|
|
|
@@ -232,7 +232,7 @@ class APIGatewayAuthorizerRequestEvent(DictWrapper):
|
|
|
232
232
|
category=PowertoolsDeprecationWarning,
|
|
233
233
|
stacklevel=2,
|
|
234
234
|
)
|
|
235
|
-
return get_header_value(self.headers, name, default_value, case_sensitive)
|
|
235
|
+
return get_header_value(self.headers, name, default_value, case_sensitive) # ty: ignore[deprecated]
|
|
236
236
|
|
|
237
237
|
|
|
238
238
|
class APIGatewayAuthorizerEventV2(DictWrapper):
|
|
@@ -358,7 +358,7 @@ class APIGatewayAuthorizerEventV2(DictWrapper):
|
|
|
358
358
|
category=PowertoolsDeprecationWarning,
|
|
359
359
|
stacklevel=2,
|
|
360
360
|
)
|
|
361
|
-
return get_header_value(self.headers, name, default_value, case_sensitive)
|
|
361
|
+
return get_header_value(self.headers, name, default_value, case_sensitive) # ty: ignore[deprecated]
|
|
362
362
|
|
|
363
363
|
|
|
364
364
|
class APIGatewayAuthorizerResponseV2:
|
|
@@ -691,12 +691,12 @@ class APIGatewayAuthorizerResponseWebSocket(APIGatewayAuthorizerResponse):
|
|
|
691
691
|
self._deny_routes.append(route)
|
|
692
692
|
|
|
693
693
|
@override
|
|
694
|
-
def allow_all_routes(self):
|
|
694
|
+
def allow_all_routes(self, http_method: str = HttpVerb.ALL.value): # type: ignore[override] # noqa: ARG002
|
|
695
695
|
"""Adds a '*' allow to the policy to authorize access to all methods of an API"""
|
|
696
696
|
self._add_route(effect="Allow", resource="*")
|
|
697
697
|
|
|
698
698
|
@override
|
|
699
|
-
def deny_all_routes(self):
|
|
699
|
+
def deny_all_routes(self, http_method: str = HttpVerb.ALL.value): # type: ignore[override] # noqa: ARG002
|
|
700
700
|
"""Adds a '*' allow to the policy to deny access to all methods of an API"""
|
|
701
701
|
|
|
702
702
|
self._add_route(effect="Deny", resource="*")
|
|
@@ -55,7 +55,7 @@ def aws_date(timezone_offset: int = 0) -> str:
|
|
|
55
55
|
str
|
|
56
56
|
Returns current time as AWSDate scalar string with optional timezone offset
|
|
57
57
|
"""
|
|
58
|
-
return _formatted_time(datetime.datetime.
|
|
58
|
+
return _formatted_time(datetime.datetime.now(datetime.timezone.utc), "%Y-%m-%d", timezone_offset)
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
def aws_time(timezone_offset: int = 0) -> str:
|
|
@@ -71,7 +71,7 @@ def aws_time(timezone_offset: int = 0) -> str:
|
|
|
71
71
|
str
|
|
72
72
|
Returns current time as AWSTime scalar string with optional timezone offset
|
|
73
73
|
"""
|
|
74
|
-
return _formatted_time(datetime.datetime.
|
|
74
|
+
return _formatted_time(datetime.datetime.now(datetime.timezone.utc), "%H:%M:%S.%f", timezone_offset)
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
def aws_datetime(timezone_offset: int = 0) -> str:
|
|
@@ -87,7 +87,7 @@ def aws_datetime(timezone_offset: int = 0) -> str:
|
|
|
87
87
|
str
|
|
88
88
|
Returns current time as AWSDateTime scalar string with optional timezone offset
|
|
89
89
|
"""
|
|
90
|
-
return _formatted_time(datetime.datetime.
|
|
90
|
+
return _formatted_time(datetime.datetime.now(datetime.timezone.utc), "%Y-%m-%dT%H:%M:%S.%f", timezone_offset)
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
def aws_timestamp() -> int:
|
|
@@ -7,7 +7,7 @@ from typing_extensions import deprecated
|
|
|
7
7
|
|
|
8
8
|
from aws_lambda_powertools.utilities.data_classes.common import CaseInsensitiveDict, DictWrapper
|
|
9
9
|
from aws_lambda_powertools.utilities.data_classes.shared_functions import (
|
|
10
|
-
get_header_value,
|
|
10
|
+
get_header_value, # ty: ignore[deprecated]
|
|
11
11
|
)
|
|
12
12
|
from aws_lambda_powertools.warnings import PowertoolsDeprecationWarning
|
|
13
13
|
|
|
@@ -275,4 +275,4 @@ class AppSyncResolverEvent(AppSyncEventBase):
|
|
|
275
275
|
category=PowertoolsDeprecationWarning,
|
|
276
276
|
stacklevel=2,
|
|
277
277
|
)
|
|
278
|
-
return get_header_value(self.request_headers, name, default_value, case_sensitive)
|
|
278
|
+
return get_header_value(self.request_headers, name, default_value, case_sensitive) # ty: ignore[deprecated]
|
|
@@ -23,7 +23,7 @@ if TYPE_CHECKING:
|
|
|
23
23
|
from aws_lambda_powertools.shared.headers_serializer import BaseHeadersSerializer
|
|
24
24
|
|
|
25
25
|
from aws_lambda_powertools.utilities.data_classes.shared_functions import (
|
|
26
|
-
get_header_value,
|
|
26
|
+
get_header_value, # ty: ignore[deprecated]
|
|
27
27
|
get_multi_value_query_string_values,
|
|
28
28
|
get_query_string_value,
|
|
29
29
|
)
|
|
@@ -39,8 +39,8 @@ class CaseInsensitiveDict(dict):
|
|
|
39
39
|
def get(self, k, default=None):
|
|
40
40
|
return super().get(k.lower(), default)
|
|
41
41
|
|
|
42
|
-
def pop(self, k):
|
|
43
|
-
return super().pop(k.lower())
|
|
42
|
+
def pop(self, k, *args):
|
|
43
|
+
return super().pop(k.lower(), *args)
|
|
44
44
|
|
|
45
45
|
def setdefault(self, k, default=None):
|
|
46
46
|
return super().setdefault(k.lower(), default)
|
|
@@ -125,7 +125,7 @@ class DictWrapper(Mapping):
|
|
|
125
125
|
properties = self._properties()
|
|
126
126
|
sensitive_properties = ["raw_event"]
|
|
127
127
|
if hasattr(self, "_sensitive_properties"):
|
|
128
|
-
sensitive_properties.extend(self._sensitive_properties) # pyright: ignore
|
|
128
|
+
sensitive_properties.extend(self._sensitive_properties) # pyright: ignore # type: ignore[arg-type]
|
|
129
129
|
|
|
130
130
|
result: dict[str, Any] = {}
|
|
131
131
|
for property_key in properties:
|
|
@@ -142,7 +142,7 @@ class DictWrapper(Mapping):
|
|
|
142
142
|
# Checks if the key is a list and if it is a subclass of the parent class
|
|
143
143
|
elif isinstance(property_value, list):
|
|
144
144
|
for seq, item in enumerate(property_value):
|
|
145
|
-
if issubclass(item.__class__, DictWrapper):
|
|
145
|
+
if issubclass(item.__class__, DictWrapper) and isinstance(item, DictWrapper):
|
|
146
146
|
result[property_key][seq] = item._str_helper()
|
|
147
147
|
except Exception:
|
|
148
148
|
result[property_key] = "[Cannot be deserialized]"
|
|
@@ -331,7 +331,7 @@ class BaseProxyEvent(DictWrapper):
|
|
|
331
331
|
category=PowertoolsDeprecationWarning,
|
|
332
332
|
stacklevel=2,
|
|
333
333
|
)
|
|
334
|
-
return get_header_value(
|
|
334
|
+
return get_header_value( # ty: ignore[deprecated]
|
|
335
335
|
headers=self.headers,
|
|
336
336
|
name=name,
|
|
337
337
|
default_value=default_value,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Utility to fetch data from the AWS Lambda Metadata Endpoint
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from aws_lambda_powertools.utilities.metadata.exceptions import LambdaMetadataError
|
|
6
|
+
from aws_lambda_powertools.utilities.metadata.lambda_metadata import (
|
|
7
|
+
LambdaMetadata,
|
|
8
|
+
clear_metadata_cache,
|
|
9
|
+
get_lambda_metadata,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"LambdaMetadata",
|
|
14
|
+
"LambdaMetadataError",
|
|
15
|
+
"get_lambda_metadata",
|
|
16
|
+
"clear_metadata_cache",
|
|
17
|
+
]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Lambda Metadata Service exceptions
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class LambdaMetadataError(Exception):
|
|
7
|
+
"""Raised when the Lambda Metadata Endpoint is unavailable or returns an error."""
|
|
8
|
+
|
|
9
|
+
def __init__(self, message: str, status_code: int = -1):
|
|
10
|
+
self.status_code = status_code
|
|
11
|
+
super().__init__(message)
|