aws-lambda-powertools 3.24.0__tar.gz → 3.25.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.24.0 → aws_lambda_powertools-3.25.0}/PKG-INFO +1 -1
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/__init__.py +2 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/api_gateway.py +287 -32
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/bedrock_agent.py +10 -0
- aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/http_resolver.py +491 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +17 -2
- aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/openapi/__init__.py +9 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +14 -0
- aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/openapi/merge.py +545 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/params.py +39 -8
- aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +2 -0
- aws_lambda_powertools-3.25.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +3 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/buffer/functions.py +3 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/formatter.py +6 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/logger.py +16 -4
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/base.py +10 -5
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/metrics.py +7 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/base.py +3 -1
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +79 -4
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/functions.py +8 -1
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/version.py +1 -1
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/decorators.py +2 -2
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +19 -2
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +33 -5
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/ssm.py +2 -2
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/s3.py +39 -3
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/pyproject.toml +31 -3
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/setup.py +1 -1
- aws_lambda_powertools-3.24.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -12
- aws_lambda_powertools-3.24.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -1
- aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/kafka/serialization/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/LICENSE +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/README.md +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/THIRD-PARTY-LICENSES +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/bedrock_agent_function.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/_registry.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/appsync_events.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/functions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/router.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/events_appsync/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/exception_handling.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/config.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/router.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/util.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/buffer/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/buffer/cache.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/buffer/config.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/constants.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/filters.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/logging/utils.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/functions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/metric.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0/aws_lambda_powertools/event_handler/openapi → aws_lambda_powertools-3.25.0/aws_lambda_powertools/metrics/provider/cloudwatch_emf}/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/metrics/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/package_logger.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/py.typed +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/constants.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/cookies.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/shared/user_agent.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/tracing/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/tracing/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/tracing/extensions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/tracing/tracer.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/batch/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_websocket_event.py +0 -0
- {aws_lambda_powertools-3.24.0/aws_lambda_powertools/metrics/provider/cloudwatch_emf → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/data_classes/appsync}/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_events_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_function_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/iot_registry_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
- {aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/data_classes/appsync → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/idempotency/persistence}/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/cache.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
- {aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/idempotency/persistence → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/idempotency/serialization}/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/functions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/consumer_records.py +0 -0
- {aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/idempotency/serialization → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/kafka/deserializer}/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/avro.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/default.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/deserializer.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/json.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/deserializer/protobuf.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/kafka_consumer.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/schema_config.py +0 -0
- {aws_lambda_powertools-3.24.0/aws_lambda_powertools/utilities/kafka/deserializer → aws_lambda_powertools-3.25.0/aws_lambda_powertools/utilities/kafka/serialization}/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/serialization.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/kafka/serialization/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/functions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/appsync.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/appsync_events.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/cognito.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/iot_registry_events.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/transfer_family.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/serialization.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
- {aws_lambda_powertools-3.24.0 → aws_lambda_powertools-3.25.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.25.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
|
|
@@ -17,6 +17,7 @@ from aws_lambda_powertools.event_handler.bedrock_agent_function import (
|
|
|
17
17
|
BedrockFunctionResponse,
|
|
18
18
|
)
|
|
19
19
|
from aws_lambda_powertools.event_handler.events_appsync.appsync_events import AppSyncEventsResolver
|
|
20
|
+
from aws_lambda_powertools.event_handler.http_resolver import HttpResolverLocal
|
|
20
21
|
from aws_lambda_powertools.event_handler.lambda_function_url import (
|
|
21
22
|
LambdaFunctionUrlResolver,
|
|
22
23
|
)
|
|
@@ -34,6 +35,7 @@ __all__ = [
|
|
|
34
35
|
"BedrockResponse",
|
|
35
36
|
"BedrockFunctionResponse",
|
|
36
37
|
"CORSConfig",
|
|
38
|
+
"HttpResolverLocal",
|
|
37
39
|
"LambdaFunctionUrlResolver",
|
|
38
40
|
"Response",
|
|
39
41
|
"VPCLatticeResolver",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import base64
|
|
4
|
+
import copy
|
|
4
5
|
import json
|
|
5
6
|
import logging
|
|
6
7
|
import re
|
|
@@ -26,6 +27,7 @@ from aws_lambda_powertools.event_handler.openapi.constants import (
|
|
|
26
27
|
DEFAULT_OPENAPI_VERSION,
|
|
27
28
|
)
|
|
28
29
|
from aws_lambda_powertools.event_handler.openapi.exceptions import (
|
|
30
|
+
RequestUnsupportedContentType,
|
|
29
31
|
RequestValidationError,
|
|
30
32
|
ResponseValidationError,
|
|
31
33
|
SchemaValidationError,
|
|
@@ -377,6 +379,7 @@ class Route:
|
|
|
377
379
|
security: list[dict[str, list[str]]] | None = None,
|
|
378
380
|
openapi_extensions: dict[str, Any] | None = None,
|
|
379
381
|
deprecated: bool = False,
|
|
382
|
+
enable_validation: bool | None = None,
|
|
380
383
|
custom_response_validation_http_code: HTTPStatus | None = None,
|
|
381
384
|
middlewares: list[Callable[..., Response]] | None = None,
|
|
382
385
|
):
|
|
@@ -419,6 +422,8 @@ class Route:
|
|
|
419
422
|
Additional OpenAPI extensions as a dictionary.
|
|
420
423
|
deprecated: bool
|
|
421
424
|
Whether or not to mark this route as deprecated in the OpenAPI schema
|
|
425
|
+
enable_validation: bool | None, optional
|
|
426
|
+
Enable or disable validation for this specific route. If None, inherits from resolver setting.
|
|
422
427
|
custom_response_validation_http_code: int | HTTPStatus | None, optional
|
|
423
428
|
Whether to have custom http status code for this route if response validation fails
|
|
424
429
|
middlewares: list[Callable[..., Response]] | None
|
|
@@ -448,6 +453,7 @@ class Route:
|
|
|
448
453
|
self.middlewares = middlewares or []
|
|
449
454
|
self.operation_id = operation_id or self._generate_operation_id()
|
|
450
455
|
self.deprecated = deprecated
|
|
456
|
+
self.enable_validation = enable_validation
|
|
451
457
|
|
|
452
458
|
# _middleware_stack_built is used to ensure the middleware stack is only built once.
|
|
453
459
|
self._middleware_stack_built = False
|
|
@@ -534,15 +540,34 @@ class Route:
|
|
|
534
540
|
|
|
535
541
|
all_middlewares = []
|
|
536
542
|
|
|
543
|
+
# Determine if validation should be enabled for this route
|
|
544
|
+
# If route has explicit enable_validation setting, use it; otherwise, use resolver's global setting
|
|
545
|
+
route_validation_enabled = (
|
|
546
|
+
self.enable_validation if self.enable_validation is not None else app._enable_validation
|
|
547
|
+
)
|
|
548
|
+
|
|
549
|
+
# If route needs validation but resolver didn't create the middlewares, create them now
|
|
550
|
+
if route_validation_enabled and not hasattr(app, "_request_validation_middleware"):
|
|
551
|
+
from aws_lambda_powertools.event_handler.middlewares.openapi_validation import (
|
|
552
|
+
OpenAPIRequestValidationMiddleware,
|
|
553
|
+
OpenAPIResponseValidationMiddleware,
|
|
554
|
+
)
|
|
555
|
+
|
|
556
|
+
app._request_validation_middleware = OpenAPIRequestValidationMiddleware()
|
|
557
|
+
app._response_validation_middleware = OpenAPIResponseValidationMiddleware(
|
|
558
|
+
validation_serializer=app._serializer,
|
|
559
|
+
has_response_validation_error=app._has_response_validation_error,
|
|
560
|
+
)
|
|
561
|
+
|
|
537
562
|
# Add request validation middleware first if validation is enabled
|
|
538
|
-
if hasattr(app, "_request_validation_middleware"):
|
|
563
|
+
if route_validation_enabled and hasattr(app, "_request_validation_middleware"):
|
|
539
564
|
all_middlewares.append(app._request_validation_middleware)
|
|
540
565
|
|
|
541
566
|
# Add user middlewares in the middle
|
|
542
567
|
all_middlewares.extend(router_middlewares + self.middlewares)
|
|
543
568
|
|
|
544
569
|
# Add response validation middleware before the route handler if validation is enabled
|
|
545
|
-
if hasattr(app, "_response_validation_middleware"):
|
|
570
|
+
if route_validation_enabled and hasattr(app, "_response_validation_middleware"):
|
|
546
571
|
all_middlewares.append(app._response_validation_middleware)
|
|
547
572
|
|
|
548
573
|
logger.debug(f"Building middleware stack: {all_middlewares}")
|
|
@@ -666,7 +691,8 @@ class Route:
|
|
|
666
691
|
# Add the response to the OpenAPI operation
|
|
667
692
|
if self.responses:
|
|
668
693
|
for status_code in list(self.responses):
|
|
669
|
-
|
|
694
|
+
# Create a deep copy to prevent mutation of the shared dictionary
|
|
695
|
+
response = copy.deepcopy(self.responses[status_code])
|
|
670
696
|
|
|
671
697
|
# Case 1: there is not 'content' key
|
|
672
698
|
if "content" not in response:
|
|
@@ -826,6 +852,8 @@ class Route:
|
|
|
826
852
|
|
|
827
853
|
# Generate the request body media type
|
|
828
854
|
request_media_content: dict[str, Any] = {"schema": body_schema}
|
|
855
|
+
if field_info.openapi_examples:
|
|
856
|
+
request_media_content["examples"] = field_info.openapi_examples
|
|
829
857
|
request_body_oai["content"] = {request_media_type: request_media_content}
|
|
830
858
|
return request_body_oai
|
|
831
859
|
|
|
@@ -1128,6 +1156,7 @@ class BaseRouter(ABC):
|
|
|
1128
1156
|
security: list[dict[str, list[str]]] | None = None,
|
|
1129
1157
|
openapi_extensions: dict[str, Any] | None = None,
|
|
1130
1158
|
deprecated: bool = False,
|
|
1159
|
+
enable_validation: bool | None = None,
|
|
1131
1160
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
1132
1161
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
1133
1162
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -1190,6 +1219,7 @@ class BaseRouter(ABC):
|
|
|
1190
1219
|
security: list[dict[str, list[str]]] | None = None,
|
|
1191
1220
|
openapi_extensions: dict[str, Any] | None = None,
|
|
1192
1221
|
deprecated: bool = False,
|
|
1222
|
+
enable_validation: bool | None = None,
|
|
1193
1223
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
1194
1224
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
1195
1225
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -1231,6 +1261,7 @@ class BaseRouter(ABC):
|
|
|
1231
1261
|
security,
|
|
1232
1262
|
openapi_extensions,
|
|
1233
1263
|
deprecated,
|
|
1264
|
+
enable_validation,
|
|
1234
1265
|
custom_response_validation_http_code,
|
|
1235
1266
|
middlewares,
|
|
1236
1267
|
)
|
|
@@ -1251,6 +1282,7 @@ class BaseRouter(ABC):
|
|
|
1251
1282
|
security: list[dict[str, list[str]]] | None = None,
|
|
1252
1283
|
openapi_extensions: dict[str, Any] | None = None,
|
|
1253
1284
|
deprecated: bool = False,
|
|
1285
|
+
enable_validation: bool | None = None,
|
|
1254
1286
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
1255
1287
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
1256
1288
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -1293,6 +1325,7 @@ class BaseRouter(ABC):
|
|
|
1293
1325
|
security,
|
|
1294
1326
|
openapi_extensions,
|
|
1295
1327
|
deprecated,
|
|
1328
|
+
enable_validation,
|
|
1296
1329
|
custom_response_validation_http_code,
|
|
1297
1330
|
middlewares,
|
|
1298
1331
|
)
|
|
@@ -1313,6 +1346,7 @@ class BaseRouter(ABC):
|
|
|
1313
1346
|
security: list[dict[str, list[str]]] | None = None,
|
|
1314
1347
|
openapi_extensions: dict[str, Any] | None = None,
|
|
1315
1348
|
deprecated: bool = False,
|
|
1349
|
+
enable_validation: bool | None = None,
|
|
1316
1350
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
1317
1351
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
1318
1352
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -1355,6 +1389,7 @@ class BaseRouter(ABC):
|
|
|
1355
1389
|
security,
|
|
1356
1390
|
openapi_extensions,
|
|
1357
1391
|
deprecated,
|
|
1392
|
+
enable_validation,
|
|
1358
1393
|
custom_response_validation_http_code,
|
|
1359
1394
|
middlewares,
|
|
1360
1395
|
)
|
|
@@ -1375,6 +1410,7 @@ class BaseRouter(ABC):
|
|
|
1375
1410
|
security: list[dict[str, list[str]]] | None = None,
|
|
1376
1411
|
openapi_extensions: dict[str, Any] | None = None,
|
|
1377
1412
|
deprecated: bool = False,
|
|
1413
|
+
enable_validation: bool | None = None,
|
|
1378
1414
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
1379
1415
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
1380
1416
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -1416,6 +1452,7 @@ class BaseRouter(ABC):
|
|
|
1416
1452
|
security,
|
|
1417
1453
|
openapi_extensions,
|
|
1418
1454
|
deprecated,
|
|
1455
|
+
enable_validation,
|
|
1419
1456
|
custom_response_validation_http_code,
|
|
1420
1457
|
middlewares,
|
|
1421
1458
|
)
|
|
@@ -1436,6 +1473,7 @@ class BaseRouter(ABC):
|
|
|
1436
1473
|
security: list[dict[str, list[str]]] | None = None,
|
|
1437
1474
|
openapi_extensions: dict[str, Any] | None = None,
|
|
1438
1475
|
deprecated: bool = False,
|
|
1476
|
+
enable_validation: bool | None = None,
|
|
1439
1477
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
1440
1478
|
middlewares: list[Callable] | None = None,
|
|
1441
1479
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -1480,6 +1518,7 @@ class BaseRouter(ABC):
|
|
|
1480
1518
|
security,
|
|
1481
1519
|
openapi_extensions,
|
|
1482
1520
|
deprecated,
|
|
1521
|
+
enable_validation,
|
|
1483
1522
|
custom_response_validation_http_code,
|
|
1484
1523
|
middlewares,
|
|
1485
1524
|
)
|
|
@@ -1500,6 +1539,7 @@ class BaseRouter(ABC):
|
|
|
1500
1539
|
security: list[dict[str, list[str]]] | None = None,
|
|
1501
1540
|
openapi_extensions: dict[str, Any] | None = None,
|
|
1502
1541
|
deprecated: bool = False,
|
|
1542
|
+
enable_validation: bool | None = None,
|
|
1503
1543
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
1504
1544
|
middlewares: list[Callable] | None = None,
|
|
1505
1545
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -1543,6 +1583,7 @@ class BaseRouter(ABC):
|
|
|
1543
1583
|
security,
|
|
1544
1584
|
openapi_extensions,
|
|
1545
1585
|
deprecated,
|
|
1586
|
+
enable_validation,
|
|
1546
1587
|
custom_response_validation_http_code,
|
|
1547
1588
|
middlewares,
|
|
1548
1589
|
)
|
|
@@ -2204,6 +2245,162 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2204
2245
|
openapi_extensions=openapi_extensions,
|
|
2205
2246
|
)
|
|
2206
2247
|
|
|
2248
|
+
def configure_openapi_merge(
|
|
2249
|
+
self,
|
|
2250
|
+
path: str,
|
|
2251
|
+
pattern: str | list[str] = "handler.py",
|
|
2252
|
+
exclude: list[str] | None = None,
|
|
2253
|
+
resolver_name: str = "app",
|
|
2254
|
+
recursive: bool = False,
|
|
2255
|
+
title: str = DEFAULT_OPENAPI_TITLE,
|
|
2256
|
+
version: str = DEFAULT_API_VERSION,
|
|
2257
|
+
openapi_version: str = DEFAULT_OPENAPI_VERSION,
|
|
2258
|
+
summary: str | None = None,
|
|
2259
|
+
description: str | None = None,
|
|
2260
|
+
tags: list[Tag | str] | None = None,
|
|
2261
|
+
servers: list[Server] | None = None,
|
|
2262
|
+
terms_of_service: str | None = None,
|
|
2263
|
+
contact: Contact | None = None,
|
|
2264
|
+
license_info: License | None = None,
|
|
2265
|
+
security_schemes: dict[str, SecurityScheme] | None = None,
|
|
2266
|
+
security: list[dict[str, list[str]]] | None = None,
|
|
2267
|
+
external_documentation: ExternalDocumentation | None = None,
|
|
2268
|
+
openapi_extensions: dict[str, Any] | None = None,
|
|
2269
|
+
on_conflict: Literal["warn", "error", "first", "last"] = "warn",
|
|
2270
|
+
):
|
|
2271
|
+
"""Configure OpenAPI merge to generate a unified schema from multiple Lambda handlers.
|
|
2272
|
+
|
|
2273
|
+
This method discovers resolver instances across multiple Python files and merges
|
|
2274
|
+
their OpenAPI schemas into a single unified specification. Useful for micro-function
|
|
2275
|
+
architectures where each Lambda has its own resolver.
|
|
2276
|
+
|
|
2277
|
+
Parameters
|
|
2278
|
+
----------
|
|
2279
|
+
path : str
|
|
2280
|
+
Root directory path to search for resolver files.
|
|
2281
|
+
pattern : str | list[str], optional
|
|
2282
|
+
Glob pattern(s) to match handler files. Default is "handler.py".
|
|
2283
|
+
exclude : list[str], optional
|
|
2284
|
+
Patterns to exclude from search. Default excludes tests, __pycache__, and .venv.
|
|
2285
|
+
resolver_name : str, optional
|
|
2286
|
+
Name of the resolver variable in handler files. Default is "app".
|
|
2287
|
+
recursive : bool, optional
|
|
2288
|
+
Whether to search recursively in subdirectories. Default is False.
|
|
2289
|
+
title : str
|
|
2290
|
+
The title of the unified API.
|
|
2291
|
+
version : str
|
|
2292
|
+
The version of the OpenAPI document.
|
|
2293
|
+
openapi_version : str, default = "3.1.0"
|
|
2294
|
+
The version of the OpenAPI Specification.
|
|
2295
|
+
summary : str, optional
|
|
2296
|
+
A short summary of what the application does.
|
|
2297
|
+
description : str, optional
|
|
2298
|
+
A verbose explanation of the application behavior.
|
|
2299
|
+
tags : list[Tag | str], optional
|
|
2300
|
+
A list of tags used by the specification with additional metadata.
|
|
2301
|
+
servers : list[Server], optional
|
|
2302
|
+
An array of Server Objects for connectivity information.
|
|
2303
|
+
terms_of_service : str, optional
|
|
2304
|
+
A URL to the Terms of Service for the API.
|
|
2305
|
+
contact : Contact, optional
|
|
2306
|
+
The contact information for the exposed API.
|
|
2307
|
+
license_info : License, optional
|
|
2308
|
+
The license information for the exposed API.
|
|
2309
|
+
security_schemes : dict[str, SecurityScheme], optional
|
|
2310
|
+
Security schemes available in the specification.
|
|
2311
|
+
security : list[dict[str, list[str]]], optional
|
|
2312
|
+
Security mechanisms applied globally across the API.
|
|
2313
|
+
external_documentation : ExternalDocumentation, optional
|
|
2314
|
+
A link to external documentation for the API.
|
|
2315
|
+
openapi_extensions : dict[str, Any], optional
|
|
2316
|
+
Additional OpenAPI extensions as a dictionary.
|
|
2317
|
+
on_conflict : str, optional
|
|
2318
|
+
Strategy for handling conflicts when the same path+method is defined
|
|
2319
|
+
in multiple schemas. Options: "warn" (default), "error", "first", "last".
|
|
2320
|
+
|
|
2321
|
+
Example
|
|
2322
|
+
-------
|
|
2323
|
+
>>> from aws_lambda_powertools.event_handler import APIGatewayRestResolver
|
|
2324
|
+
>>>
|
|
2325
|
+
>>> app = APIGatewayRestResolver()
|
|
2326
|
+
>>> app.configure_openapi_merge(
|
|
2327
|
+
... path="./functions",
|
|
2328
|
+
... pattern="handler.py",
|
|
2329
|
+
... exclude=["**/tests/**"],
|
|
2330
|
+
... resolver_name="app",
|
|
2331
|
+
... title="My Unified API",
|
|
2332
|
+
... version="1.0.0",
|
|
2333
|
+
... )
|
|
2334
|
+
|
|
2335
|
+
See Also
|
|
2336
|
+
--------
|
|
2337
|
+
configure_openapi : Configure OpenAPI for a single resolver
|
|
2338
|
+
enable_swagger : Enable Swagger UI
|
|
2339
|
+
"""
|
|
2340
|
+
from aws_lambda_powertools.event_handler.openapi.merge import OpenAPIMerge
|
|
2341
|
+
|
|
2342
|
+
if exclude is None:
|
|
2343
|
+
exclude = ["**/tests/**", "**/__pycache__/**", "**/.venv/**"]
|
|
2344
|
+
|
|
2345
|
+
self._openapi_merge = OpenAPIMerge(
|
|
2346
|
+
title=title,
|
|
2347
|
+
version=version,
|
|
2348
|
+
openapi_version=openapi_version,
|
|
2349
|
+
summary=summary,
|
|
2350
|
+
description=description,
|
|
2351
|
+
tags=tags,
|
|
2352
|
+
servers=servers,
|
|
2353
|
+
terms_of_service=terms_of_service,
|
|
2354
|
+
contact=contact,
|
|
2355
|
+
license_info=license_info,
|
|
2356
|
+
security_schemes=security_schemes,
|
|
2357
|
+
security=security,
|
|
2358
|
+
external_documentation=external_documentation,
|
|
2359
|
+
openapi_extensions=openapi_extensions,
|
|
2360
|
+
on_conflict=on_conflict,
|
|
2361
|
+
)
|
|
2362
|
+
self._openapi_merge.discover(
|
|
2363
|
+
path=path,
|
|
2364
|
+
pattern=pattern,
|
|
2365
|
+
exclude=exclude,
|
|
2366
|
+
resolver_name=resolver_name,
|
|
2367
|
+
recursive=recursive,
|
|
2368
|
+
)
|
|
2369
|
+
|
|
2370
|
+
def get_openapi_merge_schema(self) -> dict[str, Any]:
|
|
2371
|
+
"""Get the merged OpenAPI schema from multiple Lambda handlers.
|
|
2372
|
+
|
|
2373
|
+
Returns
|
|
2374
|
+
-------
|
|
2375
|
+
dict[str, Any]
|
|
2376
|
+
The merged OpenAPI schema.
|
|
2377
|
+
|
|
2378
|
+
Raises
|
|
2379
|
+
------
|
|
2380
|
+
RuntimeError
|
|
2381
|
+
If configure_openapi_merge has not been called.
|
|
2382
|
+
"""
|
|
2383
|
+
if not hasattr(self, "_openapi_merge") or self._openapi_merge is None:
|
|
2384
|
+
raise RuntimeError("configure_openapi_merge must be called before get_openapi_merge_schema")
|
|
2385
|
+
return self._openapi_merge.get_openapi_schema()
|
|
2386
|
+
|
|
2387
|
+
def get_openapi_merge_json_schema(self) -> str:
|
|
2388
|
+
"""Get the merged OpenAPI schema as JSON from multiple Lambda handlers.
|
|
2389
|
+
|
|
2390
|
+
Returns
|
|
2391
|
+
-------
|
|
2392
|
+
str
|
|
2393
|
+
The merged OpenAPI schema as a JSON string.
|
|
2394
|
+
|
|
2395
|
+
Raises
|
|
2396
|
+
------
|
|
2397
|
+
RuntimeError
|
|
2398
|
+
If configure_openapi_merge has not been called.
|
|
2399
|
+
"""
|
|
2400
|
+
if not hasattr(self, "_openapi_merge") or self._openapi_merge is None:
|
|
2401
|
+
raise RuntimeError("configure_openapi_merge must be called before get_openapi_merge_json_schema")
|
|
2402
|
+
return self._openapi_merge.get_openapi_json_schema()
|
|
2403
|
+
|
|
2207
2404
|
def enable_swagger(
|
|
2208
2405
|
self,
|
|
2209
2406
|
*,
|
|
@@ -2310,32 +2507,38 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2310
2507
|
|
|
2311
2508
|
openapi_servers = servers or [Server(url=(base_path or "/"))]
|
|
2312
2509
|
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2510
|
+
# Use merged schema if configure_openapi_merge was called, otherwise use regular schema
|
|
2511
|
+
if hasattr(self, "_openapi_merge") and self._openapi_merge is not None:
|
|
2512
|
+
# Get merged schema as JSON string (already properly serialized)
|
|
2513
|
+
escaped_spec = self._openapi_merge.get_openapi_json_schema().replace("</", "<\\/")
|
|
2514
|
+
else:
|
|
2515
|
+
spec = self.get_openapi_schema(
|
|
2516
|
+
title=title,
|
|
2517
|
+
version=version,
|
|
2518
|
+
openapi_version=openapi_version,
|
|
2519
|
+
summary=summary,
|
|
2520
|
+
description=description,
|
|
2521
|
+
tags=tags,
|
|
2522
|
+
servers=openapi_servers,
|
|
2523
|
+
terms_of_service=terms_of_service,
|
|
2524
|
+
contact=contact,
|
|
2525
|
+
license_info=license_info,
|
|
2526
|
+
security_schemes=security_schemes,
|
|
2527
|
+
security=security,
|
|
2528
|
+
external_documentation=external_documentation,
|
|
2529
|
+
openapi_extensions=openapi_extensions,
|
|
2530
|
+
)
|
|
2329
2531
|
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2532
|
+
# The .replace('</', '<\\/') part is necessary to prevent a potential issue where the JSON
|
|
2533
|
+
# string contains </script> or similar tags. Escaping the forward slash in </ as <\/ ensures
|
|
2534
|
+
# that the JSON does not inadvertently close the script tag, and the JSON remains a valid
|
|
2535
|
+
# string within the JavaScript code.
|
|
2536
|
+
escaped_spec = model_json(
|
|
2537
|
+
spec,
|
|
2538
|
+
by_alias=True,
|
|
2539
|
+
exclude_none=True,
|
|
2540
|
+
indent=2,
|
|
2541
|
+
).replace("</", "<\\/")
|
|
2339
2542
|
|
|
2340
2543
|
# Check for query parameters; if "format" is specified as "json",
|
|
2341
2544
|
# respond with the JSON used in the OpenAPI spec
|
|
@@ -2402,6 +2605,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2402
2605
|
security: list[dict[str, list[str]]] | None = None,
|
|
2403
2606
|
openapi_extensions: dict[str, Any] | None = None,
|
|
2404
2607
|
deprecated: bool = False,
|
|
2608
|
+
enable_validation: bool | None = None,
|
|
2405
2609
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
2406
2610
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
2407
2611
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -2436,6 +2640,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2436
2640
|
security,
|
|
2437
2641
|
openapi_extensions,
|
|
2438
2642
|
deprecated,
|
|
2643
|
+
enable_validation,
|
|
2439
2644
|
custom_response_validation_http_code,
|
|
2440
2645
|
middlewares,
|
|
2441
2646
|
)
|
|
@@ -2459,7 +2664,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2459
2664
|
|
|
2460
2665
|
return register_resolver
|
|
2461
2666
|
|
|
2462
|
-
def resolve(self, event:
|
|
2667
|
+
def resolve(self, event: Mapping[str, Any], context: LambdaContext) -> dict[str, Any]:
|
|
2463
2668
|
"""Resolves the response based on the provide event and decorator routes
|
|
2464
2669
|
|
|
2465
2670
|
## Internals
|
|
@@ -2512,10 +2717,10 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2512
2717
|
event = event.raw_event
|
|
2513
2718
|
|
|
2514
2719
|
if self._debug:
|
|
2515
|
-
print(self._serializer(event))
|
|
2720
|
+
print(self._serializer(cast(dict, event)))
|
|
2516
2721
|
|
|
2517
2722
|
# Populate router(s) dependencies without keeping a reference to each registered router
|
|
2518
|
-
BaseRouter.current_event = self._to_proxy_event(event)
|
|
2723
|
+
BaseRouter.current_event = self._to_proxy_event(cast(dict, event))
|
|
2519
2724
|
BaseRouter.lambda_context = context
|
|
2520
2725
|
|
|
2521
2726
|
response = self._resolve().build(self.current_event, self._cors)
|
|
@@ -2806,6 +3011,18 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2806
3011
|
route=route,
|
|
2807
3012
|
)
|
|
2808
3013
|
|
|
3014
|
+
if isinstance(exp, RequestUnsupportedContentType):
|
|
3015
|
+
errors = [{"loc": e["loc"], "type": e["type"]} for e in exp.errors()]
|
|
3016
|
+
return self._response_builder_class(
|
|
3017
|
+
response=Response(
|
|
3018
|
+
status_code=HTTPStatus.UNSUPPORTED_MEDIA_TYPE,
|
|
3019
|
+
content_type=content_types.APPLICATION_JSON,
|
|
3020
|
+
body={"statusCode": HTTPStatus.UNSUPPORTED_MEDIA_TYPE, "detail": errors},
|
|
3021
|
+
),
|
|
3022
|
+
serializer=self._serializer,
|
|
3023
|
+
route=route,
|
|
3024
|
+
)
|
|
3025
|
+
|
|
2809
3026
|
if isinstance(exp, ServiceError):
|
|
2810
3027
|
return self._response_builder_class(
|
|
2811
3028
|
response=Response(
|
|
@@ -2951,6 +3168,7 @@ class Router(BaseRouter):
|
|
|
2951
3168
|
security: list[dict[str, list[str]]] | None = None,
|
|
2952
3169
|
openapi_extensions: dict[str, Any] | None = None,
|
|
2953
3170
|
deprecated: bool = False,
|
|
3171
|
+
enable_validation: bool | None = None,
|
|
2954
3172
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
2955
3173
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
2956
3174
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -2978,6 +3196,7 @@ class Router(BaseRouter):
|
|
|
2978
3196
|
frozen_security,
|
|
2979
3197
|
frozen_openapi_extensions,
|
|
2980
3198
|
deprecated,
|
|
3199
|
+
enable_validation,
|
|
2981
3200
|
custom_response_validation_http_code,
|
|
2982
3201
|
)
|
|
2983
3202
|
|
|
@@ -3067,6 +3286,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
|
|
|
3067
3286
|
security: list[dict[str, list[str]]] | None = None,
|
|
3068
3287
|
openapi_extensions: dict[str, Any] | None = None,
|
|
3069
3288
|
deprecated: bool = False,
|
|
3289
|
+
enable_validation: bool | None = None,
|
|
3070
3290
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
3071
3291
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
3072
3292
|
) -> Callable[[AnyCallableT], AnyCallableT]:
|
|
@@ -3087,6 +3307,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
|
|
|
3087
3307
|
security,
|
|
3088
3308
|
openapi_extensions,
|
|
3089
3309
|
deprecated,
|
|
3310
|
+
enable_validation,
|
|
3090
3311
|
custom_response_validation_http_code,
|
|
3091
3312
|
middlewares,
|
|
3092
3313
|
)
|
|
@@ -3152,8 +3373,34 @@ class ALBResolver(ApiGatewayResolver):
|
|
|
3152
3373
|
enable_validation: bool = False,
|
|
3153
3374
|
response_validation_error_http_code: HTTPStatus | int | None = None,
|
|
3154
3375
|
json_body_deserializer: Callable[[str], dict] | None = None,
|
|
3376
|
+
decode_query_parameters: bool = False,
|
|
3155
3377
|
):
|
|
3156
|
-
"""Amazon Application Load Balancer (ALB) resolver
|
|
3378
|
+
"""Amazon Application Load Balancer (ALB) resolver
|
|
3379
|
+
|
|
3380
|
+
|
|
3381
|
+
Parameters
|
|
3382
|
+
----------
|
|
3383
|
+
cors: CORSConfig
|
|
3384
|
+
Optionally configure and enabled CORS. Not each route will need to have to cors=True
|
|
3385
|
+
debug: bool | None
|
|
3386
|
+
Enables debug mode, by default False. Can be also be enabled by "POWERTOOLS_DEV"
|
|
3387
|
+
environment variable
|
|
3388
|
+
serializer: Callable, optional
|
|
3389
|
+
function to serialize `obj` to a JSON formatted `str`, by default json.dumps
|
|
3390
|
+
strip_prefixes: list[str | Pattern], optional
|
|
3391
|
+
optional list of prefixes to be removed from the request path before doing the routing.
|
|
3392
|
+
This is often used with api gateways with multiple custom mappings.
|
|
3393
|
+
Each prefix can be a static string or a compiled regex pattern
|
|
3394
|
+
enable_validation: bool | None
|
|
3395
|
+
Enables validation of the request body against the route schema, by default False.
|
|
3396
|
+
response_validation_error_http_code
|
|
3397
|
+
Sets the returned status code if response is not validated. enable_validation must be True.
|
|
3398
|
+
json_body_deserializer: Callable[[str], dict], optional
|
|
3399
|
+
function to deserialize `str`, `bytes`, `bytearray` containing a JSON document to a Python `dict`,
|
|
3400
|
+
by default json.loads when integrating with EventSource data class
|
|
3401
|
+
decode_query_parameters: bool | None
|
|
3402
|
+
Enables URL-decoding of query parameters (both keys and values), by default False.
|
|
3403
|
+
"""
|
|
3157
3404
|
super().__init__(
|
|
3158
3405
|
ProxyEventType.ALBEvent,
|
|
3159
3406
|
cors,
|
|
@@ -3164,6 +3411,7 @@ class ALBResolver(ApiGatewayResolver):
|
|
|
3164
3411
|
response_validation_error_http_code,
|
|
3165
3412
|
json_body_deserializer=json_body_deserializer,
|
|
3166
3413
|
)
|
|
3414
|
+
self.decode_query_parameters = decode_query_parameters
|
|
3167
3415
|
|
|
3168
3416
|
def _get_base_path(self) -> str:
|
|
3169
3417
|
# ALB doesn't have a stage variable, so we just return an empty string
|
|
@@ -3190,3 +3438,10 @@ class ALBResolver(ApiGatewayResolver):
|
|
|
3190
3438
|
result.body = ""
|
|
3191
3439
|
|
|
3192
3440
|
return super()._to_response(result)
|
|
3441
|
+
|
|
3442
|
+
@override
|
|
3443
|
+
def _to_proxy_event(self, event: dict) -> BaseProxyEvent:
|
|
3444
|
+
proxy_event = super()._to_proxy_event(event)
|
|
3445
|
+
if isinstance(proxy_event, ALBEvent):
|
|
3446
|
+
proxy_event.decode_query_parameters = self.decode_query_parameters
|
|
3447
|
+
return proxy_event
|
|
@@ -124,6 +124,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
124
124
|
include_in_schema: bool = True,
|
|
125
125
|
openapi_extensions: dict[str, Any] | None = None,
|
|
126
126
|
deprecated: bool = False,
|
|
127
|
+
enable_validation: bool | None = None,
|
|
127
128
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
128
129
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
129
130
|
) -> Callable[[Callable[..., Any]], Callable[..., Any]]:
|
|
@@ -144,6 +145,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
144
145
|
security,
|
|
145
146
|
openapi_extensions,
|
|
146
147
|
deprecated,
|
|
148
|
+
enable_validation,
|
|
147
149
|
custom_response_validation_http_code,
|
|
148
150
|
middlewares,
|
|
149
151
|
)
|
|
@@ -165,6 +167,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
165
167
|
include_in_schema: bool = True,
|
|
166
168
|
openapi_extensions: dict[str, Any] | None = None,
|
|
167
169
|
deprecated: bool = False,
|
|
170
|
+
enable_validation: bool | None = None,
|
|
168
171
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
169
172
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
170
173
|
):
|
|
@@ -185,6 +188,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
185
188
|
security,
|
|
186
189
|
openapi_extensions,
|
|
187
190
|
deprecated,
|
|
191
|
+
enable_validation,
|
|
188
192
|
custom_response_validation_http_code,
|
|
189
193
|
middlewares,
|
|
190
194
|
)
|
|
@@ -206,6 +210,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
206
210
|
include_in_schema: bool = True,
|
|
207
211
|
openapi_extensions: dict[str, Any] | None = None,
|
|
208
212
|
deprecated: bool = False,
|
|
213
|
+
enable_validation: bool | None = None,
|
|
209
214
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
210
215
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
211
216
|
):
|
|
@@ -226,6 +231,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
226
231
|
security,
|
|
227
232
|
openapi_extensions,
|
|
228
233
|
deprecated,
|
|
234
|
+
enable_validation,
|
|
229
235
|
custom_response_validation_http_code,
|
|
230
236
|
middlewares,
|
|
231
237
|
)
|
|
@@ -247,6 +253,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
247
253
|
include_in_schema: bool = True,
|
|
248
254
|
openapi_extensions: dict[str, Any] | None = None,
|
|
249
255
|
deprecated: bool = False,
|
|
256
|
+
enable_validation: bool | None = None,
|
|
250
257
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
251
258
|
middlewares: list[Callable] | None = None,
|
|
252
259
|
):
|
|
@@ -267,6 +274,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
267
274
|
security,
|
|
268
275
|
openapi_extensions,
|
|
269
276
|
deprecated,
|
|
277
|
+
enable_validation,
|
|
270
278
|
custom_response_validation_http_code,
|
|
271
279
|
middlewares,
|
|
272
280
|
)
|
|
@@ -288,6 +296,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
288
296
|
include_in_schema: bool = True,
|
|
289
297
|
openapi_extensions: dict[str, Any] | None = None,
|
|
290
298
|
deprecated: bool = False,
|
|
299
|
+
enable_validation: bool | None = None,
|
|
291
300
|
custom_response_validation_http_code: int | HTTPStatus | None = None,
|
|
292
301
|
middlewares: list[Callable[..., Any]] | None = None,
|
|
293
302
|
):
|
|
@@ -308,6 +317,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
308
317
|
security,
|
|
309
318
|
openapi_extensions,
|
|
310
319
|
deprecated,
|
|
320
|
+
enable_validation,
|
|
311
321
|
custom_response_validation_http_code,
|
|
312
322
|
middlewares,
|
|
313
323
|
)
|