aws-lambda-powertools 3.8.1a5__tar.gz → 3.8.1a6__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.8.1a5 → aws_lambda_powertools-3.8.1a6}/PKG-INFO +1 -1
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/api_gateway.py +196 -15
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/lambda_function_url.py +4 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +13 -2
- aws_lambda_powertools-3.8.1a6/aws_lambda_powertools/event_handler/openapi/config.py +80 -0
- aws_lambda_powertools-3.8.1a6/aws_lambda_powertools/event_handler/openapi/constants.py +3 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/exceptions.py +10 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/vpc_lattice.py +22 -2
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/version.py +1 -1
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/s3.py +2 -2
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/pyproject.toml +2 -2
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/setup.py +1 -1
- aws_lambda_powertools-3.8.1a5/aws_lambda_powertools/event_handler/openapi/constants.py +0 -2
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/LICENSE +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/README.md +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/THIRD-PARTY-LICENSES +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/appsync.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/content_types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/router.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/event_handler/util.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/exceptions/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/buffer/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/buffer/cache.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/buffer/config.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/buffer/functions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/constants.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/filters.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/formatter.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/lambda_context.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/logger.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/logging/utils.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/functions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/metric.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/metrics.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/metrics/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/package_logger.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/py.typed +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/cache_dict.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/constants.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/cookies.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/functions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/json_encoder.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/lazy_import.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/shared/user_agent.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/tracing/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/tracing/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/tracing/extensions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/tracing/tracer.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/batch/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/iot_registry_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/functions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/functions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/iot_registry_events.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/transfer_family.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/parser/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/serialization.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/base.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
- {aws_lambda_powertools-3.8.1a5 → aws_lambda_powertools-3.8.1a6}/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.8.
|
3
|
+
Version: 3.8.1a6
|
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
|
@@ -18,8 +18,17 @@ from typing_extensions import override
|
|
18
18
|
|
19
19
|
from aws_lambda_powertools.event_handler import content_types
|
20
20
|
from aws_lambda_powertools.event_handler.exceptions import NotFoundError, ServiceError
|
21
|
-
from aws_lambda_powertools.event_handler.openapi.
|
22
|
-
from aws_lambda_powertools.event_handler.openapi.
|
21
|
+
from aws_lambda_powertools.event_handler.openapi.config import OpenAPIConfig
|
22
|
+
from aws_lambda_powertools.event_handler.openapi.constants import (
|
23
|
+
DEFAULT_API_VERSION,
|
24
|
+
DEFAULT_OPENAPI_TITLE,
|
25
|
+
DEFAULT_OPENAPI_VERSION,
|
26
|
+
)
|
27
|
+
from aws_lambda_powertools.event_handler.openapi.exceptions import (
|
28
|
+
RequestValidationError,
|
29
|
+
ResponseValidationError,
|
30
|
+
SchemaValidationError,
|
31
|
+
)
|
23
32
|
from aws_lambda_powertools.event_handler.openapi.types import (
|
24
33
|
COMPONENT_REF_PREFIX,
|
25
34
|
METHODS_WITH_BODY,
|
@@ -1496,6 +1505,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
1496
1505
|
serializer: Callable[[dict], str] | None = None,
|
1497
1506
|
strip_prefixes: list[str | Pattern] | None = None,
|
1498
1507
|
enable_validation: bool = False,
|
1508
|
+
response_validation_error_http_code: HTTPStatus | int | None = None,
|
1499
1509
|
):
|
1500
1510
|
"""
|
1501
1511
|
Parameters
|
@@ -1515,6 +1525,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
1515
1525
|
Each prefix can be a static string or a compiled regex pattern
|
1516
1526
|
enable_validation: bool | None
|
1517
1527
|
Enables validation of the request body against the route schema, by default False.
|
1528
|
+
response_validation_error_http_code
|
1529
|
+
Sets the returned status code if response is not validated. enable_validation must be True.
|
1518
1530
|
"""
|
1519
1531
|
self._proxy_type = proxy_type
|
1520
1532
|
self._dynamic_routes: list[Route] = []
|
@@ -1530,6 +1542,12 @@ class ApiGatewayResolver(BaseRouter):
|
|
1530
1542
|
self.context: dict = {} # early init as customers might add context before event resolution
|
1531
1543
|
self.processed_stack_frames = []
|
1532
1544
|
self._response_builder_class = ResponseBuilder[BaseProxyEvent]
|
1545
|
+
self.openapi_config = OpenAPIConfig() # starting an empty dataclass
|
1546
|
+
self._has_response_validation_error = response_validation_error_http_code is not None
|
1547
|
+
self._response_validation_error_http_code = self._validate_response_validation_error_http_code(
|
1548
|
+
response_validation_error_http_code,
|
1549
|
+
enable_validation,
|
1550
|
+
)
|
1533
1551
|
|
1534
1552
|
# Allow for a custom serializer or a concise json serialization
|
1535
1553
|
self._serializer = serializer or partial(json.dumps, separators=(",", ":"), cls=Encoder)
|
@@ -1539,12 +1557,41 @@ class ApiGatewayResolver(BaseRouter):
|
|
1539
1557
|
|
1540
1558
|
# Note the serializer argument: only use custom serializer if provided by the caller
|
1541
1559
|
# Otherwise, fully rely on the internal Pydantic based mechanism to serialize responses for validation.
|
1542
|
-
self.use(
|
1560
|
+
self.use(
|
1561
|
+
[
|
1562
|
+
OpenAPIValidationMiddleware(
|
1563
|
+
validation_serializer=serializer,
|
1564
|
+
has_response_validation_error=self._has_response_validation_error,
|
1565
|
+
),
|
1566
|
+
],
|
1567
|
+
)
|
1568
|
+
|
1569
|
+
def _validate_response_validation_error_http_code(
|
1570
|
+
self,
|
1571
|
+
response_validation_error_http_code: HTTPStatus | int | None,
|
1572
|
+
enable_validation: bool,
|
1573
|
+
) -> HTTPStatus:
|
1574
|
+
if response_validation_error_http_code and not enable_validation:
|
1575
|
+
msg = "'response_validation_error_http_code' cannot be set when enable_validation is False."
|
1576
|
+
raise ValueError(msg)
|
1577
|
+
|
1578
|
+
if (
|
1579
|
+
not isinstance(response_validation_error_http_code, HTTPStatus)
|
1580
|
+
and response_validation_error_http_code is not None
|
1581
|
+
):
|
1582
|
+
|
1583
|
+
try:
|
1584
|
+
response_validation_error_http_code = HTTPStatus(response_validation_error_http_code)
|
1585
|
+
except ValueError:
|
1586
|
+
msg = f"'{response_validation_error_http_code}' must be an integer representing an HTTP status code."
|
1587
|
+
raise ValueError(msg) from None
|
1588
|
+
|
1589
|
+
return response_validation_error_http_code or HTTPStatus.UNPROCESSABLE_ENTITY
|
1543
1590
|
|
1544
1591
|
def get_openapi_schema(
|
1545
1592
|
self,
|
1546
1593
|
*,
|
1547
|
-
title: str =
|
1594
|
+
title: str = DEFAULT_OPENAPI_TITLE,
|
1548
1595
|
version: str = DEFAULT_API_VERSION,
|
1549
1596
|
openapi_version: str = DEFAULT_OPENAPI_VERSION,
|
1550
1597
|
summary: str | None = None,
|
@@ -1596,6 +1643,29 @@ class ApiGatewayResolver(BaseRouter):
|
|
1596
1643
|
The OpenAPI schema as a pydantic model.
|
1597
1644
|
"""
|
1598
1645
|
|
1646
|
+
# DEPRECATION: Will be removed in v4.0.0. Use configure_api() instead.
|
1647
|
+
# Maintained for backwards compatibility.
|
1648
|
+
# See: https://github.com/aws-powertools/powertools-lambda-python/issues/6122
|
1649
|
+
if title == DEFAULT_OPENAPI_TITLE and self.openapi_config.title:
|
1650
|
+
title = self.openapi_config.title
|
1651
|
+
|
1652
|
+
if version == DEFAULT_API_VERSION and self.openapi_config.version:
|
1653
|
+
version = self.openapi_config.version
|
1654
|
+
|
1655
|
+
if openapi_version == DEFAULT_OPENAPI_VERSION and self.openapi_config.openapi_version:
|
1656
|
+
openapi_version = self.openapi_config.openapi_version
|
1657
|
+
|
1658
|
+
summary = summary or self.openapi_config.summary
|
1659
|
+
description = description or self.openapi_config.description
|
1660
|
+
tags = tags or self.openapi_config.tags
|
1661
|
+
servers = servers or self.openapi_config.servers
|
1662
|
+
terms_of_service = terms_of_service or self.openapi_config.terms_of_service
|
1663
|
+
contact = contact or self.openapi_config.contact
|
1664
|
+
license_info = license_info or self.openapi_config.license_info
|
1665
|
+
security_schemes = security_schemes or self.openapi_config.security_schemes
|
1666
|
+
security = security or self.openapi_config.security
|
1667
|
+
openapi_extensions = openapi_extensions or self.openapi_config.openapi_extensions
|
1668
|
+
|
1599
1669
|
from aws_lambda_powertools.event_handler.openapi.compat import (
|
1600
1670
|
GenerateJsonSchema,
|
1601
1671
|
get_compat_model_name_map,
|
@@ -1694,7 +1764,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
1694
1764
|
|
1695
1765
|
# If the 'servers' property is not provided or is an empty array,
|
1696
1766
|
# the default behavior is to return a Server Object with a URL value of "/".
|
1697
|
-
return servers
|
1767
|
+
return servers or [Server(url="/")]
|
1698
1768
|
|
1699
1769
|
@staticmethod
|
1700
1770
|
def _get_openapi_security(
|
@@ -1726,7 +1796,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
1726
1796
|
def get_openapi_json_schema(
|
1727
1797
|
self,
|
1728
1798
|
*,
|
1729
|
-
title: str =
|
1799
|
+
title: str = DEFAULT_OPENAPI_TITLE,
|
1730
1800
|
version: str = DEFAULT_API_VERSION,
|
1731
1801
|
openapi_version: str = DEFAULT_OPENAPI_VERSION,
|
1732
1802
|
summary: str | None = None,
|
@@ -1777,6 +1847,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
1777
1847
|
str
|
1778
1848
|
The OpenAPI schema as a JSON serializable dict.
|
1779
1849
|
"""
|
1850
|
+
|
1780
1851
|
from aws_lambda_powertools.event_handler.openapi.compat import model_json
|
1781
1852
|
|
1782
1853
|
return model_json(
|
@@ -1800,11 +1871,94 @@ class ApiGatewayResolver(BaseRouter):
|
|
1800
1871
|
indent=2,
|
1801
1872
|
)
|
1802
1873
|
|
1874
|
+
def configure_openapi(
|
1875
|
+
self,
|
1876
|
+
title: str = DEFAULT_OPENAPI_TITLE,
|
1877
|
+
version: str = DEFAULT_API_VERSION,
|
1878
|
+
openapi_version: str = DEFAULT_OPENAPI_VERSION,
|
1879
|
+
summary: str | None = None,
|
1880
|
+
description: str | None = None,
|
1881
|
+
tags: list[Tag | str] | None = None,
|
1882
|
+
servers: list[Server] | None = None,
|
1883
|
+
terms_of_service: str | None = None,
|
1884
|
+
contact: Contact | None = None,
|
1885
|
+
license_info: License | None = None,
|
1886
|
+
security_schemes: dict[str, SecurityScheme] | None = None,
|
1887
|
+
security: list[dict[str, list[str]]] | None = None,
|
1888
|
+
openapi_extensions: dict[str, Any] | None = None,
|
1889
|
+
):
|
1890
|
+
"""Configure OpenAPI specification settings for the API.
|
1891
|
+
|
1892
|
+
Sets up the OpenAPI documentation configuration that can be later used
|
1893
|
+
when enabling Swagger UI or generating OpenAPI specifications.
|
1894
|
+
|
1895
|
+
Parameters
|
1896
|
+
----------
|
1897
|
+
title: str
|
1898
|
+
The title of the application.
|
1899
|
+
version: str
|
1900
|
+
The version of the OpenAPI document (which is distinct from the OpenAPI Specification version or the API
|
1901
|
+
openapi_version: str, default = "3.0.0"
|
1902
|
+
The version of the OpenAPI Specification (which the document uses).
|
1903
|
+
summary: str, optional
|
1904
|
+
A short summary of what the application does.
|
1905
|
+
description: str, optional
|
1906
|
+
A verbose explanation of the application behavior.
|
1907
|
+
tags: list[Tag, str], optional
|
1908
|
+
A list of tags used by the specification with additional metadata.
|
1909
|
+
servers: list[Server], optional
|
1910
|
+
An array of Server Objects, which provide connectivity information to a target server.
|
1911
|
+
terms_of_service: str, optional
|
1912
|
+
A URL to the Terms of Service for the API. MUST be in the format of a URL.
|
1913
|
+
contact: Contact, optional
|
1914
|
+
The contact information for the exposed API.
|
1915
|
+
license_info: License, optional
|
1916
|
+
The license information for the exposed API.
|
1917
|
+
security_schemes: dict[str, SecurityScheme]], optional
|
1918
|
+
A declaration of the security schemes available to be used in the specification.
|
1919
|
+
security: list[dict[str, list[str]]], optional
|
1920
|
+
A declaration of which security mechanisms are applied globally across the API.
|
1921
|
+
openapi_extensions: Dict[str, Any], optional
|
1922
|
+
Additional OpenAPI extensions as a dictionary.
|
1923
|
+
|
1924
|
+
Example
|
1925
|
+
--------
|
1926
|
+
>>> api.configure_openapi(
|
1927
|
+
... title="My API",
|
1928
|
+
... version="1.0.0",
|
1929
|
+
... description="API for managing resources",
|
1930
|
+
... contact=Contact(
|
1931
|
+
... name="API Support",
|
1932
|
+
... email="support@example.com"
|
1933
|
+
... )
|
1934
|
+
... )
|
1935
|
+
|
1936
|
+
See Also
|
1937
|
+
--------
|
1938
|
+
enable_swagger : Method to enable Swagger UI using these configurations
|
1939
|
+
OpenAPIConfig : Data class containing all OpenAPI configuration options
|
1940
|
+
"""
|
1941
|
+
self.openapi_config = OpenAPIConfig(
|
1942
|
+
title=title,
|
1943
|
+
version=version,
|
1944
|
+
openapi_version=openapi_version,
|
1945
|
+
summary=summary,
|
1946
|
+
description=description,
|
1947
|
+
tags=tags,
|
1948
|
+
servers=servers,
|
1949
|
+
terms_of_service=terms_of_service,
|
1950
|
+
contact=contact,
|
1951
|
+
license_info=license_info,
|
1952
|
+
security_schemes=security_schemes,
|
1953
|
+
security=security,
|
1954
|
+
openapi_extensions=openapi_extensions,
|
1955
|
+
)
|
1956
|
+
|
1803
1957
|
def enable_swagger(
|
1804
1958
|
self,
|
1805
1959
|
*,
|
1806
1960
|
path: str = "/swagger",
|
1807
|
-
title: str =
|
1961
|
+
title: str = DEFAULT_OPENAPI_TITLE,
|
1808
1962
|
version: str = DEFAULT_API_VERSION,
|
1809
1963
|
openapi_version: str = DEFAULT_OPENAPI_VERSION,
|
1810
1964
|
summary: str | None = None,
|
@@ -1867,6 +2021,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
1867
2021
|
openapi_extensions: dict[str, Any], optional
|
1868
2022
|
Additional OpenAPI extensions as a dictionary.
|
1869
2023
|
"""
|
2024
|
+
|
1870
2025
|
from aws_lambda_powertools.event_handler.openapi.compat import model_json
|
1871
2026
|
from aws_lambda_powertools.event_handler.openapi.models import Server
|
1872
2027
|
from aws_lambda_powertools.event_handler.openapi.swagger_ui import (
|
@@ -2111,10 +2266,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
2111
2266
|
@staticmethod
|
2112
2267
|
def _has_debug(debug: bool | None = None) -> bool:
|
2113
2268
|
# It might have been explicitly switched off (debug=False)
|
2114
|
-
if debug is not None
|
2115
|
-
return debug
|
2116
|
-
|
2117
|
-
return powertools_dev_is_set()
|
2269
|
+
return debug if debug is not None else powertools_dev_is_set()
|
2118
2270
|
|
2119
2271
|
@staticmethod
|
2120
2272
|
def _compile_regex(rule: str, base_regex: str = _ROUTE_REGEX):
|
@@ -2227,7 +2379,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
2227
2379
|
if not isinstance(prefix, str) or prefix == "":
|
2228
2380
|
return False
|
2229
2381
|
|
2230
|
-
return path.startswith(prefix
|
2382
|
+
return path.startswith(f"{prefix}/")
|
2231
2383
|
|
2232
2384
|
def _handle_not_found(self, method: str, path: str) -> ResponseBuilder:
|
2233
2385
|
"""Called when no matching route was found and includes support for the cors preflight response"""
|
@@ -2370,6 +2522,21 @@ class ApiGatewayResolver(BaseRouter):
|
|
2370
2522
|
route=route,
|
2371
2523
|
)
|
2372
2524
|
|
2525
|
+
# OpenAPIValidationMiddleware will only raise ResponseValidationError when
|
2526
|
+
# 'self._response_validation_error_http_code' is not None
|
2527
|
+
if isinstance(exp, ResponseValidationError):
|
2528
|
+
http_code = self._response_validation_error_http_code
|
2529
|
+
errors = [{"loc": e["loc"], "type": e["type"]} for e in exp.errors()]
|
2530
|
+
return self._response_builder_class(
|
2531
|
+
response=Response(
|
2532
|
+
status_code=http_code.value,
|
2533
|
+
content_type=content_types.APPLICATION_JSON,
|
2534
|
+
body={"statusCode": self._response_validation_error_http_code, "detail": errors},
|
2535
|
+
),
|
2536
|
+
serializer=self._serializer,
|
2537
|
+
route=route,
|
2538
|
+
)
|
2539
|
+
|
2373
2540
|
if isinstance(exp, ServiceError):
|
2374
2541
|
return self._response_builder_class(
|
2375
2542
|
response=Response(
|
@@ -2483,8 +2650,9 @@ class ApiGatewayResolver(BaseRouter):
|
|
2483
2650
|
if route.dependant.response_extra_models:
|
2484
2651
|
responses_from_routes.extend(route.dependant.response_extra_models)
|
2485
2652
|
|
2486
|
-
|
2487
|
-
|
2653
|
+
return list(
|
2654
|
+
responses_from_routes + request_fields_from_routes + body_fields_from_routes,
|
2655
|
+
)
|
2488
2656
|
|
2489
2657
|
|
2490
2658
|
class Router(BaseRouter):
|
@@ -2582,6 +2750,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
|
|
2582
2750
|
serializer: Callable[[dict], str] | None = None,
|
2583
2751
|
strip_prefixes: list[str | Pattern] | None = None,
|
2584
2752
|
enable_validation: bool = False,
|
2753
|
+
response_validation_error_http_code: HTTPStatus | int | None = None,
|
2585
2754
|
):
|
2586
2755
|
"""Amazon API Gateway REST and HTTP API v1 payload resolver"""
|
2587
2756
|
super().__init__(
|
@@ -2591,6 +2760,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
|
|
2591
2760
|
serializer,
|
2592
2761
|
strip_prefixes,
|
2593
2762
|
enable_validation,
|
2763
|
+
response_validation_error_http_code,
|
2594
2764
|
)
|
2595
2765
|
|
2596
2766
|
def _get_base_path(self) -> str:
|
@@ -2664,6 +2834,7 @@ class APIGatewayHttpResolver(ApiGatewayResolver):
|
|
2664
2834
|
serializer: Callable[[dict], str] | None = None,
|
2665
2835
|
strip_prefixes: list[str | Pattern] | None = None,
|
2666
2836
|
enable_validation: bool = False,
|
2837
|
+
response_validation_error_http_code: HTTPStatus | int | None = None,
|
2667
2838
|
):
|
2668
2839
|
"""Amazon API Gateway HTTP API v2 payload resolver"""
|
2669
2840
|
super().__init__(
|
@@ -2673,6 +2844,7 @@ class APIGatewayHttpResolver(ApiGatewayResolver):
|
|
2673
2844
|
serializer,
|
2674
2845
|
strip_prefixes,
|
2675
2846
|
enable_validation,
|
2847
|
+
response_validation_error_http_code,
|
2676
2848
|
)
|
2677
2849
|
|
2678
2850
|
def _get_base_path(self) -> str:
|
@@ -2701,9 +2873,18 @@ class ALBResolver(ApiGatewayResolver):
|
|
2701
2873
|
serializer: Callable[[dict], str] | None = None,
|
2702
2874
|
strip_prefixes: list[str | Pattern] | None = None,
|
2703
2875
|
enable_validation: bool = False,
|
2876
|
+
response_validation_error_http_code: HTTPStatus | int | None = None,
|
2704
2877
|
):
|
2705
2878
|
"""Amazon Application Load Balancer (ALB) resolver"""
|
2706
|
-
super().__init__(
|
2879
|
+
super().__init__(
|
2880
|
+
ProxyEventType.ALBEvent,
|
2881
|
+
cors,
|
2882
|
+
debug,
|
2883
|
+
serializer,
|
2884
|
+
strip_prefixes,
|
2885
|
+
enable_validation,
|
2886
|
+
response_validation_error_http_code,
|
2887
|
+
)
|
2707
2888
|
|
2708
2889
|
def _get_base_path(self) -> str:
|
2709
2890
|
# ALB doesn't have a stage variable, so we just return an empty string
|
@@ -8,6 +8,8 @@ from aws_lambda_powertools.event_handler.api_gateway import (
|
|
8
8
|
)
|
9
9
|
|
10
10
|
if TYPE_CHECKING:
|
11
|
+
from http import HTTPStatus
|
12
|
+
|
11
13
|
from aws_lambda_powertools.event_handler import CORSConfig
|
12
14
|
from aws_lambda_powertools.utilities.data_classes import LambdaFunctionUrlEvent
|
13
15
|
|
@@ -57,6 +59,7 @@ class LambdaFunctionUrlResolver(ApiGatewayResolver):
|
|
57
59
|
serializer: Callable[[dict], str] | None = None,
|
58
60
|
strip_prefixes: list[str | Pattern] | None = None,
|
59
61
|
enable_validation: bool = False,
|
62
|
+
response_validation_error_http_code: HTTPStatus | int | None = None,
|
60
63
|
):
|
61
64
|
super().__init__(
|
62
65
|
ProxyEventType.LambdaFunctionUrlEvent,
|
@@ -65,6 +68,7 @@ class LambdaFunctionUrlResolver(ApiGatewayResolver):
|
|
65
68
|
serializer,
|
66
69
|
strip_prefixes,
|
67
70
|
enable_validation,
|
71
|
+
response_validation_error_http_code,
|
68
72
|
)
|
69
73
|
|
70
74
|
def _get_base_path(self) -> str:
|
@@ -17,7 +17,7 @@ from aws_lambda_powertools.event_handler.openapi.compat import (
|
|
17
17
|
)
|
18
18
|
from aws_lambda_powertools.event_handler.openapi.dependant import is_scalar_field
|
19
19
|
from aws_lambda_powertools.event_handler.openapi.encoders import jsonable_encoder
|
20
|
-
from aws_lambda_powertools.event_handler.openapi.exceptions import RequestValidationError
|
20
|
+
from aws_lambda_powertools.event_handler.openapi.exceptions import RequestValidationError, ResponseValidationError
|
21
21
|
from aws_lambda_powertools.event_handler.openapi.params import Param
|
22
22
|
|
23
23
|
if TYPE_CHECKING:
|
@@ -58,7 +58,11 @@ class OpenAPIValidationMiddleware(BaseMiddlewareHandler):
|
|
58
58
|
```
|
59
59
|
"""
|
60
60
|
|
61
|
-
def __init__(
|
61
|
+
def __init__(
|
62
|
+
self,
|
63
|
+
validation_serializer: Callable[[Any], str] | None = None,
|
64
|
+
has_response_validation_error: bool = False,
|
65
|
+
):
|
62
66
|
"""
|
63
67
|
Initialize the OpenAPIValidationMiddleware.
|
64
68
|
|
@@ -67,8 +71,13 @@ class OpenAPIValidationMiddleware(BaseMiddlewareHandler):
|
|
67
71
|
validation_serializer : Callable, optional
|
68
72
|
Optional serializer to use when serializing the response for validation.
|
69
73
|
Use it when you have a custom type that cannot be serialized by the default jsonable_encoder.
|
74
|
+
|
75
|
+
has_response_validation_error: bool, optional
|
76
|
+
Optional flag used to distinguish between payload and validation errors.
|
77
|
+
By setting this flag to True, ResponseValidationError will be raised if response could not be validated.
|
70
78
|
"""
|
71
79
|
self._validation_serializer = validation_serializer
|
80
|
+
self._has_response_validation_error = has_response_validation_error
|
72
81
|
|
73
82
|
def handler(self, app: EventHandlerInstance, next_middleware: NextMiddleware) -> Response:
|
74
83
|
logger.debug("OpenAPIValidationMiddleware handler")
|
@@ -164,6 +173,8 @@ class OpenAPIValidationMiddleware(BaseMiddlewareHandler):
|
|
164
173
|
errors: list[dict[str, Any]] = []
|
165
174
|
value = _validate_field(field=field, value=response_content, loc=("response",), existing_errors=errors)
|
166
175
|
if errors:
|
176
|
+
if self._has_response_validation_error:
|
177
|
+
raise ResponseValidationError(errors=_normalize_errors(errors), body=response_content)
|
167
178
|
raise RequestValidationError(errors=_normalize_errors(errors), body=response_content)
|
168
179
|
|
169
180
|
if hasattr(field, "serialize"):
|
@@ -0,0 +1,80 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from dataclasses import dataclass
|
4
|
+
from typing import TYPE_CHECKING, Any
|
5
|
+
|
6
|
+
from aws_lambda_powertools.event_handler.openapi.constants import (
|
7
|
+
DEFAULT_API_VERSION,
|
8
|
+
DEFAULT_OPENAPI_TITLE,
|
9
|
+
DEFAULT_OPENAPI_VERSION,
|
10
|
+
)
|
11
|
+
|
12
|
+
if TYPE_CHECKING:
|
13
|
+
from aws_lambda_powertools.event_handler.openapi.models import (
|
14
|
+
Contact,
|
15
|
+
License,
|
16
|
+
SecurityScheme,
|
17
|
+
Server,
|
18
|
+
Tag,
|
19
|
+
)
|
20
|
+
|
21
|
+
|
22
|
+
@dataclass
|
23
|
+
class OpenAPIConfig:
|
24
|
+
"""Configuration class for OpenAPI specification.
|
25
|
+
|
26
|
+
This class holds all the necessary configuration parameters to generate an OpenAPI specification.
|
27
|
+
|
28
|
+
Parameters
|
29
|
+
----------
|
30
|
+
title: str
|
31
|
+
The title of the application.
|
32
|
+
version: str
|
33
|
+
The version of the OpenAPI document (which is distinct from the OpenAPI Specification version or the API
|
34
|
+
openapi_version: str, default = "3.0.0"
|
35
|
+
The version of the OpenAPI Specification (which the document uses).
|
36
|
+
summary: str, optional
|
37
|
+
A short summary of what the application does.
|
38
|
+
description: str, optional
|
39
|
+
A verbose explanation of the application behavior.
|
40
|
+
tags: list[Tag, str], optional
|
41
|
+
A list of tags used by the specification with additional metadata.
|
42
|
+
servers: list[Server], optional
|
43
|
+
An array of Server Objects, which provide connectivity information to a target server.
|
44
|
+
terms_of_service: str, optional
|
45
|
+
A URL to the Terms of Service for the API. MUST be in the format of a URL.
|
46
|
+
contact: Contact, optional
|
47
|
+
The contact information for the exposed API.
|
48
|
+
license_info: License, optional
|
49
|
+
The license information for the exposed API.
|
50
|
+
security_schemes: dict[str, SecurityScheme]], optional
|
51
|
+
A declaration of the security schemes available to be used in the specification.
|
52
|
+
security: list[dict[str, list[str]]], optional
|
53
|
+
A declaration of which security mechanisms are applied globally across the API.
|
54
|
+
openapi_extensions: Dict[str, Any], optional
|
55
|
+
Additional OpenAPI extensions as a dictionary.
|
56
|
+
|
57
|
+
Example
|
58
|
+
--------
|
59
|
+
>>> config = OpenAPIConfig(
|
60
|
+
... title="My API",
|
61
|
+
... version="1.0.0",
|
62
|
+
... description="This is my API description",
|
63
|
+
... contact=Contact(name="API Support", email="support@example.com"),
|
64
|
+
... servers=[Server(url="https://api.example.com/v1")]
|
65
|
+
... )
|
66
|
+
"""
|
67
|
+
|
68
|
+
title: str = DEFAULT_OPENAPI_TITLE
|
69
|
+
version: str = DEFAULT_API_VERSION
|
70
|
+
openapi_version: str = DEFAULT_OPENAPI_VERSION
|
71
|
+
summary: str | None = None
|
72
|
+
description: str | None = None
|
73
|
+
tags: list[Tag | str] | None = None
|
74
|
+
servers: list[Server] | None = None
|
75
|
+
terms_of_service: str | None = None
|
76
|
+
contact: Contact | None = None
|
77
|
+
license_info: License | None = None
|
78
|
+
security_schemes: dict[str, SecurityScheme] | None = None
|
79
|
+
security: list[dict[str, list[str]]] | None = None
|
80
|
+
openapi_extensions: dict[str, Any] | None = None
|
@@ -23,6 +23,16 @@ class RequestValidationError(ValidationException):
|
|
23
23
|
self.body = body
|
24
24
|
|
25
25
|
|
26
|
+
class ResponseValidationError(ValidationException):
|
27
|
+
"""
|
28
|
+
Raised when the response body does not match the OpenAPI schema
|
29
|
+
"""
|
30
|
+
|
31
|
+
def __init__(self, errors: Sequence[Any], *, body: Any = None) -> None:
|
32
|
+
super().__init__(errors)
|
33
|
+
self.body = body
|
34
|
+
|
35
|
+
|
26
36
|
class SerializationError(Exception):
|
27
37
|
"""
|
28
38
|
Base exception for all encoding errors
|
@@ -8,6 +8,8 @@ from aws_lambda_powertools.event_handler.api_gateway import (
|
|
8
8
|
)
|
9
9
|
|
10
10
|
if TYPE_CHECKING:
|
11
|
+
from http import HTTPStatus
|
12
|
+
|
11
13
|
from aws_lambda_powertools.event_handler import CORSConfig
|
12
14
|
from aws_lambda_powertools.utilities.data_classes import VPCLatticeEvent, VPCLatticeEventV2
|
13
15
|
|
@@ -53,9 +55,18 @@ class VPCLatticeResolver(ApiGatewayResolver):
|
|
53
55
|
serializer: Callable[[dict], str] | None = None,
|
54
56
|
strip_prefixes: list[str | Pattern] | None = None,
|
55
57
|
enable_validation: bool = False,
|
58
|
+
response_validation_error_http_code: HTTPStatus | int | None = None,
|
56
59
|
):
|
57
60
|
"""Amazon VPC Lattice resolver"""
|
58
|
-
super().__init__(
|
61
|
+
super().__init__(
|
62
|
+
ProxyEventType.VPCLatticeEvent,
|
63
|
+
cors,
|
64
|
+
debug,
|
65
|
+
serializer,
|
66
|
+
strip_prefixes,
|
67
|
+
enable_validation,
|
68
|
+
response_validation_error_http_code,
|
69
|
+
)
|
59
70
|
|
60
71
|
def _get_base_path(self) -> str:
|
61
72
|
return ""
|
@@ -102,9 +113,18 @@ class VPCLatticeV2Resolver(ApiGatewayResolver):
|
|
102
113
|
serializer: Callable[[dict], str] | None = None,
|
103
114
|
strip_prefixes: list[str | Pattern] | None = None,
|
104
115
|
enable_validation: bool = False,
|
116
|
+
response_validation_error_http_code: HTTPStatus | int | None = None,
|
105
117
|
):
|
106
118
|
"""Amazon VPC Lattice resolver"""
|
107
|
-
super().__init__(
|
119
|
+
super().__init__(
|
120
|
+
ProxyEventType.VPCLatticeEventV2,
|
121
|
+
cors,
|
122
|
+
debug,
|
123
|
+
serializer,
|
124
|
+
strip_prefixes,
|
125
|
+
enable_validation,
|
126
|
+
response_validation_error_http_code,
|
127
|
+
)
|
108
128
|
|
109
129
|
def _get_base_path(self) -> str:
|
110
130
|
return ""
|
@@ -53,7 +53,7 @@ class S3Message(BaseModel):
|
|
53
53
|
s3SchemaVersion: str
|
54
54
|
configurationId: str
|
55
55
|
bucket: S3Bucket
|
56
|
-
object: S3Object # noqa: A003
|
56
|
+
object: S3Object # noqa: A003
|
57
57
|
|
58
58
|
|
59
59
|
class S3EventNotificationObjectModel(BaseModel):
|
@@ -71,7 +71,7 @@ class S3EventNotificationEventBridgeBucketModel(BaseModel):
|
|
71
71
|
class S3EventNotificationEventBridgeDetailModel(BaseModel):
|
72
72
|
version: str
|
73
73
|
bucket: S3EventNotificationEventBridgeBucketModel
|
74
|
-
object: S3EventNotificationObjectModel # noqa: A003
|
74
|
+
object: S3EventNotificationObjectModel # noqa: A003
|
75
75
|
request_id: str = Field(..., alias="request-id")
|
76
76
|
requester: str
|
77
77
|
source_ip_address: Optional[str] = Field(None, alias="source-ip-address")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "aws_lambda_powertools"
|
3
|
-
version = "3.8.
|
3
|
+
version = "3.8.1a6"
|
4
4
|
description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity."
|
5
5
|
authors = ["Amazon Web Services"]
|
6
6
|
include = ["aws_lambda_powertools/py.typed", "THIRD-PARTY-LICENSES"]
|
@@ -113,7 +113,7 @@ types-python-dateutil = "^2.8.19.6"
|
|
113
113
|
aws-cdk-aws-appsync-alpha = "^2.59.0a0"
|
114
114
|
httpx = ">=0.23.3,<0.29.0"
|
115
115
|
sentry-sdk = ">=1.22.2,<3.0.0"
|
116
|
-
ruff = ">=0.5.1,<0.
|
116
|
+
ruff = ">=0.5.1,<0.11.1"
|
117
117
|
retry2 = "^0.9.5"
|
118
118
|
pytest-socket = ">=0.6,<0.8"
|
119
119
|
types-redis = "^4.6.0.7"
|
@@ -65,7 +65,7 @@ extras_require = \
|
|
65
65
|
|
66
66
|
setup_kwargs = {
|
67
67
|
'name': 'aws_lambda_powertools',
|
68
|
-
'version': '3.8.
|
68
|
+
'version': '3.8.1a6',
|
69
69
|
'description': 'Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.',
|
70
70
|
'long_description': '<!-- markdownlint-disable MD013 MD041 MD043 -->\n# Powertools for AWS Lambda (Python)\n\n[](https://github.com/aws-powertools/powertools-lambda-python/actions/workflows/python_build.yml)\n[](https://app.codecov.io/gh/aws-powertools/powertools-lambda-python)\n   [](https://api.securityscorecards.dev/projects/github.com/aws-powertools/powertools-lambda-python) [](https://discord.gg/B8zZKbbyET)\n\nPowertools for AWS Lambda (Python) is a developer toolkit to implement Serverless [best practices and increase developer velocity](https://docs.powertools.aws.dev/lambda/python/latest/#features).\n\n> Also available in [Java](https://github.com/aws-powertools/powertools-lambda-java), [Typescript](https://github.com/aws-powertools/powertools-lambda-typescript), and [.NET](https://github.com/aws-powertools/powertools-lambda-dotnet).\n\n**[📜Documentation](https://docs.powertools.aws.dev/lambda/python/)** | **[🐍PyPi](https://pypi.org/project/aws-lambda-powertools/)** | **[Roadmap](https://docs.powertools.aws.dev/lambda/python/latest/roadmap/)** | **[Detailed blog post](https://aws.amazon.com/blogs/opensource/simplifying-serverless-best-practices-with-lambda-powertools/)**\n\n\n\n## Features\n\n* **[Tracing](https://docs.powertools.aws.dev/lambda/python/latest/core/tracer/)** - Decorators and utilities to trace Lambda function handlers, and both synchronous and asynchronous functions\n* **[Logging](https://docs.powertools.aws.dev/lambda/python/latest/core/logger/)** - Structured logging made easier, and decorator to enrich structured logging with key Lambda context details\n* **[Metrics](https://docs.powertools.aws.dev/lambda/python/latest/core/metrics/)** - Custom Metrics created asynchronously via CloudWatch Embedded Metric Format (EMF)\n* **[Event handler: AppSync](https://docs.powertools.aws.dev/lambda/python/latest/core/event_handler/appsync/)** - AWS AppSync event handler for Lambda Direct Resolver and Amplify GraphQL Transformer function\n* **[Event handler: API Gateway and ALB](https://docs.powertools.aws.dev/lambda/python/latest/core/event_handler/api_gateway/)** - Amazon API Gateway REST/HTTP API and ALB event handler for Lambda functions invoked using Proxy integration\n* **[Event handler: Agents for Amazon Bedrock](https://docs.powertools.aws.dev/lambda/python/latest/core/event_handler/bedrock_agents/)** - Create Agents for Amazon Bedrock, automatically generating OpenAPI schemas\n* **[Bring your own middleware](https://docs.powertools.aws.dev/lambda/python/latest/utilities/middleware_factory/)** - Decorator factory to create your own middleware to run logic before, and after each Lambda invocation\n* **[Parameters utility](https://docs.powertools.aws.dev/lambda/python/latest/utilities/parameters/)** - Retrieve and cache parameter values from Parameter Store, Secrets Manager, or DynamoDB\n* **[Batch processing](https://docs.powertools.aws.dev/lambda/python/latest/utilities/batch/)** - Handle partial failures for AWS SQS batch processing\n* **[Typing](https://docs.powertools.aws.dev/lambda/python/latest/utilities/typing/)** - Static typing classes to speedup development in your IDE\n* **[Validation](https://docs.powertools.aws.dev/lambda/python/latest/utilities/validation/)** - JSON Schema validator for inbound events and responses\n* **[Event source data classes](https://docs.powertools.aws.dev/lambda/python/latest/utilities/data_classes/)** - Data classes describing the schema of common Lambda event triggers\n* **[Parser](https://docs.powertools.aws.dev/lambda/python/latest/utilities/parser/)** - Data parsing and deep validation using Pydantic\n* **[Idempotency](https://docs.powertools.aws.dev/lambda/python/latest/utilities/idempotency/)** - Convert your Lambda functions into idempotent operations which are safe to retry\n* **[Data Masking](https://docs.powertools.aws.dev/lambda/python/latest/utilities/data_masking/)** - Protect confidential data with easy removal or encryption\n* **[Feature Flags](https://docs.powertools.aws.dev/lambda/python/latest/utilities/feature_flags/)** - A simple rule engine to evaluate when one or multiple features should be enabled depending on the input\n* **[Streaming](https://docs.powertools.aws.dev/lambda/python/latest/utilities/streaming/)** - Streams datasets larger than the available memory as streaming data.\n\n### Installation\n\nWith [pip](https://pip.pypa.io/en/latest/index.html) installed, run: ``pip install aws-lambda-powertools``\n\n## Tutorial and Examples\n\n* [Tutorial](https://docs.powertools.aws.dev/lambda/python/latest/tutorial)\n* [Serverless Shopping cart](https://github.com/aws-samples/aws-serverless-shopping-cart)\n* [Serverless Airline](https://github.com/aws-samples/aws-serverless-airline-booking)\n* [Serverless E-commerce platform](https://github.com/aws-samples/aws-serverless-ecommerce-platform)\n* [Serverless GraphQL Nanny Booking Api](https://github.com/trey-rosius/babysitter_api)\n\n## How to support Powertools for AWS Lambda (Python)?\n\n### Becoming a reference customer\n\nKnowing which companies are using this library is important to help prioritize the project internally. If your company is using Powertools for AWS Lambda (Python), you can request to have your name and logo added to the README file by raising a [Support Powertools for AWS Lambda (Python) (become a reference)](https://github.com/aws-powertools/powertools-lambda-python/issues/new?assignees=&labels=customer-reference&template=support_powertools.yml&title=%5BSupport+Lambda+Powertools%5D%3A+%3Cyour+organization+name%3E) issue.\n\nThe following companies, among others, use Powertools:\n\n* [Alma Media](https://www.almamedia.fi/en/)\n* [Banxware](https://www.banxware.com/)\n* [Brsk](https://www.brsk.co.uk/)\n* [BusPatrol](https://buspatrol.com/)\n* [Capital One](https://www.capitalone.com/)\n* [Caylent](https://caylent.com/)\n* [CHS Inc.](https://www.chsinc.com/)\n* [CPQi (Exadel Financial Services)](https://cpqi.com/)\n* [CloudZero](https://www.cloudzero.com/)\n* [CyberArk](https://www.cyberark.com/)\n* [Flyweight](https://flyweight.io/)\n* [globaldatanet](https://globaldatanet.com/)\n* [IMS](https://ims.tech/)\n* [Jit Security](https://www.jit.io/)\n* [LocalStack](https://www.localstack.cloud/)\n* [Propellor.ai](https://www.propellor.ai/)\n* [Pushpay](https://pushpay.com/)\n* [Recast](https://getrecast.com/)\n* [TopSport](https://www.topsport.com.au/)\n* [Transformity](https://transformity.tech/)\n* [Trek10](https://www.trek10.com/)\n* [Vertex Pharmaceuticals](https://www.vrtx.com/)\n\n### Sharing your work\n\nShare what you did with Powertools for AWS Lambda (Python) 💞💞. Blog post, workshops, presentation, sample apps and others. Check out what the community has already shared about Powertools for AWS Lambda (Python) [here](https://docs.powertools.aws.dev/lambda/python/latest/we_made_this/).\n\n### Using Lambda Layer or SAR\n\nThis helps us understand who uses Powertools for AWS Lambda (Python) in a non-intrusive way, and helps us gain future investments for other Powertools for AWS Lambda languages. When [using Layers](https://docs.powertools.aws.dev/lambda/python/latest/#lambda-layer), you can add Powertools for AWS Lambda (Python) as a dev dependency (or as part of your virtual env) to not impact the development process.\n\n## Credits\n\n* Structured logging initial implementation from [aws-lambda-logging](https://gitlab.com/hadrien/aws_lambda_logging)\n* Powertools for AWS Lambda (Python) idea [DAZN Powertools](https://github.com/getndazn/dazn-lambda-powertools/)\n\n## Connect\n\n* **Powertools for AWS Lambda on Discord**: `#python` - **[Invite link](https://discord.gg/B8zZKbbyET)**\n* **Email**: <aws-powertools-maintainers@amazon.com>\n\n## Security disclosures\n\nIf you think you’ve found a potential security issue, please do not post it in the Issues. Instead, please follow the instructions [here](https://aws.amazon.com/security/vulnerability-reporting/) or [email AWS security directly](mailto:aws-security@amazon.com).\n\n## License\n\nThis library is licensed under the MIT-0 License. See the LICENSE file.\n',
|
71
71
|
'author': 'Amazon Web Services',
|
File without changes
|
File without changes
|