aws-lambda-powertools 2.35.1__tar.gz → 2.37.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-2.35.1 → aws_lambda_powertools-2.37.0}/PKG-INFO +2 -2
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/api_gateway.py +176 -56
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/bedrock_agent.py +15 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/models.py +2 -1
- aws_lambda_powertools-2.37.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +13 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +33 -6
- aws_lambda_powertools-2.37.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +158 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/types.py +1 -1
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/formatter.py +6 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/logger.py +4 -1
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/base.py +32 -1
- aws_lambda_powertools-2.37.0/aws_lambda_powertools/metrics/functions.py +137 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/metrics.py +13 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +29 -1
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/constants.py +41 -33
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/functions.py +5 -7
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/version.py +1 -1
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/tracing/tracer.py +14 -7
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/batch/exceptions.py +16 -0
- aws_lambda_powertools-2.37.0/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +114 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/__init__.py +14 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +1 -1
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +15 -4
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +18 -2
- aws_lambda_powertools-2.37.0/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +243 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/common.py +17 -8
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +18 -2
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +18 -2
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +38 -4
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +7 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +9 -3
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/__init__.py +4 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/base.py +12 -2
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/config.py +5 -0
- aws_lambda_powertools-2.37.0/aws_lambda_powertools/utilities/idempotency/hook.py +13 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parameters/__init__.py +4 -2
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parameters/base.py +6 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parameters/exceptions.py +8 -0
- aws_lambda_powertools-2.37.0/aws_lambda_powertools/utilities/parameters/secrets.py +444 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parameters/ssm.py +209 -4
- aws_lambda_powertools-2.37.0/aws_lambda_powertools/utilities/parameters/types.py +20 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/sqs.py +1 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/pyproject.toml +25 -25
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/setup.py +2 -2
- aws_lambda_powertools-2.35.1/aws_lambda_powertools/metrics/functions.py +0 -71
- aws_lambda_powertools-2.35.1/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -92
- aws_lambda_powertools-2.35.1/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
- aws_lambda_powertools-2.35.1/aws_lambda_powertools/utilities/parameters/secrets.py +0 -184
- aws_lambda_powertools-2.35.1/aws_lambda_powertools/utilities/parameters/types.py +0 -3
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/LICENSE +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/README.md +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/THIRD-PARTY-LICENSES +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/router.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/types.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/util.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/filters.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/types.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/logging/utils.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/metric.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/base.py +0 -0
- {aws_lambda_powertools-2.35.1/aws_lambda_powertools/event_handler/openapi/swagger_ui → aws_lambda_powertools-2.37.0/aws_lambda_powertools/metrics/provider/cloudwatch_emf}/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/metrics/types.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/package_logger.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/py.typed +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/cookies.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/types.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/shared/user_agent.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/tracing/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/tracing/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/tracing/extensions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/batch/types.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
- {aws_lambda_powertools-2.35.1/aws_lambda_powertools/metrics/provider/cloudwatch_emf → aws_lambda_powertools-2.37.0/aws_lambda_powertools/utilities/data_classes/appsync}/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
- {aws_lambda_powertools-2.35.1/aws_lambda_powertools/utilities/data_classes/appsync → aws_lambda_powertools-2.37.0/aws_lambda_powertools/utilities/idempotency/persistence}/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
- {aws_lambda_powertools-2.35.1/aws_lambda_powertools/utilities/idempotency/persistence → aws_lambda_powertools-2.37.0/aws_lambda_powertools/utilities/idempotency/serialization}/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/compat.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/s3.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/pydantic.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/serialization.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
- {aws_lambda_powertools-2.35.1 → aws_lambda_powertools-2.37.0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: aws-lambda-powertools
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.37.0
|
|
4
4
|
Summary: Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.
|
|
5
5
|
Home-page: https://github.com/aws-powertools/powertools-lambda-python
|
|
6
6
|
License: MIT
|
|
@@ -34,7 +34,7 @@ Requires-Dist: fastjsonschema (>=2.14.5,<3.0.0) ; extra == "validation" or extra
|
|
|
34
34
|
Requires-Dist: jsonpath-ng (>=1.6.0,<2.0.0) ; extra == "datamasking"
|
|
35
35
|
Requires-Dist: pydantic (>=1.8.2,<2.0.0) ; extra == "parser" or extra == "all"
|
|
36
36
|
Requires-Dist: redis (>=4.4,<6.0) ; extra == "redis"
|
|
37
|
-
Requires-Dist: typing-extensions (>=4.
|
|
37
|
+
Requires-Dist: typing-extensions (>=4.11.0,<5.0.0)
|
|
38
38
|
Project-URL: Documentation, https://docs.powertools.aws.dev/lambda/python/
|
|
39
39
|
Project-URL: Issue tracker, https://github.com/aws-powertools/powertools-lambda-python/issues
|
|
40
40
|
Project-URL: Repository, https://github.com/aws-powertools/powertools-lambda-python
|
|
@@ -34,7 +34,6 @@ from aws_lambda_powertools.event_handler import content_types
|
|
|
34
34
|
from aws_lambda_powertools.event_handler.exceptions import NotFoundError, ServiceError
|
|
35
35
|
from aws_lambda_powertools.event_handler.openapi.constants import DEFAULT_API_VERSION, DEFAULT_OPENAPI_VERSION
|
|
36
36
|
from aws_lambda_powertools.event_handler.openapi.exceptions import RequestValidationError
|
|
37
|
-
from aws_lambda_powertools.event_handler.openapi.swagger_ui.html import generate_swagger_html
|
|
38
37
|
from aws_lambda_powertools.event_handler.openapi.types import (
|
|
39
38
|
COMPONENT_REF_PREFIX,
|
|
40
39
|
METHODS_WITH_BODY,
|
|
@@ -83,10 +82,14 @@ if TYPE_CHECKING:
|
|
|
83
82
|
Contact,
|
|
84
83
|
License,
|
|
85
84
|
OpenAPI,
|
|
85
|
+
SecurityScheme,
|
|
86
86
|
Server,
|
|
87
87
|
Tag,
|
|
88
88
|
)
|
|
89
89
|
from aws_lambda_powertools.event_handler.openapi.params import Dependant
|
|
90
|
+
from aws_lambda_powertools.event_handler.openapi.swagger_ui.oauth2 import (
|
|
91
|
+
OAuth2Config,
|
|
92
|
+
)
|
|
90
93
|
from aws_lambda_powertools.event_handler.openapi.types import (
|
|
91
94
|
TypeModelOrEnum,
|
|
92
95
|
)
|
|
@@ -282,6 +285,7 @@ class Route:
|
|
|
282
285
|
tags: Optional[List[str]],
|
|
283
286
|
operation_id: Optional[str],
|
|
284
287
|
include_in_schema: bool,
|
|
288
|
+
security: Optional[List[Dict[str, List[str]]]],
|
|
285
289
|
middlewares: Optional[List[Callable[..., Response]]],
|
|
286
290
|
):
|
|
287
291
|
"""
|
|
@@ -317,6 +321,8 @@ class Route:
|
|
|
317
321
|
The OpenAPI operationId for this route
|
|
318
322
|
include_in_schema: bool
|
|
319
323
|
Whether or not to include this route in the OpenAPI schema
|
|
324
|
+
security: List[Dict[str, List[str]]], optional
|
|
325
|
+
The OpenAPI security for this route
|
|
320
326
|
middlewares: Optional[List[Callable[..., Response]]]
|
|
321
327
|
The list of route middlewares to be called in order.
|
|
322
328
|
"""
|
|
@@ -339,6 +345,7 @@ class Route:
|
|
|
339
345
|
self.response_description = response_description
|
|
340
346
|
self.tags = tags or []
|
|
341
347
|
self.include_in_schema = include_in_schema
|
|
348
|
+
self.security = security
|
|
342
349
|
self.middlewares = middlewares or []
|
|
343
350
|
self.operation_id = operation_id or self._generate_operation_id()
|
|
344
351
|
|
|
@@ -486,6 +493,10 @@ class Route:
|
|
|
486
493
|
)
|
|
487
494
|
parameters.extend(operation_params)
|
|
488
495
|
|
|
496
|
+
# Add security if present
|
|
497
|
+
if self.security:
|
|
498
|
+
operation["security"] = self.security
|
|
499
|
+
|
|
489
500
|
# Add the parameters to the OpenAPI operation
|
|
490
501
|
if parameters:
|
|
491
502
|
all_parameters = {(param["in"], param["name"]): param for param in parameters}
|
|
@@ -503,6 +514,18 @@ class Route:
|
|
|
503
514
|
if request_body_oai:
|
|
504
515
|
operation["requestBody"] = request_body_oai
|
|
505
516
|
|
|
517
|
+
# Validation failure response (422) will always be part of the schema
|
|
518
|
+
operation_responses: Dict[int, OpenAPIResponse] = {
|
|
519
|
+
422: {
|
|
520
|
+
"description": "Validation Error",
|
|
521
|
+
"content": {
|
|
522
|
+
"application/json": {
|
|
523
|
+
"schema": {"$ref": COMPONENT_REF_PREFIX + "HTTPValidationError"},
|
|
524
|
+
},
|
|
525
|
+
},
|
|
526
|
+
},
|
|
527
|
+
}
|
|
528
|
+
|
|
506
529
|
# Add the response to the OpenAPI operation
|
|
507
530
|
if self.responses:
|
|
508
531
|
for status_code in list(self.responses):
|
|
@@ -549,45 +572,34 @@ class Route:
|
|
|
549
572
|
|
|
550
573
|
response["content"][content_type] = new_payload
|
|
551
574
|
|
|
552
|
-
|
|
575
|
+
# Merge the user provided response with the default responses
|
|
576
|
+
operation_responses[status_code] = response
|
|
553
577
|
else:
|
|
554
578
|
# Set the default 200 response
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
json_response = success_response["content"].setdefault("application/json", {})
|
|
560
|
-
|
|
561
|
-
# Add the response schema to the OpenAPI 200 response
|
|
562
|
-
json_response.update(
|
|
563
|
-
self._openapi_operation_return(
|
|
564
|
-
param=dependant.return_param,
|
|
565
|
-
model_name_map=model_name_map,
|
|
566
|
-
field_mapping=field_mapping,
|
|
567
|
-
),
|
|
579
|
+
response_schema = self._openapi_operation_return(
|
|
580
|
+
param=dependant.return_param,
|
|
581
|
+
model_name_map=model_name_map,
|
|
582
|
+
field_mapping=field_mapping,
|
|
568
583
|
)
|
|
569
584
|
|
|
570
|
-
# Add
|
|
571
|
-
|
|
572
|
-
"description":
|
|
573
|
-
"content": {
|
|
574
|
-
"application/json": {
|
|
575
|
-
"schema": {"$ref": COMPONENT_REF_PREFIX + "HTTPValidationError"},
|
|
576
|
-
},
|
|
577
|
-
},
|
|
585
|
+
# Add the response schema to the OpenAPI 200 response
|
|
586
|
+
operation_responses[200] = {
|
|
587
|
+
"description": self.response_description or _DEFAULT_OPENAPI_RESPONSE_DESCRIPTION,
|
|
588
|
+
"content": {"application/json": response_schema},
|
|
578
589
|
}
|
|
579
590
|
|
|
580
|
-
|
|
581
|
-
if "ValidationError" not in definitions:
|
|
582
|
-
definitions.update(
|
|
583
|
-
{
|
|
584
|
-
"ValidationError": validation_error_definition,
|
|
585
|
-
"HTTPValidationError": validation_error_response_definition,
|
|
586
|
-
},
|
|
587
|
-
)
|
|
588
|
-
|
|
591
|
+
operation["responses"] = operation_responses
|
|
589
592
|
path[self.method.lower()] = operation
|
|
590
593
|
|
|
594
|
+
# Add the validation error schema to the definitions, but only if it hasn't been added yet
|
|
595
|
+
if "ValidationError" not in definitions:
|
|
596
|
+
definitions.update(
|
|
597
|
+
{
|
|
598
|
+
"ValidationError": validation_error_definition,
|
|
599
|
+
"HTTPValidationError": validation_error_response_definition,
|
|
600
|
+
},
|
|
601
|
+
)
|
|
602
|
+
|
|
591
603
|
# Generate the response schema
|
|
592
604
|
return path, definitions
|
|
593
605
|
|
|
@@ -884,6 +896,7 @@ class BaseRouter(ABC):
|
|
|
884
896
|
tags: Optional[List[str]] = None,
|
|
885
897
|
operation_id: Optional[str] = None,
|
|
886
898
|
include_in_schema: bool = True,
|
|
899
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
887
900
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
888
901
|
):
|
|
889
902
|
raise NotImplementedError()
|
|
@@ -942,6 +955,7 @@ class BaseRouter(ABC):
|
|
|
942
955
|
tags: Optional[List[str]] = None,
|
|
943
956
|
operation_id: Optional[str] = None,
|
|
944
957
|
include_in_schema: bool = True,
|
|
958
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
945
959
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
946
960
|
):
|
|
947
961
|
"""Get route decorator with GET `method`
|
|
@@ -979,6 +993,7 @@ class BaseRouter(ABC):
|
|
|
979
993
|
tags,
|
|
980
994
|
operation_id,
|
|
981
995
|
include_in_schema,
|
|
996
|
+
security,
|
|
982
997
|
middlewares,
|
|
983
998
|
)
|
|
984
999
|
|
|
@@ -995,6 +1010,7 @@ class BaseRouter(ABC):
|
|
|
995
1010
|
tags: Optional[List[str]] = None,
|
|
996
1011
|
operation_id: Optional[str] = None,
|
|
997
1012
|
include_in_schema: bool = True,
|
|
1013
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
998
1014
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
999
1015
|
):
|
|
1000
1016
|
"""Post route decorator with POST `method`
|
|
@@ -1033,6 +1049,7 @@ class BaseRouter(ABC):
|
|
|
1033
1049
|
tags,
|
|
1034
1050
|
operation_id,
|
|
1035
1051
|
include_in_schema,
|
|
1052
|
+
security,
|
|
1036
1053
|
middlewares,
|
|
1037
1054
|
)
|
|
1038
1055
|
|
|
@@ -1049,6 +1066,7 @@ class BaseRouter(ABC):
|
|
|
1049
1066
|
tags: Optional[List[str]] = None,
|
|
1050
1067
|
operation_id: Optional[str] = None,
|
|
1051
1068
|
include_in_schema: bool = True,
|
|
1069
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1052
1070
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
1053
1071
|
):
|
|
1054
1072
|
"""Put route decorator with PUT `method`
|
|
@@ -1087,6 +1105,7 @@ class BaseRouter(ABC):
|
|
|
1087
1105
|
tags,
|
|
1088
1106
|
operation_id,
|
|
1089
1107
|
include_in_schema,
|
|
1108
|
+
security,
|
|
1090
1109
|
middlewares,
|
|
1091
1110
|
)
|
|
1092
1111
|
|
|
@@ -1103,6 +1122,7 @@ class BaseRouter(ABC):
|
|
|
1103
1122
|
tags: Optional[List[str]] = None,
|
|
1104
1123
|
operation_id: Optional[str] = None,
|
|
1105
1124
|
include_in_schema: bool = True,
|
|
1125
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1106
1126
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
1107
1127
|
):
|
|
1108
1128
|
"""Delete route decorator with DELETE `method`
|
|
@@ -1140,6 +1160,7 @@ class BaseRouter(ABC):
|
|
|
1140
1160
|
tags,
|
|
1141
1161
|
operation_id,
|
|
1142
1162
|
include_in_schema,
|
|
1163
|
+
security,
|
|
1143
1164
|
middlewares,
|
|
1144
1165
|
)
|
|
1145
1166
|
|
|
@@ -1156,6 +1177,7 @@ class BaseRouter(ABC):
|
|
|
1156
1177
|
tags: Optional[List[str]] = None,
|
|
1157
1178
|
operation_id: Optional[str] = None,
|
|
1158
1179
|
include_in_schema: bool = True,
|
|
1180
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1159
1181
|
middlewares: Optional[List[Callable]] = None,
|
|
1160
1182
|
):
|
|
1161
1183
|
"""Patch route decorator with PATCH `method`
|
|
@@ -1196,6 +1218,7 @@ class BaseRouter(ABC):
|
|
|
1196
1218
|
tags,
|
|
1197
1219
|
operation_id,
|
|
1198
1220
|
include_in_schema,
|
|
1221
|
+
security,
|
|
1199
1222
|
middlewares,
|
|
1200
1223
|
)
|
|
1201
1224
|
|
|
@@ -1418,6 +1441,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1418
1441
|
terms_of_service: Optional[str] = None,
|
|
1419
1442
|
contact: Optional["Contact"] = None,
|
|
1420
1443
|
license_info: Optional["License"] = None,
|
|
1444
|
+
security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
|
|
1445
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1421
1446
|
) -> "OpenAPI":
|
|
1422
1447
|
"""
|
|
1423
1448
|
Returns the OpenAPI schema as a pydantic model.
|
|
@@ -1444,6 +1469,10 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1444
1469
|
The contact information for the exposed API.
|
|
1445
1470
|
license_info: License, optional
|
|
1446
1471
|
The license information for the exposed API.
|
|
1472
|
+
security_schemes: Dict[str, "SecurityScheme"]], optional
|
|
1473
|
+
A declaration of the security schemes available to be used in the specification.
|
|
1474
|
+
security: List[Dict[str, List[str]]], optional
|
|
1475
|
+
A declaration of which security mechanisms are applied globally across the API.
|
|
1447
1476
|
|
|
1448
1477
|
Returns
|
|
1449
1478
|
-------
|
|
@@ -1456,25 +1485,12 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1456
1485
|
get_compat_model_name_map,
|
|
1457
1486
|
get_definitions,
|
|
1458
1487
|
)
|
|
1459
|
-
from aws_lambda_powertools.event_handler.openapi.models import OpenAPI, PathItem,
|
|
1460
|
-
from aws_lambda_powertools.event_handler.openapi.pydantic_loader import PYDANTIC_V2
|
|
1488
|
+
from aws_lambda_powertools.event_handler.openapi.models import OpenAPI, PathItem, Tag
|
|
1461
1489
|
from aws_lambda_powertools.event_handler.openapi.types import (
|
|
1462
1490
|
COMPONENT_REF_TEMPLATE,
|
|
1463
1491
|
)
|
|
1464
1492
|
|
|
1465
|
-
|
|
1466
|
-
if PYDANTIC_V2 and not openapi_version.startswith("3.1"):
|
|
1467
|
-
warnings.warn(
|
|
1468
|
-
"You are using Pydantic v2, which is incompatible with OpenAPI schema 3.0. Forcing OpenAPI 3.1",
|
|
1469
|
-
stacklevel=2,
|
|
1470
|
-
)
|
|
1471
|
-
openapi_version = "3.1.0"
|
|
1472
|
-
elif not PYDANTIC_V2 and not openapi_version.startswith("3.0"):
|
|
1473
|
-
warnings.warn(
|
|
1474
|
-
"You are using Pydantic v1, which is incompatible with OpenAPI schema 3.1. Forcing OpenAPI 3.0",
|
|
1475
|
-
stacklevel=2,
|
|
1476
|
-
)
|
|
1477
|
-
openapi_version = "3.0.3"
|
|
1493
|
+
openapi_version = self._determine_openapi_version(openapi_version)
|
|
1478
1494
|
|
|
1479
1495
|
# Start with the bare minimum required for a valid OpenAPI schema
|
|
1480
1496
|
info: Dict[str, Any] = {"title": title, "version": version}
|
|
@@ -1489,13 +1505,12 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1489
1505
|
|
|
1490
1506
|
info.update({field: value for field, value in optional_fields.items() if value})
|
|
1491
1507
|
|
|
1492
|
-
output: Dict[str, Any] = {
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
output["servers"] = [Server(url="/")]
|
|
1508
|
+
output: Dict[str, Any] = {
|
|
1509
|
+
"openapi": openapi_version,
|
|
1510
|
+
"info": info,
|
|
1511
|
+
"servers": self._get_openapi_servers(servers),
|
|
1512
|
+
"security": self._get_openapi_security(security, security_schemes),
|
|
1513
|
+
}
|
|
1499
1514
|
|
|
1500
1515
|
components: Dict[str, Dict[str, Any]] = {}
|
|
1501
1516
|
paths: Dict[str, Dict[str, Any]] = {}
|
|
@@ -1533,6 +1548,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1533
1548
|
|
|
1534
1549
|
if definitions:
|
|
1535
1550
|
components["schemas"] = {k: definitions[k] for k in sorted(definitions)}
|
|
1551
|
+
if security_schemes:
|
|
1552
|
+
components["securitySchemes"] = security_schemes
|
|
1536
1553
|
if components:
|
|
1537
1554
|
output["components"] = components
|
|
1538
1555
|
if tags:
|
|
@@ -1542,6 +1559,50 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1542
1559
|
|
|
1543
1560
|
return OpenAPI(**output)
|
|
1544
1561
|
|
|
1562
|
+
@staticmethod
|
|
1563
|
+
def _get_openapi_servers(servers: Optional[List["Server"]]) -> List["Server"]:
|
|
1564
|
+
from aws_lambda_powertools.event_handler.openapi.models import Server
|
|
1565
|
+
|
|
1566
|
+
# If the 'servers' property is not provided or is an empty array,
|
|
1567
|
+
# the default behavior is to return a Server Object with a URL value of "/".
|
|
1568
|
+
return servers if servers else [Server(url="/")]
|
|
1569
|
+
|
|
1570
|
+
@staticmethod
|
|
1571
|
+
def _get_openapi_security(
|
|
1572
|
+
security: Optional[List[Dict[str, List[str]]]],
|
|
1573
|
+
security_schemes: Optional[Dict[str, "SecurityScheme"]],
|
|
1574
|
+
) -> Optional[List[Dict[str, List[str]]]]:
|
|
1575
|
+
if not security:
|
|
1576
|
+
return None
|
|
1577
|
+
|
|
1578
|
+
if not security_schemes:
|
|
1579
|
+
raise ValueError("security_schemes must be provided if security is provided")
|
|
1580
|
+
|
|
1581
|
+
# Check if all keys in security are present in the security_schemes
|
|
1582
|
+
if any(key not in security_schemes for sec in security for key in sec):
|
|
1583
|
+
raise ValueError("Some security schemes not found in security_schemes")
|
|
1584
|
+
|
|
1585
|
+
return security
|
|
1586
|
+
|
|
1587
|
+
@staticmethod
|
|
1588
|
+
def _determine_openapi_version(openapi_version):
|
|
1589
|
+
from aws_lambda_powertools.event_handler.openapi.pydantic_loader import PYDANTIC_V2
|
|
1590
|
+
|
|
1591
|
+
# Pydantic V2 has no support for OpenAPI schema 3.0
|
|
1592
|
+
if PYDANTIC_V2 and not openapi_version.startswith("3.1"):
|
|
1593
|
+
warnings.warn(
|
|
1594
|
+
"You are using Pydantic v2, which is incompatible with OpenAPI schema 3.0. Forcing OpenAPI 3.1",
|
|
1595
|
+
stacklevel=2,
|
|
1596
|
+
)
|
|
1597
|
+
openapi_version = "3.1.0"
|
|
1598
|
+
elif not PYDANTIC_V2 and not openapi_version.startswith("3.0"):
|
|
1599
|
+
warnings.warn(
|
|
1600
|
+
"You are using Pydantic v1, which is incompatible with OpenAPI schema 3.1. Forcing OpenAPI 3.0",
|
|
1601
|
+
stacklevel=2,
|
|
1602
|
+
)
|
|
1603
|
+
openapi_version = "3.0.3"
|
|
1604
|
+
return openapi_version
|
|
1605
|
+
|
|
1545
1606
|
def get_openapi_json_schema(
|
|
1546
1607
|
self,
|
|
1547
1608
|
*,
|
|
@@ -1555,6 +1616,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1555
1616
|
terms_of_service: Optional[str] = None,
|
|
1556
1617
|
contact: Optional["Contact"] = None,
|
|
1557
1618
|
license_info: Optional["License"] = None,
|
|
1619
|
+
security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
|
|
1620
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1558
1621
|
) -> str:
|
|
1559
1622
|
"""
|
|
1560
1623
|
Returns the OpenAPI schema as a JSON serializable dict
|
|
@@ -1581,6 +1644,10 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1581
1644
|
The contact information for the exposed API.
|
|
1582
1645
|
license_info: License, optional
|
|
1583
1646
|
The license information for the exposed API.
|
|
1647
|
+
security_schemes: Dict[str, "SecurityScheme"]], optional
|
|
1648
|
+
A declaration of the security schemes available to be used in the specification.
|
|
1649
|
+
security: List[Dict[str, List[str]]], optional
|
|
1650
|
+
A declaration of which security mechanisms are applied globally across the API.
|
|
1584
1651
|
|
|
1585
1652
|
Returns
|
|
1586
1653
|
-------
|
|
@@ -1601,6 +1668,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1601
1668
|
terms_of_service=terms_of_service,
|
|
1602
1669
|
contact=contact,
|
|
1603
1670
|
license_info=license_info,
|
|
1671
|
+
security_schemes=security_schemes,
|
|
1672
|
+
security=security,
|
|
1604
1673
|
),
|
|
1605
1674
|
by_alias=True,
|
|
1606
1675
|
exclude_none=True,
|
|
@@ -1623,6 +1692,10 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1623
1692
|
license_info: Optional["License"] = None,
|
|
1624
1693
|
swagger_base_url: Optional[str] = None,
|
|
1625
1694
|
middlewares: Optional[List[Callable[..., Response]]] = None,
|
|
1695
|
+
compress: bool = False,
|
|
1696
|
+
security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
|
|
1697
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1698
|
+
oauth2_config: Optional["OAuth2Config"] = None,
|
|
1626
1699
|
):
|
|
1627
1700
|
"""
|
|
1628
1701
|
Returns the OpenAPI schema as a JSON serializable dict
|
|
@@ -1655,12 +1728,36 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1655
1728
|
The base url for the swagger UI. If not provided, we will serve a recent version of the Swagger UI.
|
|
1656
1729
|
middlewares: List[Callable[..., Response]], optional
|
|
1657
1730
|
List of middlewares to be used for the swagger route.
|
|
1731
|
+
compress: bool, default = False
|
|
1732
|
+
Whether or not to enable gzip compression swagger route.
|
|
1733
|
+
security_schemes: Dict[str, "SecurityScheme"], optional
|
|
1734
|
+
A declaration of the security schemes available to be used in the specification.
|
|
1735
|
+
security: List[Dict[str, List[str]]], optional
|
|
1736
|
+
A declaration of which security mechanisms are applied globally across the API.
|
|
1737
|
+
oauth2_config: OAuth2Config, optional
|
|
1738
|
+
The OAuth2 configuration for the Swagger UI.
|
|
1658
1739
|
"""
|
|
1659
1740
|
from aws_lambda_powertools.event_handler.openapi.compat import model_json
|
|
1660
1741
|
from aws_lambda_powertools.event_handler.openapi.models import Server
|
|
1742
|
+
from aws_lambda_powertools.event_handler.openapi.swagger_ui import (
|
|
1743
|
+
generate_oauth2_redirect_html,
|
|
1744
|
+
generate_swagger_html,
|
|
1745
|
+
)
|
|
1661
1746
|
|
|
1662
|
-
@self.get(path, middlewares=middlewares, include_in_schema=False)
|
|
1747
|
+
@self.get(path, middlewares=middlewares, include_in_schema=False, compress=compress)
|
|
1663
1748
|
def swagger_handler():
|
|
1749
|
+
query_params = self.current_event.query_string_parameters or {}
|
|
1750
|
+
|
|
1751
|
+
# Check for query parameters; if "format" is specified as "oauth2-redirect",
|
|
1752
|
+
# send the oauth2-redirect HTML stanza so OAuth2 can be used
|
|
1753
|
+
# Source: https://github.com/swagger-api/swagger-ui/blob/master/dist/oauth2-redirect.html
|
|
1754
|
+
if query_params.get("format") == "oauth2-redirect":
|
|
1755
|
+
return Response(
|
|
1756
|
+
status_code=200,
|
|
1757
|
+
content_type="text/html",
|
|
1758
|
+
body=generate_oauth2_redirect_html(),
|
|
1759
|
+
)
|
|
1760
|
+
|
|
1664
1761
|
base_path = self._get_base_path()
|
|
1665
1762
|
|
|
1666
1763
|
if swagger_base_url:
|
|
@@ -1686,6 +1783,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1686
1783
|
terms_of_service=terms_of_service,
|
|
1687
1784
|
contact=contact,
|
|
1688
1785
|
license_info=license_info,
|
|
1786
|
+
security_schemes=security_schemes,
|
|
1787
|
+
security=security,
|
|
1689
1788
|
)
|
|
1690
1789
|
|
|
1691
1790
|
# The .replace('</', '<\\/') part is necessary to prevent a potential issue where the JSON string contains
|
|
@@ -1701,7 +1800,6 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1701
1800
|
# Check for query parameters; if "format" is specified as "json",
|
|
1702
1801
|
# respond with the JSON used in the OpenAPI spec
|
|
1703
1802
|
# Example: https://www.example.com/swagger?format=json
|
|
1704
|
-
query_params = self.current_event.query_string_parameters or {}
|
|
1705
1803
|
if query_params.get("format") == "json":
|
|
1706
1804
|
return Response(
|
|
1707
1805
|
status_code=200,
|
|
@@ -1715,6 +1813,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1715
1813
|
swagger_js,
|
|
1716
1814
|
swagger_css,
|
|
1717
1815
|
swagger_base_url,
|
|
1816
|
+
oauth2_config,
|
|
1718
1817
|
)
|
|
1719
1818
|
|
|
1720
1819
|
return Response(
|
|
@@ -1737,6 +1836,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1737
1836
|
tags: Optional[List[str]] = None,
|
|
1738
1837
|
operation_id: Optional[str] = None,
|
|
1739
1838
|
include_in_schema: bool = True,
|
|
1839
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1740
1840
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
1741
1841
|
):
|
|
1742
1842
|
"""Route decorator includes parameter `method`"""
|
|
@@ -1763,6 +1863,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1763
1863
|
tags,
|
|
1764
1864
|
operation_id,
|
|
1765
1865
|
include_in_schema,
|
|
1866
|
+
security,
|
|
1766
1867
|
middlewares,
|
|
1767
1868
|
)
|
|
1768
1869
|
|
|
@@ -2130,6 +2231,9 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2130
2231
|
logger.debug("Appending Router middlewares into App middlewares.")
|
|
2131
2232
|
self._router_middlewares = self._router_middlewares + router._router_middlewares
|
|
2132
2233
|
|
|
2234
|
+
logger.debug("Appending Router exception_handler into App exception_handler.")
|
|
2235
|
+
self._exception_handlers.update(router._exception_handlers)
|
|
2236
|
+
|
|
2133
2237
|
# use pointer to allow context clearance after event is processed e.g., resolve(evt, ctx)
|
|
2134
2238
|
router.context = self.context
|
|
2135
2239
|
|
|
@@ -2195,6 +2299,7 @@ class Router(BaseRouter):
|
|
|
2195
2299
|
self._routes_with_middleware: Dict[tuple, List[Callable]] = {}
|
|
2196
2300
|
self.api_resolver: Optional[BaseRouter] = None
|
|
2197
2301
|
self.context = {} # early init as customers might add context before event resolution
|
|
2302
|
+
self._exception_handlers: Dict[Type, Callable] = {}
|
|
2198
2303
|
|
|
2199
2304
|
def route(
|
|
2200
2305
|
self,
|
|
@@ -2210,6 +2315,7 @@ class Router(BaseRouter):
|
|
|
2210
2315
|
tags: Optional[List[str]] = None,
|
|
2211
2316
|
operation_id: Optional[str] = None,
|
|
2212
2317
|
include_in_schema: bool = True,
|
|
2318
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
2213
2319
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
2214
2320
|
):
|
|
2215
2321
|
def register_route(func: Callable):
|
|
@@ -2231,6 +2337,7 @@ class Router(BaseRouter):
|
|
|
2231
2337
|
frozen_tags,
|
|
2232
2338
|
operation_id,
|
|
2233
2339
|
include_in_schema,
|
|
2340
|
+
security,
|
|
2234
2341
|
)
|
|
2235
2342
|
|
|
2236
2343
|
# Collate Middleware for routes
|
|
@@ -2249,6 +2356,17 @@ class Router(BaseRouter):
|
|
|
2249
2356
|
|
|
2250
2357
|
return register_route
|
|
2251
2358
|
|
|
2359
|
+
def exception_handler(self, exc_class: Union[Type[Exception], List[Type[Exception]]]):
|
|
2360
|
+
def register_exception_handler(func: Callable):
|
|
2361
|
+
if isinstance(exc_class, list):
|
|
2362
|
+
for exp in exc_class:
|
|
2363
|
+
self._exception_handlers[exp] = func
|
|
2364
|
+
else:
|
|
2365
|
+
self._exception_handlers[exc_class] = func
|
|
2366
|
+
return func
|
|
2367
|
+
|
|
2368
|
+
return register_exception_handler
|
|
2369
|
+
|
|
2252
2370
|
|
|
2253
2371
|
class APIGatewayRestResolver(ApiGatewayResolver):
|
|
2254
2372
|
current_event: APIGatewayProxyEvent
|
|
@@ -2299,6 +2417,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
|
|
|
2299
2417
|
tags: Optional[List[str]] = None,
|
|
2300
2418
|
operation_id: Optional[str] = None,
|
|
2301
2419
|
include_in_schema: bool = True,
|
|
2420
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
2302
2421
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
2303
2422
|
):
|
|
2304
2423
|
# NOTE: see #1552 for more context.
|
|
@@ -2315,6 +2434,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
|
|
|
2315
2434
|
tags,
|
|
2316
2435
|
operation_id,
|
|
2317
2436
|
include_in_schema,
|
|
2437
|
+
security,
|
|
2318
2438
|
middlewares,
|
|
2319
2439
|
)
|
|
2320
2440
|
|
|
@@ -102,6 +102,8 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
102
102
|
include_in_schema: bool = True,
|
|
103
103
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
104
104
|
) -> Callable[[Callable[..., Any]], Callable[..., Any]]:
|
|
105
|
+
security = None
|
|
106
|
+
|
|
105
107
|
return super(BedrockAgentResolver, self).get(
|
|
106
108
|
rule,
|
|
107
109
|
cors,
|
|
@@ -114,6 +116,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
114
116
|
tags,
|
|
115
117
|
operation_id,
|
|
116
118
|
include_in_schema,
|
|
119
|
+
security,
|
|
117
120
|
middlewares,
|
|
118
121
|
)
|
|
119
122
|
|
|
@@ -134,6 +137,8 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
134
137
|
include_in_schema: bool = True,
|
|
135
138
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
136
139
|
):
|
|
140
|
+
security = None
|
|
141
|
+
|
|
137
142
|
return super().post(
|
|
138
143
|
rule,
|
|
139
144
|
cors,
|
|
@@ -146,6 +151,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
146
151
|
tags,
|
|
147
152
|
operation_id,
|
|
148
153
|
include_in_schema,
|
|
154
|
+
security,
|
|
149
155
|
middlewares,
|
|
150
156
|
)
|
|
151
157
|
|
|
@@ -166,6 +172,8 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
166
172
|
include_in_schema: bool = True,
|
|
167
173
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
168
174
|
):
|
|
175
|
+
security = None
|
|
176
|
+
|
|
169
177
|
return super().put(
|
|
170
178
|
rule,
|
|
171
179
|
cors,
|
|
@@ -178,6 +186,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
178
186
|
tags,
|
|
179
187
|
operation_id,
|
|
180
188
|
include_in_schema,
|
|
189
|
+
security,
|
|
181
190
|
middlewares,
|
|
182
191
|
)
|
|
183
192
|
|
|
@@ -198,6 +207,8 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
198
207
|
include_in_schema: bool = True,
|
|
199
208
|
middlewares: Optional[List[Callable]] = None,
|
|
200
209
|
):
|
|
210
|
+
security = None
|
|
211
|
+
|
|
201
212
|
return super().patch(
|
|
202
213
|
rule,
|
|
203
214
|
cors,
|
|
@@ -210,6 +221,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
210
221
|
tags,
|
|
211
222
|
operation_id,
|
|
212
223
|
include_in_schema,
|
|
224
|
+
security,
|
|
213
225
|
middlewares,
|
|
214
226
|
)
|
|
215
227
|
|
|
@@ -230,6 +242,8 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
230
242
|
include_in_schema: bool = True,
|
|
231
243
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
232
244
|
):
|
|
245
|
+
security = None
|
|
246
|
+
|
|
233
247
|
return super().delete(
|
|
234
248
|
rule,
|
|
235
249
|
cors,
|
|
@@ -242,6 +256,7 @@ class BedrockAgentResolver(ApiGatewayResolver):
|
|
|
242
256
|
tags,
|
|
243
257
|
operation_id,
|
|
244
258
|
include_in_schema,
|
|
259
|
+
security,
|
|
245
260
|
middlewares,
|
|
246
261
|
)
|
|
247
262
|
|
|
@@ -441,12 +441,13 @@ class SecurityBase(BaseModel):
|
|
|
441
441
|
description: Optional[str] = None
|
|
442
442
|
|
|
443
443
|
if PYDANTIC_V2:
|
|
444
|
-
model_config = {"extra": "allow"}
|
|
444
|
+
model_config = {"extra": "allow", "populate_by_name": True}
|
|
445
445
|
|
|
446
446
|
else:
|
|
447
447
|
|
|
448
448
|
class Config:
|
|
449
449
|
extra = "allow"
|
|
450
|
+
allow_population_by_field_name = True
|
|
450
451
|
|
|
451
452
|
|
|
452
453
|
class APIKeyIn(Enum):
|
aws_lambda_powertools-2.37.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from aws_lambda_powertools.event_handler.openapi.swagger_ui.html import (
|
|
2
|
+
generate_swagger_html,
|
|
3
|
+
)
|
|
4
|
+
from aws_lambda_powertools.event_handler.openapi.swagger_ui.oauth2 import (
|
|
5
|
+
OAuth2Config,
|
|
6
|
+
generate_oauth2_redirect_html,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"generate_swagger_html",
|
|
11
|
+
"generate_oauth2_redirect_html",
|
|
12
|
+
"OAuth2Config",
|
|
13
|
+
]
|