aws-lambda-powertools 2.36.0__tar.gz → 2.38.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.36.0 → aws_lambda_powertools-2.38.0}/PKG-INFO +2 -2
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/THIRD-PARTY-LICENSES +24 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/api_gateway.py +187 -25
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/bedrock_agent.py +15 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +1 -1
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/compat.py +1 -1
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/models.py +2 -1
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +1 -1
- aws_lambda_powertools-2.38.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +13 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +37 -6
- aws_lambda_powertools-2.38.0/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +158 -0
- aws_lambda_powertools-2.38.0/aws_lambda_powertools/logging/constants.py +5 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/exceptions.py +4 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/formatter.py +6 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/logger.py +37 -10
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/utils.py +16 -4
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/constants.py +2 -1
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/version.py +1 -1
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/batch/types.py +2 -2
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +1 -1
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +1 -1
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +15 -4
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +46 -45
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +18 -2
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +1 -1
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/common.py +10 -4
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +18 -2
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +7 -7
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +18 -2
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +38 -4
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +7 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +11 -5
- aws_lambda_powertools-2.38.0/aws_lambda_powertools/utilities/data_masking/__init__.py +5 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_masking/base.py +0 -4
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/__init__.py +4 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/base.py +12 -2
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/config.py +5 -0
- aws_lambda_powertools-2.38.0/aws_lambda_powertools/utilities/idempotency/hook.py +13 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/compat.py +2 -2
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/s3.py +1 -1
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/sqs.py +1 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/parser.py +10 -9
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/pyproject.toml +25 -24
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/setup.py +2 -2
- aws_lambda_powertools-2.36.0/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -11
- aws_lambda_powertools-2.36.0/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/LICENSE +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/README.md +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/router.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/types.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/util.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/filters.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/logging/types.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/functions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/metric.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/metrics.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/base.py +0 -0
- {aws_lambda_powertools-2.36.0/aws_lambda_powertools/event_handler/openapi/swagger_ui → aws_lambda_powertools-2.38.0/aws_lambda_powertools/metrics/provider/cloudwatch_emf}/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/metrics/types.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/package_logger.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/py.typed +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/cookies.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/functions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/types.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/shared/user_agent.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/tracing/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/tracing/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/tracing/extensions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/tracing/tracer.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0/aws_lambda_powertools/metrics/provider/cloudwatch_emf → aws_lambda_powertools-2.38.0/aws_lambda_powertools/utilities/data_classes/appsync}/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
- {aws_lambda_powertools-2.36.0/aws_lambda_powertools/utilities/data_classes/appsync → aws_lambda_powertools-2.38.0/aws_lambda_powertools/utilities/idempotency/persistence}/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
- {aws_lambda_powertools-2.36.0/aws_lambda_powertools/utilities/idempotency/persistence → aws_lambda_powertools-2.38.0/aws_lambda_powertools/utilities/idempotency/serialization}/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/pydantic.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/serialization.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
- {aws_lambda_powertools-2.36.0 → aws_lambda_powertools-2.38.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.38.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
|
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
** FastAPI - https://github.com/tiangolo/fastapi/ - Used in the OpenAPI feature
|
|
2
|
+
|
|
3
|
+
The MIT License (MIT)
|
|
4
|
+
|
|
5
|
+
Copyright (c) 2018 Sebastián Ramírez
|
|
6
|
+
|
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
in the Software without restriction, including without limitation the rights
|
|
10
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
furnished to do so, subject to the following conditions:
|
|
13
|
+
|
|
14
|
+
The above copyright notice and this permission notice shall be included in
|
|
15
|
+
all copies or substantial portions of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
+
THE SOFTWARE.
|
|
24
|
+
|
|
1
25
|
** Tensorflow - https://github.com/tensorflow/tensorflow/
|
|
2
26
|
|
|
3
27
|
Apache License
|
|
@@ -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}
|
|
@@ -885,6 +896,7 @@ class BaseRouter(ABC):
|
|
|
885
896
|
tags: Optional[List[str]] = None,
|
|
886
897
|
operation_id: Optional[str] = None,
|
|
887
898
|
include_in_schema: bool = True,
|
|
899
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
888
900
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
889
901
|
):
|
|
890
902
|
raise NotImplementedError()
|
|
@@ -943,6 +955,7 @@ class BaseRouter(ABC):
|
|
|
943
955
|
tags: Optional[List[str]] = None,
|
|
944
956
|
operation_id: Optional[str] = None,
|
|
945
957
|
include_in_schema: bool = True,
|
|
958
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
946
959
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
947
960
|
):
|
|
948
961
|
"""Get route decorator with GET `method`
|
|
@@ -980,6 +993,7 @@ class BaseRouter(ABC):
|
|
|
980
993
|
tags,
|
|
981
994
|
operation_id,
|
|
982
995
|
include_in_schema,
|
|
996
|
+
security,
|
|
983
997
|
middlewares,
|
|
984
998
|
)
|
|
985
999
|
|
|
@@ -996,6 +1010,7 @@ class BaseRouter(ABC):
|
|
|
996
1010
|
tags: Optional[List[str]] = None,
|
|
997
1011
|
operation_id: Optional[str] = None,
|
|
998
1012
|
include_in_schema: bool = True,
|
|
1013
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
999
1014
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
1000
1015
|
):
|
|
1001
1016
|
"""Post route decorator with POST `method`
|
|
@@ -1034,6 +1049,7 @@ class BaseRouter(ABC):
|
|
|
1034
1049
|
tags,
|
|
1035
1050
|
operation_id,
|
|
1036
1051
|
include_in_schema,
|
|
1052
|
+
security,
|
|
1037
1053
|
middlewares,
|
|
1038
1054
|
)
|
|
1039
1055
|
|
|
@@ -1050,6 +1066,7 @@ class BaseRouter(ABC):
|
|
|
1050
1066
|
tags: Optional[List[str]] = None,
|
|
1051
1067
|
operation_id: Optional[str] = None,
|
|
1052
1068
|
include_in_schema: bool = True,
|
|
1069
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1053
1070
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
1054
1071
|
):
|
|
1055
1072
|
"""Put route decorator with PUT `method`
|
|
@@ -1088,6 +1105,7 @@ class BaseRouter(ABC):
|
|
|
1088
1105
|
tags,
|
|
1089
1106
|
operation_id,
|
|
1090
1107
|
include_in_schema,
|
|
1108
|
+
security,
|
|
1091
1109
|
middlewares,
|
|
1092
1110
|
)
|
|
1093
1111
|
|
|
@@ -1104,6 +1122,7 @@ class BaseRouter(ABC):
|
|
|
1104
1122
|
tags: Optional[List[str]] = None,
|
|
1105
1123
|
operation_id: Optional[str] = None,
|
|
1106
1124
|
include_in_schema: bool = True,
|
|
1125
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1107
1126
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
1108
1127
|
):
|
|
1109
1128
|
"""Delete route decorator with DELETE `method`
|
|
@@ -1141,6 +1160,7 @@ class BaseRouter(ABC):
|
|
|
1141
1160
|
tags,
|
|
1142
1161
|
operation_id,
|
|
1143
1162
|
include_in_schema,
|
|
1163
|
+
security,
|
|
1144
1164
|
middlewares,
|
|
1145
1165
|
)
|
|
1146
1166
|
|
|
@@ -1157,6 +1177,7 @@ class BaseRouter(ABC):
|
|
|
1157
1177
|
tags: Optional[List[str]] = None,
|
|
1158
1178
|
operation_id: Optional[str] = None,
|
|
1159
1179
|
include_in_schema: bool = True,
|
|
1180
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1160
1181
|
middlewares: Optional[List[Callable]] = None,
|
|
1161
1182
|
):
|
|
1162
1183
|
"""Patch route decorator with PATCH `method`
|
|
@@ -1197,6 +1218,64 @@ class BaseRouter(ABC):
|
|
|
1197
1218
|
tags,
|
|
1198
1219
|
operation_id,
|
|
1199
1220
|
include_in_schema,
|
|
1221
|
+
security,
|
|
1222
|
+
middlewares,
|
|
1223
|
+
)
|
|
1224
|
+
|
|
1225
|
+
def head(
|
|
1226
|
+
self,
|
|
1227
|
+
rule: str,
|
|
1228
|
+
cors: Optional[bool] = None,
|
|
1229
|
+
compress: bool = False,
|
|
1230
|
+
cache_control: Optional[str] = None,
|
|
1231
|
+
summary: Optional[str] = None,
|
|
1232
|
+
description: Optional[str] = None,
|
|
1233
|
+
responses: Optional[Dict[int, OpenAPIResponse]] = None,
|
|
1234
|
+
response_description: str = _DEFAULT_OPENAPI_RESPONSE_DESCRIPTION,
|
|
1235
|
+
tags: Optional[List[str]] = None,
|
|
1236
|
+
operation_id: Optional[str] = None,
|
|
1237
|
+
include_in_schema: bool = True,
|
|
1238
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1239
|
+
middlewares: Optional[List[Callable]] = None,
|
|
1240
|
+
):
|
|
1241
|
+
"""Head route decorator with HEAD `method`
|
|
1242
|
+
|
|
1243
|
+
Examples
|
|
1244
|
+
--------
|
|
1245
|
+
Simple example with a custom lambda handler using the Tracer capture_lambda_handler decorator
|
|
1246
|
+
|
|
1247
|
+
```python
|
|
1248
|
+
from aws_lambda_powertools import Tracer
|
|
1249
|
+
from aws_lambda_powertools.event_handler import APIGatewayRestResolver, Response, content_types
|
|
1250
|
+
|
|
1251
|
+
tracer = Tracer()
|
|
1252
|
+
app = APIGatewayRestResolver()
|
|
1253
|
+
|
|
1254
|
+
@app.head("/head-call")
|
|
1255
|
+
def simple_head():
|
|
1256
|
+
return Response(status_code=200,
|
|
1257
|
+
content_type=content_types.APPLICATION_JSON,
|
|
1258
|
+
headers={"Content-Length": "123"})
|
|
1259
|
+
|
|
1260
|
+
@tracer.capture_lambda_handler
|
|
1261
|
+
def lambda_handler(event, context):
|
|
1262
|
+
return app.resolve(event, context)
|
|
1263
|
+
```
|
|
1264
|
+
"""
|
|
1265
|
+
return self.route(
|
|
1266
|
+
rule,
|
|
1267
|
+
"HEAD",
|
|
1268
|
+
cors,
|
|
1269
|
+
compress,
|
|
1270
|
+
cache_control,
|
|
1271
|
+
summary,
|
|
1272
|
+
description,
|
|
1273
|
+
responses,
|
|
1274
|
+
response_description,
|
|
1275
|
+
tags,
|
|
1276
|
+
operation_id,
|
|
1277
|
+
include_in_schema,
|
|
1278
|
+
security,
|
|
1200
1279
|
middlewares,
|
|
1201
1280
|
)
|
|
1202
1281
|
|
|
@@ -1419,6 +1498,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1419
1498
|
terms_of_service: Optional[str] = None,
|
|
1420
1499
|
contact: Optional["Contact"] = None,
|
|
1421
1500
|
license_info: Optional["License"] = None,
|
|
1501
|
+
security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
|
|
1502
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1422
1503
|
) -> "OpenAPI":
|
|
1423
1504
|
"""
|
|
1424
1505
|
Returns the OpenAPI schema as a pydantic model.
|
|
@@ -1445,6 +1526,10 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1445
1526
|
The contact information for the exposed API.
|
|
1446
1527
|
license_info: License, optional
|
|
1447
1528
|
The license information for the exposed API.
|
|
1529
|
+
security_schemes: Dict[str, "SecurityScheme"]], optional
|
|
1530
|
+
A declaration of the security schemes available to be used in the specification.
|
|
1531
|
+
security: List[Dict[str, List[str]]], optional
|
|
1532
|
+
A declaration of which security mechanisms are applied globally across the API.
|
|
1448
1533
|
|
|
1449
1534
|
Returns
|
|
1450
1535
|
-------
|
|
@@ -1457,25 +1542,12 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1457
1542
|
get_compat_model_name_map,
|
|
1458
1543
|
get_definitions,
|
|
1459
1544
|
)
|
|
1460
|
-
from aws_lambda_powertools.event_handler.openapi.models import OpenAPI, PathItem,
|
|
1461
|
-
from aws_lambda_powertools.event_handler.openapi.pydantic_loader import PYDANTIC_V2
|
|
1545
|
+
from aws_lambda_powertools.event_handler.openapi.models import OpenAPI, PathItem, Tag
|
|
1462
1546
|
from aws_lambda_powertools.event_handler.openapi.types import (
|
|
1463
1547
|
COMPONENT_REF_TEMPLATE,
|
|
1464
1548
|
)
|
|
1465
1549
|
|
|
1466
|
-
|
|
1467
|
-
if PYDANTIC_V2 and not openapi_version.startswith("3.1"):
|
|
1468
|
-
warnings.warn(
|
|
1469
|
-
"You are using Pydantic v2, which is incompatible with OpenAPI schema 3.0. Forcing OpenAPI 3.1",
|
|
1470
|
-
stacklevel=2,
|
|
1471
|
-
)
|
|
1472
|
-
openapi_version = "3.1.0"
|
|
1473
|
-
elif not PYDANTIC_V2 and not openapi_version.startswith("3.0"):
|
|
1474
|
-
warnings.warn(
|
|
1475
|
-
"You are using Pydantic v1, which is incompatible with OpenAPI schema 3.1. Forcing OpenAPI 3.0",
|
|
1476
|
-
stacklevel=2,
|
|
1477
|
-
)
|
|
1478
|
-
openapi_version = "3.0.3"
|
|
1550
|
+
openapi_version = self._determine_openapi_version(openapi_version)
|
|
1479
1551
|
|
|
1480
1552
|
# Start with the bare minimum required for a valid OpenAPI schema
|
|
1481
1553
|
info: Dict[str, Any] = {"title": title, "version": version}
|
|
@@ -1490,13 +1562,12 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1490
1562
|
|
|
1491
1563
|
info.update({field: value for field, value in optional_fields.items() if value})
|
|
1492
1564
|
|
|
1493
|
-
output: Dict[str, Any] = {
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
output["servers"] = [Server(url="/")]
|
|
1565
|
+
output: Dict[str, Any] = {
|
|
1566
|
+
"openapi": openapi_version,
|
|
1567
|
+
"info": info,
|
|
1568
|
+
"servers": self._get_openapi_servers(servers),
|
|
1569
|
+
"security": self._get_openapi_security(security, security_schemes),
|
|
1570
|
+
}
|
|
1500
1571
|
|
|
1501
1572
|
components: Dict[str, Dict[str, Any]] = {}
|
|
1502
1573
|
paths: Dict[str, Dict[str, Any]] = {}
|
|
@@ -1534,6 +1605,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1534
1605
|
|
|
1535
1606
|
if definitions:
|
|
1536
1607
|
components["schemas"] = {k: definitions[k] for k in sorted(definitions)}
|
|
1608
|
+
if security_schemes:
|
|
1609
|
+
components["securitySchemes"] = security_schemes
|
|
1537
1610
|
if components:
|
|
1538
1611
|
output["components"] = components
|
|
1539
1612
|
if tags:
|
|
@@ -1543,6 +1616,50 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1543
1616
|
|
|
1544
1617
|
return OpenAPI(**output)
|
|
1545
1618
|
|
|
1619
|
+
@staticmethod
|
|
1620
|
+
def _get_openapi_servers(servers: Optional[List["Server"]]) -> List["Server"]:
|
|
1621
|
+
from aws_lambda_powertools.event_handler.openapi.models import Server
|
|
1622
|
+
|
|
1623
|
+
# If the 'servers' property is not provided or is an empty array,
|
|
1624
|
+
# the default behavior is to return a Server Object with a URL value of "/".
|
|
1625
|
+
return servers if servers else [Server(url="/")]
|
|
1626
|
+
|
|
1627
|
+
@staticmethod
|
|
1628
|
+
def _get_openapi_security(
|
|
1629
|
+
security: Optional[List[Dict[str, List[str]]]],
|
|
1630
|
+
security_schemes: Optional[Dict[str, "SecurityScheme"]],
|
|
1631
|
+
) -> Optional[List[Dict[str, List[str]]]]:
|
|
1632
|
+
if not security:
|
|
1633
|
+
return None
|
|
1634
|
+
|
|
1635
|
+
if not security_schemes:
|
|
1636
|
+
raise ValueError("security_schemes must be provided if security is provided")
|
|
1637
|
+
|
|
1638
|
+
# Check if all keys in security are present in the security_schemes
|
|
1639
|
+
if any(key not in security_schemes for sec in security for key in sec):
|
|
1640
|
+
raise ValueError("Some security schemes not found in security_schemes")
|
|
1641
|
+
|
|
1642
|
+
return security
|
|
1643
|
+
|
|
1644
|
+
@staticmethod
|
|
1645
|
+
def _determine_openapi_version(openapi_version):
|
|
1646
|
+
from aws_lambda_powertools.event_handler.openapi.pydantic_loader import PYDANTIC_V2
|
|
1647
|
+
|
|
1648
|
+
# Pydantic V2 has no support for OpenAPI schema 3.0
|
|
1649
|
+
if PYDANTIC_V2 and not openapi_version.startswith("3.1"): # pragma: no cover
|
|
1650
|
+
warnings.warn(
|
|
1651
|
+
"You are using Pydantic v2, which is incompatible with OpenAPI schema 3.0. Forcing OpenAPI 3.1",
|
|
1652
|
+
stacklevel=2,
|
|
1653
|
+
)
|
|
1654
|
+
openapi_version = "3.1.0"
|
|
1655
|
+
elif not PYDANTIC_V2 and not openapi_version.startswith("3.0"): # pragma: no cover
|
|
1656
|
+
warnings.warn(
|
|
1657
|
+
"You are using Pydantic v1, which is incompatible with OpenAPI schema 3.1. Forcing OpenAPI 3.0",
|
|
1658
|
+
stacklevel=2,
|
|
1659
|
+
)
|
|
1660
|
+
openapi_version = "3.0.3"
|
|
1661
|
+
return openapi_version
|
|
1662
|
+
|
|
1546
1663
|
def get_openapi_json_schema(
|
|
1547
1664
|
self,
|
|
1548
1665
|
*,
|
|
@@ -1556,6 +1673,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1556
1673
|
terms_of_service: Optional[str] = None,
|
|
1557
1674
|
contact: Optional["Contact"] = None,
|
|
1558
1675
|
license_info: Optional["License"] = None,
|
|
1676
|
+
security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
|
|
1677
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1559
1678
|
) -> str:
|
|
1560
1679
|
"""
|
|
1561
1680
|
Returns the OpenAPI schema as a JSON serializable dict
|
|
@@ -1582,6 +1701,10 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1582
1701
|
The contact information for the exposed API.
|
|
1583
1702
|
license_info: License, optional
|
|
1584
1703
|
The license information for the exposed API.
|
|
1704
|
+
security_schemes: Dict[str, "SecurityScheme"]], optional
|
|
1705
|
+
A declaration of the security schemes available to be used in the specification.
|
|
1706
|
+
security: List[Dict[str, List[str]]], optional
|
|
1707
|
+
A declaration of which security mechanisms are applied globally across the API.
|
|
1585
1708
|
|
|
1586
1709
|
Returns
|
|
1587
1710
|
-------
|
|
@@ -1602,6 +1725,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1602
1725
|
terms_of_service=terms_of_service,
|
|
1603
1726
|
contact=contact,
|
|
1604
1727
|
license_info=license_info,
|
|
1728
|
+
security_schemes=security_schemes,
|
|
1729
|
+
security=security,
|
|
1605
1730
|
),
|
|
1606
1731
|
by_alias=True,
|
|
1607
1732
|
exclude_none=True,
|
|
@@ -1625,6 +1750,10 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1625
1750
|
swagger_base_url: Optional[str] = None,
|
|
1626
1751
|
middlewares: Optional[List[Callable[..., Response]]] = None,
|
|
1627
1752
|
compress: bool = False,
|
|
1753
|
+
security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
|
|
1754
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1755
|
+
oauth2_config: Optional["OAuth2Config"] = None,
|
|
1756
|
+
persist_authorization: bool = False,
|
|
1628
1757
|
):
|
|
1629
1758
|
"""
|
|
1630
1759
|
Returns the OpenAPI schema as a JSON serializable dict
|
|
@@ -1659,12 +1788,36 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1659
1788
|
List of middlewares to be used for the swagger route.
|
|
1660
1789
|
compress: bool, default = False
|
|
1661
1790
|
Whether or not to enable gzip compression swagger route.
|
|
1791
|
+
security_schemes: Dict[str, "SecurityScheme"], optional
|
|
1792
|
+
A declaration of the security schemes available to be used in the specification.
|
|
1793
|
+
security: List[Dict[str, List[str]]], optional
|
|
1794
|
+
A declaration of which security mechanisms are applied globally across the API.
|
|
1795
|
+
oauth2_config: OAuth2Config, optional
|
|
1796
|
+
The OAuth2 configuration for the Swagger UI.
|
|
1797
|
+
persist_authorization: bool, optional
|
|
1798
|
+
Whether to persist authorization data on browser close/refresh.
|
|
1662
1799
|
"""
|
|
1663
1800
|
from aws_lambda_powertools.event_handler.openapi.compat import model_json
|
|
1664
1801
|
from aws_lambda_powertools.event_handler.openapi.models import Server
|
|
1802
|
+
from aws_lambda_powertools.event_handler.openapi.swagger_ui import (
|
|
1803
|
+
generate_oauth2_redirect_html,
|
|
1804
|
+
generate_swagger_html,
|
|
1805
|
+
)
|
|
1665
1806
|
|
|
1666
1807
|
@self.get(path, middlewares=middlewares, include_in_schema=False, compress=compress)
|
|
1667
1808
|
def swagger_handler():
|
|
1809
|
+
query_params = self.current_event.query_string_parameters or {}
|
|
1810
|
+
|
|
1811
|
+
# Check for query parameters; if "format" is specified as "oauth2-redirect",
|
|
1812
|
+
# send the oauth2-redirect HTML stanza so OAuth2 can be used
|
|
1813
|
+
# Source: https://github.com/swagger-api/swagger-ui/blob/master/dist/oauth2-redirect.html
|
|
1814
|
+
if query_params.get("format") == "oauth2-redirect":
|
|
1815
|
+
return Response(
|
|
1816
|
+
status_code=200,
|
|
1817
|
+
content_type="text/html",
|
|
1818
|
+
body=generate_oauth2_redirect_html(),
|
|
1819
|
+
)
|
|
1820
|
+
|
|
1668
1821
|
base_path = self._get_base_path()
|
|
1669
1822
|
|
|
1670
1823
|
if swagger_base_url:
|
|
@@ -1690,6 +1843,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1690
1843
|
terms_of_service=terms_of_service,
|
|
1691
1844
|
contact=contact,
|
|
1692
1845
|
license_info=license_info,
|
|
1846
|
+
security_schemes=security_schemes,
|
|
1847
|
+
security=security,
|
|
1693
1848
|
)
|
|
1694
1849
|
|
|
1695
1850
|
# The .replace('</', '<\\/') part is necessary to prevent a potential issue where the JSON string contains
|
|
@@ -1705,7 +1860,6 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1705
1860
|
# Check for query parameters; if "format" is specified as "json",
|
|
1706
1861
|
# respond with the JSON used in the OpenAPI spec
|
|
1707
1862
|
# Example: https://www.example.com/swagger?format=json
|
|
1708
|
-
query_params = self.current_event.query_string_parameters or {}
|
|
1709
1863
|
if query_params.get("format") == "json":
|
|
1710
1864
|
return Response(
|
|
1711
1865
|
status_code=200,
|
|
@@ -1719,6 +1873,8 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1719
1873
|
swagger_js,
|
|
1720
1874
|
swagger_css,
|
|
1721
1875
|
swagger_base_url,
|
|
1876
|
+
oauth2_config,
|
|
1877
|
+
persist_authorization,
|
|
1722
1878
|
)
|
|
1723
1879
|
|
|
1724
1880
|
return Response(
|
|
@@ -1741,6 +1897,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1741
1897
|
tags: Optional[List[str]] = None,
|
|
1742
1898
|
operation_id: Optional[str] = None,
|
|
1743
1899
|
include_in_schema: bool = True,
|
|
1900
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
1744
1901
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
1745
1902
|
):
|
|
1746
1903
|
"""Route decorator includes parameter `method`"""
|
|
@@ -1767,6 +1924,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
1767
1924
|
tags,
|
|
1768
1925
|
operation_id,
|
|
1769
1926
|
include_in_schema,
|
|
1927
|
+
security,
|
|
1770
1928
|
middlewares,
|
|
1771
1929
|
)
|
|
1772
1930
|
|
|
@@ -2038,7 +2196,7 @@ class ApiGatewayResolver(BaseRouter):
|
|
|
2038
2196
|
|
|
2039
2197
|
def exception_handler(self, exc_class: Union[Type[Exception], List[Type[Exception]]]):
|
|
2040
2198
|
def register_exception_handler(func: Callable):
|
|
2041
|
-
if isinstance(exc_class, list):
|
|
2199
|
+
if isinstance(exc_class, list): # pragma: no cover
|
|
2042
2200
|
for exp in exc_class:
|
|
2043
2201
|
self._exception_handlers[exp] = func
|
|
2044
2202
|
else:
|
|
@@ -2218,6 +2376,7 @@ class Router(BaseRouter):
|
|
|
2218
2376
|
tags: Optional[List[str]] = None,
|
|
2219
2377
|
operation_id: Optional[str] = None,
|
|
2220
2378
|
include_in_schema: bool = True,
|
|
2379
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
2221
2380
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
2222
2381
|
):
|
|
2223
2382
|
def register_route(func: Callable):
|
|
@@ -2239,6 +2398,7 @@ class Router(BaseRouter):
|
|
|
2239
2398
|
frozen_tags,
|
|
2240
2399
|
operation_id,
|
|
2241
2400
|
include_in_schema,
|
|
2401
|
+
security,
|
|
2242
2402
|
)
|
|
2243
2403
|
|
|
2244
2404
|
# Collate Middleware for routes
|
|
@@ -2318,6 +2478,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
|
|
|
2318
2478
|
tags: Optional[List[str]] = None,
|
|
2319
2479
|
operation_id: Optional[str] = None,
|
|
2320
2480
|
include_in_schema: bool = True,
|
|
2481
|
+
security: Optional[List[Dict[str, List[str]]]] = None,
|
|
2321
2482
|
middlewares: Optional[List[Callable[..., Any]]] = None,
|
|
2322
2483
|
):
|
|
2323
2484
|
# NOTE: see #1552 for more context.
|
|
@@ -2334,6 +2495,7 @@ class APIGatewayRestResolver(ApiGatewayResolver):
|
|
|
2334
2495
|
tags,
|
|
2335
2496
|
operation_id,
|
|
2336
2497
|
include_in_schema,
|
|
2498
|
+
security,
|
|
2337
2499
|
middlewares,
|
|
2338
2500
|
)
|
|
2339
2501
|
|
|
@@ -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
|
|
|
@@ -410,7 +410,7 @@ def _normalize_multi_query_string_with_param(
|
|
|
410
410
|
return resolved_query_string
|
|
411
411
|
|
|
412
412
|
|
|
413
|
-
def _normalize_multi_header_values_with_param(headers:
|
|
413
|
+
def _normalize_multi_header_values_with_param(headers: Dict[str, Any], params: Sequence[ModelField]):
|
|
414
414
|
"""
|
|
415
415
|
Extract and normalize resolved_headers_field
|
|
416
416
|
|
|
@@ -40,7 +40,7 @@ sequence_types = tuple(sequence_annotation_to_type.keys())
|
|
|
40
40
|
|
|
41
41
|
RequestErrorModel: Type[BaseModel] = create_model("Request")
|
|
42
42
|
|
|
43
|
-
if PYDANTIC_V2:
|
|
43
|
+
if PYDANTIC_V2: # pragma: no cover # false positive; dropping in v3
|
|
44
44
|
from pydantic import TypeAdapter, ValidationError
|
|
45
45
|
from pydantic._internal._typing_extra import eval_type_lenient
|
|
46
46
|
from pydantic.fields import FieldInfo
|
|
@@ -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.38.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
|
+
]
|