localstack-core 4.7.1.dev22__py3-none-any.whl → 4.7.1.dev24__py3-none-any.whl
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.
- localstack/aws/api/apigateway/__init__.py +87 -110
- localstack/aws/api/core.py +2 -3
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/logs/__init__.py +5 -8
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +7 -9
- localstack/aws/connect.py +40 -39
- localstack/aws/forwarder.py +5 -4
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +1 -2
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/logging.py +1 -2
- localstack/aws/handlers/metric_handler.py +3 -4
- localstack/aws/handlers/service.py +5 -5
- localstack/aws/mocking.py +15 -24
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +16 -17
- localstack/aws/protocol/serializer.py +37 -40
- localstack/aws/protocol/service_router.py +13 -13
- localstack/aws/protocol/validate.py +5 -5
- localstack/aws/scaffold.py +8 -9
- localstack/aws/serving/edge.py +5 -6
- localstack/aws/serving/hypercorn.py +2 -2
- localstack/aws/serving/twisted.py +1 -2
- localstack/aws/serving/werkzeug.py +2 -2
- localstack/aws/skeleton.py +7 -8
- localstack/aws/spec.py +29 -30
- localstack/cli/localstack.py +6 -6
- localstack/cli/lpm.py +2 -2
- localstack/config.py +14 -15
- localstack/deprecations.py +5 -5
- localstack/dev/run/__main__.py +4 -4
- localstack/dev/run/paths.py +5 -5
- localstack/dns/models.py +2 -1
- localstack/dns/server.py +3 -2
- localstack/http/dispatcher.py +1 -2
- localstack/http/response.py +2 -2
- localstack/http/router.py +1 -1
- localstack/http/trace.py +2 -1
- localstack/logging/format.py +3 -3
- localstack/packages/api.py +5 -5
- localstack/packages/core.py +3 -3
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +1 -2
- localstack/packages/terraform.py +1 -2
- localstack/runtime/init.py +6 -7
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +6 -6
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +20 -20
- localstack/services/apigateway/legacy/integration.py +7 -7
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +5 -5
- localstack/services/apigateway/models.py +16 -16
- localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
- localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
- localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +6 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +9 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
- localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
- localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
- localstack/services/cdk/resource_providers/cdk_metadata.py +2 -2
- localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
- localstack/services/cloudformation/cfn_utils.py +1 -1
- localstack/services/cloudformation/deployment_utils.py +2 -2
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +12 -12
- localstack/services/cloudformation/engine/parameters.py +3 -3
- localstack/services/cloudformation/engine/template_deployer.py +9 -10
- localstack/services/cloudformation/engine/transformers.py +5 -4
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +31 -9
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +6 -6
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +62 -80
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +15 -14
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +5 -5
- localstack/services/cloudformation/provider_utils.py +2 -2
- localstack/services/cloudformation/resource_provider.py +10 -9
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
- localstack/services/cloudformation/scaffolding/__main__.py +8 -7
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/stores.py +2 -3
- localstack/services/cloudformation/v2/entities.py +57 -36
- localstack/services/cloudformation/v2/provider.py +155 -29
- localstack/services/cloudwatch/alarm_scheduler.py +7 -7
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +12 -12
- localstack/services/cloudwatch/provider_v2.py +2 -4
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
- localstack/services/dynamodb/packages.py +1 -2
- localstack/services/dynamodb/provider.py +7 -8
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
- localstack/services/dynamodb/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +6 -7
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +4 -5
- localstack/services/ec2/provider.py +3 -3
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
- localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
- localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
- localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +13 -13
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
- localstack/services/ecr/resource_providers/aws_ecr_repository.py +17 -17
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +5 -5
- localstack/services/es/provider.py +19 -19
- localstack/services/events/archive.py +2 -2
- localstack/services/events/connection.py +5 -5
- localstack/services/events/event_bus.py +9 -9
- localstack/services/events/models.py +25 -25
- localstack/services/events/provider.py +12 -12
- localstack/services/events/replay.py +3 -3
- localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
- localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_connection.py +27 -27
- localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
- localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
- localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_rule.py +82 -82
- localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
- localstack/services/events/rule.py +15 -15
- localstack/services/events/target.py +5 -5
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +10 -10
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +11 -12
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +4 -4
- localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
- localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
- localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
- localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
- localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
- localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
- localstack/services/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +2 -3
- localstack/services/kinesis/packages.py +3 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
- localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
- localstack/services/kms/models.py +14 -17
- localstack/services/kms/provider.py +2 -3
- localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
- localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
- localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
- localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
- localstack/services/kms/utils.py +3 -2
- localstack/services/lambda_/api_utils.py +12 -12
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +1 -1
- localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
- localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
- localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
- localstack/services/lambda_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +5 -4
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +5 -5
- localstack/services/lambda_/invocation/internal_sqs_queue.py +1 -1
- localstack/services/lambda_/invocation/lambda_models.py +23 -23
- localstack/services/lambda_/invocation/lambda_service.py +4 -4
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/ldm.py +2 -3
- localstack/services/lambda_/packages.py +2 -3
- localstack/services/lambda_/provider.py +3 -3
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
- localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
- localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_url.py +14 -14
- localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
- localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
- localstack/services/lambda_/runtimes.py +1 -3
- localstack/services/logs/models.py +1 -3
- localstack/services/logs/provider.py +3 -3
- localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
- localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
- localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
- localstack/services/moto.py +3 -3
- localstack/services/opensearch/cluster.py +13 -13
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +1 -2
- localstack/services/opensearch/provider.py +7 -8
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
- localstack/services/opensearch/versions.py +1 -3
- localstack/services/plugins.py +26 -25
- localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
- localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
- localstack/services/route53/models.py +1 -3
- localstack/services/route53/provider.py +1 -2
- localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
- localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
- localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
- localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
- localstack/services/route53resolver/models.py +8 -10
- localstack/services/route53resolver/provider.py +12 -12
- localstack/services/s3/codec.py +2 -2
- localstack/services/s3/cors.py +4 -4
- localstack/services/s3/models.py +72 -72
- localstack/services/s3/notifications.py +19 -19
- localstack/services/s3/presigned_url.py +6 -5
- localstack/services/s3/provider.py +13 -14
- localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
- localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
- localstack/services/s3/storage/core.py +4 -3
- localstack/services/s3/storage/ephemeral.py +7 -6
- localstack/services/s3/utils.py +11 -11
- localstack/services/s3/validation.py +1 -1
- localstack/services/s3/website_hosting.py +5 -5
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
- localstack/services/secretsmanager/provider.py +9 -11
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
- localstack/services/ses/provider.py +8 -8
- localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
- localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
- localstack/services/sns/models.py +25 -25
- localstack/services/sns/provider.py +1 -2
- localstack/services/sns/publisher.py +6 -7
- localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
- localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
- localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
- localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
- localstack/services/sqs/models.py +21 -22
- localstack/services/sqs/provider.py +19 -18
- localstack/services/sqs/query_api.py +2 -3
- localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
- localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +4 -4
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
- localstack/services/sqs/utils.py +3 -3
- localstack/services/ssm/provider.py +2 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
- localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
- localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
- localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
- localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
- localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +2 -2
- localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
- localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
- localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +2 -2
- localstack/services/stepfunctions/asl/component/program/program.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state.py +10 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +1 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +6 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +10 -11
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +6 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +15 -15
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +5 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +2 -4
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
- localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
- localstack/services/stepfunctions/asl/eval/environment.py +15 -17
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +9 -9
- localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
- localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
- localstack/services/stepfunctions/asl/eval/states.py +11 -11
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +3 -3
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +5 -4
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +1 -2
- localstack/services/stepfunctions/asl/parse/preprocessor.py +30 -30
- localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
- localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
- localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
- localstack/services/stepfunctions/backend/activity.py +4 -4
- localstack/services/stepfunctions/backend/alias.py +6 -6
- localstack/services/stepfunctions/backend/execution.py +25 -27
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +26 -26
- localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
- localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
- localstack/services/stepfunctions/mocking/mock_config.py +5 -5
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/provider.py +27 -37
- localstack/services/stepfunctions/quotas.py +2 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
- localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
- localstack/services/stores.py +7 -7
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +2 -2
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +16 -15
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +13 -3
- localstack/testing/pytest/container.py +5 -4
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +11 -11
- localstack/testing/pytest/marking.py +6 -6
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/utils.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -3
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +2 -2
- localstack/testing/testselection/matching.py +2 -2
- localstack/testing/testselection/opt_out.py +1 -1
- localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
- localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
- localstack/testing/testselection/testselection.py +2 -2
- localstack/utils/analytics/cli.py +2 -3
- localstack/utils/analytics/client.py +5 -5
- localstack/utils/analytics/events.py +2 -2
- localstack/utils/analytics/metrics/registry.py +1 -1
- localstack/utils/analytics/publisher.py +4 -4
- localstack/utils/analytics/service_request_aggregator.py +3 -3
- localstack/utils/aws/arns.py +2 -2
- localstack/utils/aws/aws_responses.py +14 -21
- localstack/utils/aws/aws_stack.py +7 -11
- localstack/utils/aws/dead_letter_queue.py +3 -4
- localstack/utils/aws/message_forwarding.py +9 -11
- localstack/utils/aws/request_context.py +4 -4
- localstack/utils/aws/templating.py +3 -3
- localstack/utils/batch_policy.py +2 -2
- localstack/utils/bootstrap.py +19 -20
- localstack/utils/collections.py +16 -23
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +3 -3
- localstack/utils/container_utils/container_client.py +72 -75
- localstack/utils/container_utils/docker_cmd_client.py +33 -33
- localstack/utils/container_utils/docker_sdk_client.py +35 -35
- localstack/utils/crypto.py +2 -3
- localstack/utils/diagnose.py +11 -11
- localstack/utils/docker_utils.py +4 -4
- localstack/utils/files.py +1 -2
- localstack/utils/functions.py +2 -2
- localstack/utils/http.py +6 -6
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +1 -1
- localstack/utils/net.py +10 -9
- localstack/utils/objects.py +10 -10
- localstack/utils/patch.py +5 -5
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +7 -7
- localstack/utils/scheduler.py +3 -2
- localstack/utils/strings.py +2 -2
- localstack/utils/tagging.py +3 -3
- localstack/utils/testutil.py +9 -9
- localstack/utils/threads.py +2 -2
- localstack/utils/xml.py +1 -1
- localstack/version.py +2 -2
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/METADATA +1 -1
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/RECORD +544 -544
- localstack_core-4.7.1.dev24.dist-info/plux.json +1 -0
- localstack_core-4.7.1.dev22.dist-info/plux.json +0 -1
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/WHEEL +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import json
|
|
3
3
|
from enum import Enum
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any
|
|
5
5
|
|
|
6
6
|
from responses import Response
|
|
7
7
|
|
|
@@ -10,7 +10,7 @@ from localstack.utils.aws.aws_responses import parse_query_string
|
|
|
10
10
|
from localstack.utils.strings import short_uid, to_str
|
|
11
11
|
|
|
12
12
|
# type definition for data parameters (i.e., invocation payloads)
|
|
13
|
-
InvocationPayload =
|
|
13
|
+
InvocationPayload = dict | str | bytes
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class ApiGatewayVersion(Enum):
|
|
@@ -25,15 +25,15 @@ class ApiInvocationContext:
|
|
|
25
25
|
method: str
|
|
26
26
|
path: str
|
|
27
27
|
data: InvocationPayload
|
|
28
|
-
headers:
|
|
28
|
+
headers: dict[str, str]
|
|
29
29
|
|
|
30
30
|
# raw URI (including query string) retired from werkzeug "RAW_URI" environment variable
|
|
31
31
|
raw_uri: str
|
|
32
32
|
|
|
33
33
|
# invocation context
|
|
34
|
-
context:
|
|
34
|
+
context: dict[str, Any]
|
|
35
35
|
# authentication info for this invocation
|
|
36
|
-
auth_context:
|
|
36
|
+
auth_context: dict[str, Any]
|
|
37
37
|
|
|
38
38
|
# target API/resource details extracted from the invocation
|
|
39
39
|
apigw_version: ApiGatewayVersion
|
|
@@ -43,24 +43,24 @@ class ApiInvocationContext:
|
|
|
43
43
|
region_name: str
|
|
44
44
|
# resource path, including any path parameter placeholders (e.g., "/my/path/{id}")
|
|
45
45
|
resource_path: str
|
|
46
|
-
integration:
|
|
47
|
-
resource:
|
|
46
|
+
integration: dict
|
|
47
|
+
resource: dict
|
|
48
48
|
# Invocation path with query string, e.g., "/my/path?test". Defaults to "path", can be used
|
|
49
49
|
# to overwrite the actual API path, in case the path format "../_user_request_/.." is used.
|
|
50
50
|
_path_with_query_string: str
|
|
51
51
|
|
|
52
52
|
# response templates to be applied to the invocation result
|
|
53
|
-
response_templates:
|
|
53
|
+
response_templates: dict
|
|
54
54
|
|
|
55
|
-
route:
|
|
55
|
+
route: dict
|
|
56
56
|
connection_id: str
|
|
57
|
-
path_params:
|
|
57
|
+
path_params: dict
|
|
58
58
|
|
|
59
59
|
# response object
|
|
60
60
|
response: Response
|
|
61
61
|
|
|
62
62
|
# dict of stage variables (mapping names to values)
|
|
63
|
-
stage_variables:
|
|
63
|
+
stage_variables: dict[str, str]
|
|
64
64
|
|
|
65
65
|
# websockets route selection
|
|
66
66
|
ws_route: str
|
|
@@ -69,12 +69,12 @@ class ApiInvocationContext:
|
|
|
69
69
|
self,
|
|
70
70
|
method: str,
|
|
71
71
|
path: str,
|
|
72
|
-
data:
|
|
73
|
-
headers:
|
|
72
|
+
data: str | bytes,
|
|
73
|
+
headers: dict[str, str],
|
|
74
74
|
api_id: str = None,
|
|
75
75
|
stage: str = None,
|
|
76
|
-
context:
|
|
77
|
-
auth_context:
|
|
76
|
+
context: dict[str, Any] = None,
|
|
77
|
+
auth_context: dict[str, Any] = None,
|
|
78
78
|
):
|
|
79
79
|
self.method = method
|
|
80
80
|
self._path = path
|
|
@@ -109,7 +109,7 @@ class ApiInvocationContext:
|
|
|
109
109
|
self._path = new_path
|
|
110
110
|
|
|
111
111
|
@property
|
|
112
|
-
def resource_id(self) ->
|
|
112
|
+
def resource_id(self) -> str | None:
|
|
113
113
|
return (self.resource or {}).get("id")
|
|
114
114
|
|
|
115
115
|
@property
|
|
@@ -130,18 +130,18 @@ class ApiInvocationContext:
|
|
|
130
130
|
new_path = "/" + new_path.lstrip("/")
|
|
131
131
|
self._path_with_query_string = new_path
|
|
132
132
|
|
|
133
|
-
def query_params(self) ->
|
|
133
|
+
def query_params(self) -> dict[str, str]:
|
|
134
134
|
"""Extract the query parameters from the target URL or path in this request context."""
|
|
135
135
|
query_string = self.path_with_query_string.partition("?")[2]
|
|
136
136
|
return parse_query_string(query_string)
|
|
137
137
|
|
|
138
138
|
@property
|
|
139
|
-
def integration_uri(self) ->
|
|
139
|
+
def integration_uri(self) -> str | None:
|
|
140
140
|
integration = self.integration or {}
|
|
141
141
|
return integration.get("uri") or integration.get("integrationUri")
|
|
142
142
|
|
|
143
143
|
@property
|
|
144
|
-
def auth_identity(self) ->
|
|
144
|
+
def auth_identity(self) -> dict | None:
|
|
145
145
|
if isinstance(self.auth_context, dict):
|
|
146
146
|
if self.auth_context.get("identity") is None:
|
|
147
147
|
self.auth_context["identity"] = {}
|
|
@@ -153,7 +153,7 @@ class ApiInvocationContext:
|
|
|
153
153
|
return self.auth_context.get("authorizer_type") if self.auth_context else None
|
|
154
154
|
|
|
155
155
|
@property
|
|
156
|
-
def authorizer_result(self) ->
|
|
156
|
+
def authorizer_result(self) -> dict[str, Any]:
|
|
157
157
|
if isinstance(self.auth_context, dict):
|
|
158
158
|
return self.auth_context.get("authorizer") if self.auth_context else {}
|
|
159
159
|
|
|
@@ -165,7 +165,7 @@ class ApiInvocationContext:
|
|
|
165
165
|
"""Whether this is an API Gateway v1 request"""
|
|
166
166
|
return self.apigw_version == ApiGatewayVersion.V1
|
|
167
167
|
|
|
168
|
-
def cookies(self) ->
|
|
168
|
+
def cookies(self) -> list[str] | None:
|
|
169
169
|
if cookies := self.headers.get("cookie") or "":
|
|
170
170
|
return list(cookies.split(";"))
|
|
171
171
|
return None
|
|
@@ -3,8 +3,8 @@ import logging
|
|
|
3
3
|
import re
|
|
4
4
|
import time
|
|
5
5
|
from collections import defaultdict
|
|
6
|
-
from datetime import
|
|
7
|
-
from typing import Any,
|
|
6
|
+
from datetime import UTC, datetime
|
|
7
|
+
from typing import Any, TypedDict
|
|
8
8
|
from urllib import parse as urlparse
|
|
9
9
|
|
|
10
10
|
from botocore.utils import InvalidArnException
|
|
@@ -90,7 +90,7 @@ class RequestParametersResolver:
|
|
|
90
90
|
|
|
91
91
|
:return: IntegrationParameters
|
|
92
92
|
"""
|
|
93
|
-
method_request_params:
|
|
93
|
+
method_request_params: dict[str, Any] = self.method_request_dict(context)
|
|
94
94
|
|
|
95
95
|
# requestParameters: {
|
|
96
96
|
# "integration.request.path.pathParam": "method.request.header.Content-Type"
|
|
@@ -128,13 +128,13 @@ class RequestParametersResolver:
|
|
|
128
128
|
|
|
129
129
|
return result
|
|
130
130
|
|
|
131
|
-
def method_request_dict(self, context: ApiInvocationContext) ->
|
|
131
|
+
def method_request_dict(self, context: ApiInvocationContext) -> dict[str, Any]:
|
|
132
132
|
"""
|
|
133
133
|
Build a dict with all method request parameters and their values.
|
|
134
134
|
:return: dict with all method request parameters and their values,
|
|
135
135
|
and all keys in lowercase
|
|
136
136
|
"""
|
|
137
|
-
params:
|
|
137
|
+
params: dict[str, str] = {}
|
|
138
138
|
|
|
139
139
|
# TODO: add support for multi-values headers and multi-values querystring
|
|
140
140
|
|
|
@@ -183,7 +183,7 @@ class RequestParametersResolver:
|
|
|
183
183
|
|
|
184
184
|
|
|
185
185
|
class ResponseParametersResolver:
|
|
186
|
-
def resolve(self, context: ApiInvocationContext) ->
|
|
186
|
+
def resolve(self, context: ApiInvocationContext) -> dict[str, str]:
|
|
187
187
|
"""
|
|
188
188
|
Resolve integration response parameters into method response parameters.
|
|
189
189
|
Integration response parameters can map header, body,
|
|
@@ -191,7 +191,7 @@ class ResponseParametersResolver:
|
|
|
191
191
|
|
|
192
192
|
:return: dict with all method response parameters and their values
|
|
193
193
|
"""
|
|
194
|
-
integration_request_params:
|
|
194
|
+
integration_request_params: dict[str, Any] = self.integration_request_dict(context)
|
|
195
195
|
|
|
196
196
|
# "responseParameters" : {
|
|
197
197
|
# "method.response.header.Location" : "integration.response.body.redirect.url",
|
|
@@ -213,7 +213,7 @@ class ResponseParametersResolver:
|
|
|
213
213
|
method_parameters[k] = v.replace("'", "")
|
|
214
214
|
|
|
215
215
|
# build the integration parameters
|
|
216
|
-
result:
|
|
216
|
+
result: dict[str, str] = {}
|
|
217
217
|
for k, v in method_parameters.items():
|
|
218
218
|
# headers
|
|
219
219
|
if k.startswith("method.response.header."):
|
|
@@ -222,8 +222,8 @@ class ResponseParametersResolver:
|
|
|
222
222
|
|
|
223
223
|
return result
|
|
224
224
|
|
|
225
|
-
def integration_request_dict(self, context: ApiInvocationContext) ->
|
|
226
|
-
params:
|
|
225
|
+
def integration_request_dict(self, context: ApiInvocationContext) -> dict[str, Any]:
|
|
226
|
+
params: dict[str, str] = {}
|
|
227
227
|
|
|
228
228
|
for k, v in context.headers.items():
|
|
229
229
|
params[f"integration.request.header.{k}"] = v
|
|
@@ -293,7 +293,7 @@ def is_test_invoke_method(method, path):
|
|
|
293
293
|
return method == "POST" and bool(re.match(PATH_REGEX_TEST_INVOKE_API, path))
|
|
294
294
|
|
|
295
295
|
|
|
296
|
-
def get_stage_variables(context: ApiInvocationContext) ->
|
|
296
|
+
def get_stage_variables(context: ApiInvocationContext) -> dict[str, str] | None:
|
|
297
297
|
if is_test_invoke_method(context.method, context.path):
|
|
298
298
|
return None
|
|
299
299
|
|
|
@@ -316,7 +316,7 @@ def tokenize_path(path):
|
|
|
316
316
|
return path.lstrip("/").split("/")
|
|
317
317
|
|
|
318
318
|
|
|
319
|
-
def extract_path_params(path: str, extracted_path: str) ->
|
|
319
|
+
def extract_path_params(path: str, extracted_path: str) -> dict[str, str]:
|
|
320
320
|
tokenized_extracted_path = tokenize_path(extracted_path)
|
|
321
321
|
# Looks for '{' in the tokenized extracted path
|
|
322
322
|
path_params_list = [(i, v) for i, v in enumerate(tokenized_extracted_path) if "{" in v]
|
|
@@ -335,7 +335,7 @@ def extract_path_params(path: str, extracted_path: str) -> Dict[str, str]:
|
|
|
335
335
|
return path_params
|
|
336
336
|
|
|
337
337
|
|
|
338
|
-
def extract_query_string_params(path: str) ->
|
|
338
|
+
def extract_query_string_params(path: str) -> tuple[str, dict[str, str]]:
|
|
339
339
|
parsed_path = urlparse.urlparse(path)
|
|
340
340
|
if not path.startswith("//"):
|
|
341
341
|
path = parsed_path.path
|
|
@@ -411,8 +411,8 @@ def get_rest_api_paths(account_id: str, region_name: str, rest_api_id: str):
|
|
|
411
411
|
# -method-request.html
|
|
412
412
|
# https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-routes.html
|
|
413
413
|
def get_resource_for_path(
|
|
414
|
-
path: str, method: str, path_map:
|
|
415
|
-
) -> tuple[
|
|
414
|
+
path: str, method: str, path_map: dict[str, dict]
|
|
415
|
+
) -> tuple[str | None, dict | None]:
|
|
416
416
|
matches = []
|
|
417
417
|
# creates a regex from the input path if there are parameters, e.g /foo/{bar}/baz -> /foo/[
|
|
418
418
|
# ^\]+/baz, otherwise is a direct match.
|
|
@@ -528,7 +528,7 @@ def connect_api_gateway_to_sqs(gateway_name, stage_name, queue_arn, path, accoun
|
|
|
528
528
|
|
|
529
529
|
def get_target_resource_details(
|
|
530
530
|
invocation_context: ApiInvocationContext,
|
|
531
|
-
) ->
|
|
531
|
+
) -> tuple[str | None, dict | None]:
|
|
532
532
|
"""Look up and return the API GW resource (path pattern + resource dict) for the given invocation context."""
|
|
533
533
|
path_map = get_rest_api_paths(
|
|
534
534
|
account_id=invocation_context.account_id,
|
|
@@ -557,7 +557,7 @@ def get_target_resource_details(
|
|
|
557
557
|
return None, None
|
|
558
558
|
|
|
559
559
|
|
|
560
|
-
def get_target_resource_method(invocation_context: ApiInvocationContext) ->
|
|
560
|
+
def get_target_resource_method(invocation_context: ApiInvocationContext) -> dict | None:
|
|
561
561
|
"""Look up and return the API GW resource method for the given invocation context."""
|
|
562
562
|
_, resource = get_target_resource_details(invocation_context)
|
|
563
563
|
if not resource:
|
|
@@ -614,7 +614,7 @@ def get_event_request_context(invocation_context: ApiInvocationContext):
|
|
|
614
614
|
},
|
|
615
615
|
"httpMethod": method,
|
|
616
616
|
"protocol": "HTTP/1.1",
|
|
617
|
-
"requestTime": datetime.now(
|
|
617
|
+
"requestTime": datetime.now(UTC).strftime(REQUEST_TIME_DATE_FORMAT),
|
|
618
618
|
"requestTimeEpoch": int(time.time() * 1000),
|
|
619
619
|
"authorizer": {},
|
|
620
620
|
}
|
|
@@ -681,7 +681,7 @@ def set_api_id_stage_invocation_path(
|
|
|
681
681
|
return invocation_context
|
|
682
682
|
|
|
683
683
|
|
|
684
|
-
def get_api_account_id_and_region(api_id: str) ->
|
|
684
|
+
def get_api_account_id_and_region(api_id: str) -> tuple[str | None, str | None]:
|
|
685
685
|
"""Return the region name for the given REST API ID"""
|
|
686
686
|
for account_id, account in apigateway_backends.items():
|
|
687
687
|
for region_name, region in account.items():
|
|
@@ -698,7 +698,7 @@ def extract_api_id_from_hostname_in_url(hostname: str) -> str:
|
|
|
698
698
|
return match.group(1)
|
|
699
699
|
|
|
700
700
|
|
|
701
|
-
def multi_value_dict_for_list(elements:
|
|
701
|
+
def multi_value_dict_for_list(elements: list | dict) -> dict:
|
|
702
702
|
temp_mv_dict = defaultdict(list)
|
|
703
703
|
for key in elements:
|
|
704
704
|
if isinstance(key, (list, tuple)):
|
|
@@ -5,7 +5,7 @@ import re
|
|
|
5
5
|
from abc import ABC, abstractmethod
|
|
6
6
|
from functools import lru_cache
|
|
7
7
|
from http import HTTPMethod, HTTPStatus
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
9
9
|
from urllib.parse import urljoin
|
|
10
10
|
|
|
11
11
|
import requests
|
|
@@ -91,7 +91,7 @@ class BackendIntegration(ABC):
|
|
|
91
91
|
|
|
92
92
|
@classmethod
|
|
93
93
|
def apply_request_parameters(
|
|
94
|
-
cls, integration_params: IntegrationParameters, headers:
|
|
94
|
+
cls, integration_params: IntegrationParameters, headers: dict[str, Any]
|
|
95
95
|
):
|
|
96
96
|
for k, v in integration_params.get("headers").items():
|
|
97
97
|
headers.update({k: v})
|
|
@@ -569,7 +569,7 @@ class KinesisIntegration(BackendIntegration):
|
|
|
569
569
|
return invocation_context.response
|
|
570
570
|
|
|
571
571
|
@classmethod
|
|
572
|
-
def _validate_required_params(cls, request_parameters:
|
|
572
|
+
def _validate_required_params(cls, request_parameters: dict[str, Any]) -> None:
|
|
573
573
|
if not request_parameters:
|
|
574
574
|
raise BadRequestException("Missing required parameters")
|
|
575
575
|
# https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html#Kinesis-PutRecord
|
|
@@ -588,7 +588,7 @@ class KinesisIntegration(BackendIntegration):
|
|
|
588
588
|
|
|
589
589
|
def _create_request_parameters(
|
|
590
590
|
self, invocation_context: ApiInvocationContext
|
|
591
|
-
) ->
|
|
591
|
+
) -> dict[str, Any]:
|
|
592
592
|
request_parameters = invocation_context.integration.get("requestParameters", {})
|
|
593
593
|
self._validate_required_params(request_parameters)
|
|
594
594
|
|
|
@@ -756,7 +756,7 @@ class S3Integration(BackendIntegration):
|
|
|
756
756
|
|
|
757
757
|
class HTTPIntegration(BackendIntegration):
|
|
758
758
|
@staticmethod
|
|
759
|
-
def _set_http_apigw_headers(headers:
|
|
759
|
+
def _set_http_apigw_headers(headers: dict[str, Any], invocation_context: ApiInvocationContext):
|
|
760
760
|
del headers["host"]
|
|
761
761
|
headers["x-amzn-apigateway-api-id"] = invocation_context.api_id
|
|
762
762
|
return headers
|
|
@@ -902,7 +902,7 @@ class SNSIntegration(BackendIntegration):
|
|
|
902
902
|
|
|
903
903
|
class StepFunctionIntegration(BackendIntegration):
|
|
904
904
|
@classmethod
|
|
905
|
-
def _validate_required_params(cls, request_parameters:
|
|
905
|
+
def _validate_required_params(cls, request_parameters: dict[str, Any]) -> None:
|
|
906
906
|
if not request_parameters:
|
|
907
907
|
raise BadRequestException("Missing required parameters")
|
|
908
908
|
# stateMachineArn and input are required
|
|
@@ -1065,7 +1065,7 @@ class MockIntegration(BackendIntegration):
|
|
|
1065
1065
|
|
|
1066
1066
|
# TODO: remove once we migrate all usages to `apply_request_parameters` on BackendIntegration
|
|
1067
1067
|
def apply_request_parameters(
|
|
1068
|
-
uri: str, integration:
|
|
1068
|
+
uri: str, integration: dict[str, Any], path_params: dict[str, str], query_params: dict[str, str]
|
|
1069
1069
|
):
|
|
1070
1070
|
request_parameters = integration.get("requestParameters")
|
|
1071
1071
|
uri = uri or integration.get("uri") or integration.get("integrationUri") or ""
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from requests.models import Response as RequestsResponse
|
|
5
5
|
from werkzeug.datastructures import Headers
|
|
@@ -22,7 +22,7 @@ LOG = logging.getLogger(__name__)
|
|
|
22
22
|
# invocation context property decorators and use the url_params directly,
|
|
23
23
|
# something asked for a long time.
|
|
24
24
|
def to_invocation_context(
|
|
25
|
-
request: Request, url_params:
|
|
25
|
+
request: Request, url_params: dict[str, Any] = None
|
|
26
26
|
) -> ApiInvocationContext:
|
|
27
27
|
"""
|
|
28
28
|
Converts an HTTP Request object into an ApiInvocationContext.
|
|
@@ -3,7 +3,7 @@ import copy
|
|
|
3
3
|
import json
|
|
4
4
|
import logging
|
|
5
5
|
from enum import Enum
|
|
6
|
-
from typing import Any
|
|
6
|
+
from typing import Any
|
|
7
7
|
from urllib.parse import quote_plus, unquote_plus
|
|
8
8
|
|
|
9
9
|
import xmltodict
|
|
@@ -184,7 +184,7 @@ class VelocityInput:
|
|
|
184
184
|
class ApiGatewayVtlTemplate(VtlTemplate):
|
|
185
185
|
"""Util class for rendering VTL templates with API Gateway specific extensions"""
|
|
186
186
|
|
|
187
|
-
def prepare_namespace(self, variables, source: str = APIGW_SOURCE) ->
|
|
187
|
+
def prepare_namespace(self, variables, source: str = APIGW_SOURCE) -> dict[str, Any]:
|
|
188
188
|
namespace = super().prepare_namespace(variables, source)
|
|
189
189
|
if stage_var := variables.get("stage_variables") or {}:
|
|
190
190
|
namespace["stageVariables"] = stage_var
|
|
@@ -203,7 +203,7 @@ class Templates:
|
|
|
203
203
|
def __init__(self):
|
|
204
204
|
self.vtl = ApiGatewayVtlTemplate()
|
|
205
205
|
|
|
206
|
-
def render(self, api_context: ApiInvocationContext) ->
|
|
206
|
+
def render(self, api_context: ApiInvocationContext) -> bytes | str:
|
|
207
207
|
pass
|
|
208
208
|
|
|
209
209
|
def render_vtl(self, template, variables):
|
|
@@ -250,7 +250,7 @@ class RequestTemplates(Templates):
|
|
|
250
250
|
|
|
251
251
|
def render(
|
|
252
252
|
self, api_context: ApiInvocationContext, template_key: str = APPLICATION_JSON
|
|
253
|
-
) ->
|
|
253
|
+
) -> bytes | str:
|
|
254
254
|
LOG.debug(
|
|
255
255
|
"Method request body before transformations: %s", to_str(api_context.data_as_string())
|
|
256
256
|
)
|
|
@@ -278,7 +278,7 @@ class ResponseTemplates(Templates):
|
|
|
278
278
|
template is used.
|
|
279
279
|
"""
|
|
280
280
|
|
|
281
|
-
def render(self, api_context: ApiInvocationContext, **kwargs) ->
|
|
281
|
+
def render(self, api_context: ApiInvocationContext, **kwargs) -> bytes | str:
|
|
282
282
|
# XXX: keep backwards compatibility until we migrate all integrations to this new classes
|
|
283
283
|
# api_context contains a response object that we want slowly remove from it
|
|
284
284
|
data = kwargs.get("response", "")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any
|
|
1
|
+
from typing import Any
|
|
2
2
|
|
|
3
3
|
from requests.structures import CaseInsensitiveDict
|
|
4
4
|
|
|
@@ -28,21 +28,21 @@ class RestApiContainer:
|
|
|
28
28
|
# contains the RestApi dictionary. We're not making use of it yet, still using moto data.
|
|
29
29
|
rest_api: RestApi
|
|
30
30
|
# maps AuthorizerId -> Authorizer
|
|
31
|
-
authorizers:
|
|
31
|
+
authorizers: dict[str, Authorizer]
|
|
32
32
|
# maps RequestValidatorId -> RequestValidator
|
|
33
|
-
validators:
|
|
33
|
+
validators: dict[str, RequestValidator]
|
|
34
34
|
# map DocumentationPartId -> DocumentationPart
|
|
35
|
-
documentation_parts:
|
|
35
|
+
documentation_parts: dict[str, DocumentationPart]
|
|
36
36
|
# map doc version name -> DocumentationVersion
|
|
37
|
-
documentation_versions:
|
|
37
|
+
documentation_versions: dict[str, DocumentationVersion]
|
|
38
38
|
# not used yet, still in moto
|
|
39
|
-
gateway_responses:
|
|
39
|
+
gateway_responses: dict[GatewayResponseType, GatewayResponse]
|
|
40
40
|
# maps Model name -> Model
|
|
41
|
-
models:
|
|
41
|
+
models: dict[str, Model]
|
|
42
42
|
# maps Model name -> resolved dict Model, so we don't need to load the JSON everytime
|
|
43
|
-
resolved_models:
|
|
43
|
+
resolved_models: dict[str, dict]
|
|
44
44
|
# maps ResourceId of a Resource to its children ResourceIds
|
|
45
|
-
resource_children:
|
|
45
|
+
resource_children: dict[str, list[str]]
|
|
46
46
|
|
|
47
47
|
def __init__(self, rest_api: RestApi):
|
|
48
48
|
self.rest_api = rest_api
|
|
@@ -102,25 +102,25 @@ class RestApiDeployment:
|
|
|
102
102
|
class ApiGatewayStore(BaseStore):
|
|
103
103
|
# maps (API id) -> RestApiContainer
|
|
104
104
|
# TODO: remove CaseInsensitiveDict, and lower the value of the ID when getting it from the tags
|
|
105
|
-
rest_apis:
|
|
105
|
+
rest_apis: dict[str, RestApiContainer] = LocalAttribute(default=CaseInsensitiveDict)
|
|
106
106
|
|
|
107
107
|
# account details
|
|
108
|
-
_account:
|
|
108
|
+
_account: dict[str, Any] = LocalAttribute(default=dict)
|
|
109
109
|
|
|
110
110
|
# maps (domain_name) -> [path_mappings]
|
|
111
|
-
base_path_mappings:
|
|
111
|
+
base_path_mappings: dict[str, list[dict]] = LocalAttribute(default=dict)
|
|
112
112
|
|
|
113
113
|
# maps ID to VPC link details
|
|
114
|
-
vpc_links:
|
|
114
|
+
vpc_links: dict[str, dict] = LocalAttribute(default=dict)
|
|
115
115
|
|
|
116
116
|
# maps cert ID to client certificate details
|
|
117
|
-
client_certificates:
|
|
117
|
+
client_certificates: dict[str, dict] = LocalAttribute(default=dict)
|
|
118
118
|
|
|
119
119
|
# maps domain name to domain name model
|
|
120
|
-
domain_names:
|
|
120
|
+
domain_names: dict[str, DomainName] = LocalAttribute(default=dict)
|
|
121
121
|
|
|
122
122
|
# maps resource ARN to tags
|
|
123
|
-
TAGS:
|
|
123
|
+
TAGS: dict[str, dict[str, str]] = CrossRegionAttribute(default=dict)
|
|
124
124
|
|
|
125
125
|
# internal deployments, represents a frozen REST API for a deployment, used in our router
|
|
126
126
|
# TODO: make sure API ID are unique across all accounts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from collections.abc import Callable
|
|
2
2
|
|
|
3
3
|
from rolo import Response
|
|
4
4
|
from rolo.gateway.chain import HandlerChain as RoloHandlerChain
|
|
@@ -14,4 +14,4 @@ RestApiGatewayExceptionHandler = Callable[
|
|
|
14
14
|
None,
|
|
15
15
|
]
|
|
16
16
|
|
|
17
|
-
RestApiGatewayHandlerChain:
|
|
17
|
+
RestApiGatewayHandlerChain: type[RoloHandlerChain[RestApiInvocationContext]] = RoloHandlerChain
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from http import HTTPMethod
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import TypedDict
|
|
3
3
|
|
|
4
4
|
from rolo import Request
|
|
5
5
|
from rolo.gateway import RequestContext
|
|
@@ -14,12 +14,12 @@ from .variables import ContextVariableOverrides, ContextVariables, LoggingContex
|
|
|
14
14
|
class InvocationRequest(TypedDict, total=False):
|
|
15
15
|
http_method: HTTPMethod
|
|
16
16
|
"""HTTP Method of the incoming request"""
|
|
17
|
-
raw_path:
|
|
17
|
+
raw_path: str | None
|
|
18
18
|
# TODO: verify if raw_path is needed
|
|
19
19
|
"""Raw path of the incoming request with no modification, needed to keep double forward slashes"""
|
|
20
|
-
path:
|
|
20
|
+
path: str | None
|
|
21
21
|
"""Path of the request with no URL decoding"""
|
|
22
|
-
path_parameters:
|
|
22
|
+
path_parameters: dict[str, str] | None
|
|
23
23
|
"""Path parameters of the request"""
|
|
24
24
|
query_string_parameters: dict[str, str]
|
|
25
25
|
"""Query string parameters of the request"""
|
|
@@ -72,48 +72,48 @@ class RestApiInvocationContext(RequestContext):
|
|
|
72
72
|
This context is going to be used to pass relevant information across an API Gateway invocation.
|
|
73
73
|
"""
|
|
74
74
|
|
|
75
|
-
deployment:
|
|
75
|
+
deployment: RestApiDeployment | None
|
|
76
76
|
"""Contains the invoked REST API Resources"""
|
|
77
|
-
integration:
|
|
77
|
+
integration: Integration | None
|
|
78
78
|
"""The Method Integration for the invoked request"""
|
|
79
|
-
api_id:
|
|
79
|
+
api_id: str | None
|
|
80
80
|
"""The REST API identifier of the invoked API"""
|
|
81
|
-
stage:
|
|
81
|
+
stage: str | None
|
|
82
82
|
"""The REST API stage name linked to this invocation"""
|
|
83
|
-
base_path:
|
|
83
|
+
base_path: str | None
|
|
84
84
|
"""The REST API base path mapped to the stage of this invocation"""
|
|
85
|
-
deployment_id:
|
|
85
|
+
deployment_id: str | None
|
|
86
86
|
"""The REST API deployment linked to this invocation"""
|
|
87
|
-
region:
|
|
87
|
+
region: str | None
|
|
88
88
|
"""The region the REST API is living in."""
|
|
89
|
-
account_id:
|
|
89
|
+
account_id: str | None
|
|
90
90
|
"""The account the REST API is living in."""
|
|
91
|
-
trace_id:
|
|
91
|
+
trace_id: str | None
|
|
92
92
|
"""The X-Ray trace ID for the request."""
|
|
93
|
-
resource:
|
|
93
|
+
resource: Resource | None
|
|
94
94
|
"""The resource the invocation matched"""
|
|
95
|
-
resource_method:
|
|
95
|
+
resource_method: Method | None
|
|
96
96
|
"""The method of the resource the invocation matched"""
|
|
97
|
-
stage_variables:
|
|
97
|
+
stage_variables: dict[str, str] | None
|
|
98
98
|
"""The Stage variables, also used in parameters mapping and mapping templates"""
|
|
99
|
-
stage_configuration:
|
|
99
|
+
stage_configuration: Stage | None
|
|
100
100
|
"""The Stage configuration, containing canary deployment settings"""
|
|
101
|
-
is_canary:
|
|
101
|
+
is_canary: bool | None
|
|
102
102
|
"""If the current call was directed to a canary deployment"""
|
|
103
|
-
context_variables:
|
|
103
|
+
context_variables: ContextVariables | None
|
|
104
104
|
"""The $context used in data models, authorizers, mapping templates, and CloudWatch access logging"""
|
|
105
|
-
context_variable_overrides:
|
|
105
|
+
context_variable_overrides: ContextVariableOverrides | None
|
|
106
106
|
"""requestOverrides and responseOverrides are passed from request templates to response templates but are
|
|
107
107
|
not in the integration context"""
|
|
108
|
-
logging_context_variables:
|
|
108
|
+
logging_context_variables: LoggingContextVariables | None
|
|
109
109
|
"""Additional $context variables available only for access logging, not yet implemented"""
|
|
110
|
-
invocation_request:
|
|
110
|
+
invocation_request: InvocationRequest | None
|
|
111
111
|
"""Contains the data relative to the invocation request"""
|
|
112
|
-
integration_request:
|
|
112
|
+
integration_request: IntegrationRequest | None
|
|
113
113
|
"""Contains the data needed to construct an HTTP request to an Integration"""
|
|
114
|
-
endpoint_response:
|
|
114
|
+
endpoint_response: EndpointResponse | None
|
|
115
115
|
"""Contains the data returned by an Integration"""
|
|
116
|
-
invocation_response:
|
|
116
|
+
invocation_response: InvocationResponse | None
|
|
117
117
|
"""Contains the data serialized and to be returned by an invocation"""
|
|
118
118
|
|
|
119
119
|
def __init__(self, request: Request):
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional
|
|
3
2
|
|
|
4
3
|
from localstack.aws.api.apigateway import ApiKey, ApiKeySourceType, RestApi
|
|
5
4
|
from localstack.http import Response
|
|
@@ -56,9 +55,7 @@ class ApiKeyValidationHandler(RestApiGatewayHandler):
|
|
|
56
55
|
LOG.debug("Updating $context.identity.apiKeyId='%s'", validated_key["id"])
|
|
57
56
|
identity["apiKeyId"] = validated_key["id"]
|
|
58
57
|
|
|
59
|
-
def validate_api_key(
|
|
60
|
-
self, api_key_value, context: RestApiInvocationContext
|
|
61
|
-
) -> Optional[ApiKey]:
|
|
58
|
+
def validate_api_key(self, api_key_value, context: RestApiInvocationContext) -> ApiKey | None:
|
|
62
59
|
api_id = context.api_id
|
|
63
60
|
stage = context.stage
|
|
64
61
|
account_id = context.account_id
|
|
@@ -95,7 +92,7 @@ class ApiKeyValidationHandler(RestApiGatewayHandler):
|
|
|
95
92
|
|
|
96
93
|
def get_request_api_key(
|
|
97
94
|
self, rest_api: RestApi, request: InvocationRequest, identity: ContextVarsIdentity
|
|
98
|
-
) ->
|
|
95
|
+
) -> str | None:
|
|
99
96
|
"""https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-key-source.html
|
|
100
97
|
The source of the API key for metering requests according to a usage plan.
|
|
101
98
|
Valid values are:
|
|
@@ -2,7 +2,6 @@ import datetime
|
|
|
2
2
|
import logging
|
|
3
3
|
import re
|
|
4
4
|
from collections import defaultdict
|
|
5
|
-
from typing import Optional
|
|
6
5
|
from urllib.parse import urlparse
|
|
7
6
|
|
|
8
7
|
from rolo.request import restore_payload
|
|
@@ -178,7 +177,7 @@ class InvocationRequestParser(RestApiGatewayHandler):
|
|
|
178
177
|
return context_variables
|
|
179
178
|
|
|
180
179
|
@staticmethod
|
|
181
|
-
def get_stage_variables(context: RestApiInvocationContext) ->
|
|
180
|
+
def get_stage_variables(context: RestApiInvocationContext) -> dict[str, str] | None:
|
|
182
181
|
stage_variables = context.stage_configuration.get("variables")
|
|
183
182
|
if context.is_canary:
|
|
184
183
|
overrides = (
|
|
@@ -4,7 +4,7 @@ import random
|
|
|
4
4
|
import re
|
|
5
5
|
import time
|
|
6
6
|
from secrets import token_hex
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import TypedDict
|
|
8
8
|
|
|
9
9
|
from moto.apigateway.models import RestAPI as MotoRestAPI
|
|
10
10
|
|
|
@@ -115,7 +115,7 @@ def get_lambda_function_arn_from_invocation_uri(uri: str) -> str:
|
|
|
115
115
|
return uri.split("functions/")[1].removesuffix("/invocations")
|
|
116
116
|
|
|
117
117
|
|
|
118
|
-
def validate_sub_dict_of_typed_dict(typed_dict:
|
|
118
|
+
def validate_sub_dict_of_typed_dict(typed_dict: type[TypedDict], obj: dict) -> bool:
|
|
119
119
|
"""
|
|
120
120
|
Validate that the object is a subset off the keys of a given `TypedDict`.
|
|
121
121
|
:param typed_dict: the `TypedDict` blueprint
|