localstack-core 4.6.1.dev60__py3-none-any.whl → 4.10.1.dev12__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/cloudformation/__init__.py +18 -4
- localstack/aws/api/cloudwatch/__init__.py +41 -1
- localstack/aws/api/config/__init__.py +4 -0
- localstack/aws/api/core.py +8 -5
- localstack/aws/api/dynamodb/__init__.py +30 -0
- localstack/aws/api/ec2/__init__.py +1545 -66
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/iam/__init__.py +7 -0
- localstack/aws/api/kinesis/__init__.py +19 -0
- localstack/aws/api/kms/__init__.py +6 -0
- localstack/aws/api/lambda_/__init__.py +36 -23
- localstack/aws/api/logs/__init__.py +20 -8
- localstack/aws/api/opensearch/__init__.py +16 -0
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/redshift/__init__.py +9 -3
- localstack/aws/api/route53/__init__.py +5 -0
- localstack/aws/api/s3/__init__.py +12 -0
- localstack/aws/api/s3control/__init__.py +56 -0
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/ssm/__init__.py +2 -0
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/api/transcribe/__init__.py +17 -0
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +14 -11
- localstack/aws/connect.py +42 -41
- localstack/aws/forwarder.py +57 -9
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +2 -3
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/internal_requests.py +6 -1
- localstack/aws/handlers/logging.py +13 -4
- localstack/aws/handlers/metric_handler.py +44 -5
- localstack/aws/handlers/service.py +48 -28
- localstack/aws/mocking.py +18 -27
- localstack/aws/patches.py +2 -2
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +475 -49
- localstack/aws/protocol/serializer.py +723 -106
- localstack/aws/protocol/service_router.py +133 -33
- localstack/aws/protocol/validate.py +6 -6
- localstack/aws/scaffold.py +9 -10
- 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 +12 -11
- localstack/aws/spec-patches.json +58 -0
- localstack/aws/spec.py +66 -46
- localstack/cli/exceptions.py +1 -1
- localstack/cli/localstack.py +11 -11
- localstack/cli/lpm.py +4 -5
- localstack/cli/plugins.py +1 -1
- localstack/cli/profiles.py +1 -2
- localstack/config.py +44 -30
- localstack/constants.py +4 -29
- localstack/deprecations.py +5 -5
- localstack/dev/kubernetes/__main__.py +130 -7
- localstack/dev/run/__main__.py +5 -5
- localstack/dev/run/configurators.py +1 -4
- localstack/dev/run/paths.py +6 -6
- localstack/dns/models.py +2 -1
- localstack/dns/plugins.py +5 -1
- localstack/dns/server.py +16 -6
- 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 +6 -6
- localstack/packages/api.py +13 -12
- localstack/packages/core.py +4 -4
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +38 -12
- localstack/packages/plugins.py +0 -8
- localstack/runtime/analytics.py +3 -0
- localstack/runtime/hooks.py +1 -1
- localstack/runtime/init.py +8 -9
- localstack/runtime/main.py +5 -5
- localstack/runtime/patches.py +2 -2
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +7 -10
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +27 -28
- localstack/services/apigateway/legacy/integration.py +11 -10
- localstack/services/apigateway/legacy/invocations.py +6 -5
- localstack/services/apigateway/legacy/provider.py +148 -68
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +6 -6
- 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/method_request.py +7 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +2 -3
- 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 +9 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +12 -12
- localstack/services/apigateway/next_gen/execute_api/router.py +31 -0
- localstack/services/apigateway/next_gen/execute_api/template_mapping.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/test_invoke.py +114 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- localstack/services/apigateway/next_gen/provider.py +5 -0
- 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 +6 -6
- 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 +4 -3
- 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/api_utils.py +4 -8
- localstack/services/cloudformation/cfn_utils.py +2 -2
- localstack/services/cloudformation/deployment_utils.py +14 -12
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +27 -17
- localstack/services/cloudformation/engine/parameters.py +4 -4
- localstack/services/cloudformation/engine/template_deployer.py +15 -14
- localstack/services/cloudformation/engine/template_utils.py +34 -12
- localstack/services/cloudformation/engine/transformers.py +11 -8
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +336 -39
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +96 -17
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +289 -136
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +315 -146
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +380 -105
- localstack/services/cloudformation/engine/v2/change_set_model_validator.py +183 -0
- localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +6 -0
- localstack/services/cloudformation/engine/v2/resolving.py +102 -0
- localstack/services/cloudformation/engine/yaml_parser.py +9 -2
- localstack/services/cloudformation/provider.py +11 -6
- localstack/services/cloudformation/provider_utils.py +34 -4
- localstack/services/cloudformation/resource_provider.py +31 -21
- 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/resources.py +24149 -0
- localstack/services/cloudformation/scaffolding/__main__.py +13 -12
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/service_models.py +2 -2
- localstack/services/cloudformation/stores.py +33 -22
- localstack/services/cloudformation/v2/entities.py +103 -88
- localstack/services/cloudformation/v2/provider.py +872 -131
- localstack/services/cloudformation/v2/types.py +38 -0
- localstack/services/cloudformation/v2/utils.py +4 -1
- localstack/services/cloudwatch/alarm_scheduler.py +11 -8
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +30 -25
- localstack/services/cloudwatch/provider_v2.py +27 -32
- 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 +3 -3
- localstack/services/dynamodb/provider.py +159 -18
- 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/server.py +2 -2
- localstack/services/dynamodb/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +157 -18
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +26 -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 +29 -22
- 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 +22 -19
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +6 -6
- localstack/services/es/provider.py +21 -21
- 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/event_rule_engine.py +31 -13
- localstack/services/events/models.py +29 -30
- localstack/services/events/provider.py +29 -26
- 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 +21 -13
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +15 -15
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +25 -16
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +14 -119
- 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/iam/resources/policy_simulator.py +133 -0
- localstack/services/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +17 -5
- localstack/services/kinesis/packages.py +3 -3
- localstack/services/kinesis/provider.py +86 -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 +21 -18
- localstack/services/kms/provider.py +62 -26
- 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 +4 -3
- localstack/services/lambda_/api_utils.py +19 -16
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +4 -7
- 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_/hooks.py +6 -1
- localstack/services/lambda_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +7 -11
- localstack/services/lambda_/invocation/event_manager.py +1 -1
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +8 -11
- localstack/services/lambda_/invocation/internal_sqs_queue.py +6 -10
- localstack/services/lambda_/invocation/lambda_models.py +33 -30
- localstack/services/lambda_/invocation/lambda_service.py +12 -5
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/invocation/version_manager.py +31 -8
- localstack/services/lambda_/ldm.py +14 -0
- localstack/services/lambda_/packages.py +3 -4
- localstack/services/lambda_/provider.py +9 -26
- localstack/services/lambda_/provider_utils.py +1 -1
- 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 +15 -15
- 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/lambda_/urlrouter.py +14 -1
- localstack/services/logs/models.py +1 -3
- localstack/services/logs/provider.py +39 -22
- 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 +5 -4
- localstack/services/opensearch/cluster.py +28 -20
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +27 -9
- localstack/services/opensearch/provider.py +15 -10
- 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 +57 -10
- localstack/services/plugins.py +37 -32
- localstack/services/providers.py +10 -2
- localstack/services/redshift/provider.py +0 -21
- 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/constants.py +5 -2
- localstack/services/s3/cors.py +8 -8
- localstack/services/s3/models.py +73 -73
- localstack/services/s3/notifications.py +74 -58
- localstack/services/s3/presigned_url.py +41 -59
- localstack/services/s3/provider.py +86 -29
- 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 +51 -31
- localstack/services/s3/validation.py +47 -33
- localstack/services/s3/website_hosting.py +9 -7
- 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 +10 -12
- 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/models.py +8 -1
- localstack/services/ses/provider.py +128 -55
- 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/constants.py +7 -1
- localstack/services/sns/executor.py +9 -2
- localstack/services/sns/models.py +25 -25
- localstack/services/sns/provider.py +9 -7
- localstack/services/sns/publisher.py +37 -23
- 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/sns/v2/models.py +167 -0
- localstack/services/sns/v2/provider.py +867 -0
- localstack/services/sns/v2/utils.py +130 -0
- localstack/services/sqs/constants.py +2 -2
- localstack/services/sqs/developer_api.py +205 -0
- localstack/services/sqs/models.py +71 -36
- localstack/services/sqs/provider.py +56 -332
- localstack/services/sqs/query_api.py +8 -5
- 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 +7 -5
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
- localstack/services/sqs/utils.py +123 -4
- localstack/services/ssm/provider.py +3 -4
- 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/assign/assign_decl.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_decl_binding.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_array.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_object.py +1 -1
- 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/error_name/states_error_name_type.py +1 -1
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_array.py +1 -1
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_object.py +1 -1
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +4 -4
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +4 -4
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadarr/payload_arr.py +1 -1
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadtmpl/payload_tmpl.py +1 -1
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +3 -3
- 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 +4 -4
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/array/array_partition.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/generic/string_format.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_array.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_format.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/member.py +1 -1
- localstack/services/stepfunctions/asl/component/program/program.py +9 -9
- localstack/services/stepfunctions/asl/component/program/states.py +1 -1
- 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/comparison.py +5 -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 +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +7 -7
- 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/item_reader/resource_eval/resource_output_transformer/resource_output_transformer_csv.py +2 -2
- 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 +12 -13
- 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 +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +2 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +7 -7
- 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 +18 -18
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_aws_sdk.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +8 -7
- 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 +5 -5
- 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 +3 -5
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +5 -7
- localstack/services/stepfunctions/asl/component/state/state_succeed/state_succeed.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_wait/state_wait.py +1 -1
- 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 +22 -24
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +10 -10
- 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 +12 -12
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +6 -6
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +7 -6
- localstack/services/stepfunctions/asl/parse/asl_parser.py +1 -1
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +2 -3
- localstack/services/stepfunctions/asl/parse/preprocessor.py +44 -44
- localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
- localstack/services/stepfunctions/asl/static_analyser/intrinsic/variable_names_intrinsic_static_analyser.py +1 -1
- localstack/services/stepfunctions/asl/static_analyser/variable_references_static_analyser.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 +8 -8
- localstack/services/stepfunctions/backend/execution.py +29 -30
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +28 -28
- 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 +9 -9
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/packages.py +14 -5
- localstack/services/stepfunctions/provider.py +34 -44
- 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 +8 -8
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +8 -3
- localstack/state/codecs.py +61 -0
- localstack/state/core.py +11 -5
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +36 -23
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/cloudformation_utils.py +1 -1
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +68 -18
- localstack/testing/pytest/container.py +5 -5
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +188 -49
- localstack/testing/pytest/in_memory_localstack.py +1 -3
- localstack/testing/pytest/marking.py +42 -15
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/fixtures.py +4 -4
- localstack/testing/pytest/stepfunctions/utils.py +11 -10
- localstack/testing/pytest/util.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -4
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +8 -3
- 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/metadata.py +6 -4
- localstack/utils/analytics/metrics/counter.py +11 -18
- localstack/utils/analytics/metrics/registry.py +2 -2
- localstack/utils/analytics/publisher.py +4 -5
- localstack/utils/analytics/service_providers.py +19 -0
- localstack/utils/analytics/service_request_aggregator.py +4 -4
- localstack/utils/archives.py +12 -12
- localstack/utils/asyncio.py +2 -2
- localstack/utils/aws/arns.py +26 -31
- localstack/utils/aws/aws_responses.py +21 -28
- localstack/utils/aws/aws_stack.py +7 -12
- localstack/utils/aws/dead_letter_queue.py +4 -9
- localstack/utils/aws/message_forwarding.py +8 -11
- localstack/utils/aws/request_context.py +5 -6
- localstack/utils/aws/resources.py +1 -1
- localstack/utils/aws/templating.py +4 -4
- localstack/utils/batch_policy.py +4 -4
- localstack/utils/bootstrap.py +37 -30
- localstack/utils/catalog/catalog.py +139 -0
- localstack/utils/catalog/catalog_loader.py +119 -0
- localstack/utils/catalog/common.py +58 -0
- localstack/utils/catalog/plugins.py +28 -0
- localstack/utils/cloudwatch/cloudwatch_util.py +5 -5
- localstack/utils/collections.py +33 -27
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +5 -6
- localstack/utils/container_utils/container_client.py +156 -160
- localstack/utils/container_utils/docker_cmd_client.py +97 -81
- localstack/utils/container_utils/docker_sdk_client.py +75 -72
- localstack/utils/crypto.py +12 -13
- localstack/utils/diagnose.py +11 -12
- localstack/utils/docker_utils.py +11 -7
- localstack/utils/files.py +34 -15
- localstack/utils/functions.py +5 -4
- localstack/utils/http.py +14 -14
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +21 -7
- localstack/utils/kinesis/kinesis_connector.py +2 -1
- localstack/utils/net.py +25 -17
- localstack/utils/no_exit_argument_parser.py +2 -2
- localstack/utils/numbers.py +9 -2
- localstack/utils/objects.py +15 -14
- localstack/utils/patch.py +14 -7
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +15 -14
- localstack/utils/scheduler.py +13 -12
- localstack/utils/server/tcp_proxy.py +2 -2
- localstack/utils/serving.py +3 -4
- localstack/utils/strings.py +15 -16
- localstack/utils/sync.py +126 -1
- localstack/utils/tagging.py +10 -8
- localstack/utils/testutil.py +17 -17
- localstack/utils/threads.py +3 -3
- localstack/utils/time.py +12 -4
- localstack/utils/urls.py +1 -3
- localstack/utils/xml.py +1 -1
- localstack/utils/xray/traceid.py +1 -1
- localstack/version.py +16 -3
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/METADATA +18 -13
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/RECORD +663 -655
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/entry_points.txt +8 -4
- localstack_core-4.10.1.dev12.dist-info/plux.json +1 -0
- localstack/packages/terraform.py +0 -47
- localstack/services/cloudformation/deploy.html +0 -144
- localstack/services/cloudformation/deploy_ui.py +0 -47
- localstack/services/cloudformation/plugins.py +0 -12
- localstack/services/lambda_/lambda_debug_mode/ldm.py +0 -375
- localstack/services/lambda_/lambda_debug_mode/ldm_config_file.py +0 -178
- localstack/services/lambda_/lambda_debug_mode/ldm_types.py +0 -11
- localstack/services/lambda_/lambda_debug_mode/ldm_utils.py +0 -43
- localstack_core-4.6.1.dev60.dist-info/plux.json +0 -1
- /localstack/{services/lambda_/lambda_debug_mode/__init__.py → testing/pytest/cloudformation/transformers.py} +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/WHEEL +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.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
|
|
@@ -37,7 +37,7 @@ PATH_REGEX_TEST_INVOKE_API = r"^\/restapis\/([A-Za-z0-9_\-]+)\/resources\/([A-Za
|
|
|
37
37
|
|
|
38
38
|
# regex path pattern for user requests, handles stages like $default
|
|
39
39
|
PATH_REGEX_USER_REQUEST = (
|
|
40
|
-
|
|
40
|
+
rf"^/restapis/([A-Za-z0-9_\\-]+)(?:/([A-Za-z0-9\_($|%24)\\-]+))?/{PATH_USER_REQUEST}/(.*)$"
|
|
41
41
|
)
|
|
42
42
|
# URL pattern for invocations
|
|
43
43
|
HOST_REGEX_EXECUTE_API = r"(?:.*://)?([a-zA-Z0-9]+)(?:(-vpce-[^.]+))?\.execute-api\.(.*)"
|
|
@@ -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
|
|
@@ -375,12 +375,12 @@ def get_apigateway_path_for_resource(
|
|
|
375
375
|
path_part = target_resource.get("pathPart", "")
|
|
376
376
|
if path_suffix:
|
|
377
377
|
if path_part:
|
|
378
|
-
path_suffix = "
|
|
378
|
+
path_suffix = f"{path_part}/{path_suffix}"
|
|
379
379
|
else:
|
|
380
380
|
path_suffix = path_part
|
|
381
381
|
parent_id = target_resource.get("parentId")
|
|
382
382
|
if not parent_id:
|
|
383
|
-
return "
|
|
383
|
+
return f"/{path_suffix}"
|
|
384
384
|
return get_apigateway_path_for_resource(
|
|
385
385
|
api_id,
|
|
386
386
|
parent_id,
|
|
@@ -411,15 +411,15 @@ 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.
|
|
419
419
|
for api_path, details in path_map.items():
|
|
420
420
|
api_path_regex = re.sub(r"{[^+]+\+}", r"[^\?#]+", api_path)
|
|
421
421
|
api_path_regex = re.sub(r"{[^}]+}", r"[^/]+", api_path_regex)
|
|
422
|
-
if re.match(
|
|
422
|
+
if re.match(rf"^{api_path_regex}$", path):
|
|
423
423
|
matches.append((api_path, details))
|
|
424
424
|
|
|
425
425
|
# if there are no matches, it's not worth to proceed, bail here!
|
|
@@ -508,8 +508,7 @@ def connect_api_gateway_to_sqs(gateway_name, stage_name, queue_arn, path, accoun
|
|
|
508
508
|
"integrations": [
|
|
509
509
|
{
|
|
510
510
|
"type": "AWS",
|
|
511
|
-
"uri": "arn
|
|
512
|
-
% (partition, sqs_region, sqs_account, queue_name),
|
|
511
|
+
"uri": f"arn:{partition}:apigateway:{sqs_region}:sqs:path/{sqs_account}/{queue_name}",
|
|
513
512
|
"requestTemplates": {"application/json": template},
|
|
514
513
|
"requestParameters": {
|
|
515
514
|
"integration.request.header.Content-Type": "'application/x-www-form-urlencoded'"
|
|
@@ -528,7 +527,7 @@ def connect_api_gateway_to_sqs(gateway_name, stage_name, queue_arn, path, accoun
|
|
|
528
527
|
|
|
529
528
|
def get_target_resource_details(
|
|
530
529
|
invocation_context: ApiInvocationContext,
|
|
531
|
-
) ->
|
|
530
|
+
) -> tuple[str | None, dict | None]:
|
|
532
531
|
"""Look up and return the API GW resource (path pattern + resource dict) for the given invocation context."""
|
|
533
532
|
path_map = get_rest_api_paths(
|
|
534
533
|
account_id=invocation_context.account_id,
|
|
@@ -557,7 +556,7 @@ def get_target_resource_details(
|
|
|
557
556
|
return None, None
|
|
558
557
|
|
|
559
558
|
|
|
560
|
-
def get_target_resource_method(invocation_context: ApiInvocationContext) ->
|
|
559
|
+
def get_target_resource_method(invocation_context: ApiInvocationContext) -> dict | None:
|
|
561
560
|
"""Look up and return the API GW resource method for the given invocation context."""
|
|
562
561
|
_, resource = get_target_resource_details(invocation_context)
|
|
563
562
|
if not resource:
|
|
@@ -614,7 +613,7 @@ def get_event_request_context(invocation_context: ApiInvocationContext):
|
|
|
614
613
|
},
|
|
615
614
|
"httpMethod": method,
|
|
616
615
|
"protocol": "HTTP/1.1",
|
|
617
|
-
"requestTime": datetime.now(
|
|
616
|
+
"requestTime": datetime.now(UTC).strftime(REQUEST_TIME_DATE_FORMAT),
|
|
618
617
|
"requestTimeEpoch": int(time.time() * 1000),
|
|
619
618
|
"authorizer": {},
|
|
620
619
|
}
|
|
@@ -660,11 +659,11 @@ def set_api_id_stage_invocation_path(
|
|
|
660
659
|
if path_match:
|
|
661
660
|
api_id = path_match.group(1)
|
|
662
661
|
stage = path_match.group(2)
|
|
663
|
-
relative_path_w_query_params = "
|
|
662
|
+
relative_path_w_query_params = f"/{path_match.group(3)}"
|
|
664
663
|
elif host_match:
|
|
665
664
|
api_id = extract_api_id_from_hostname_in_url(host_header)
|
|
666
665
|
stage = path.strip("/").split("/")[0]
|
|
667
|
-
relative_path_w_query_params = "
|
|
666
|
+
relative_path_w_query_params = "/{}".format(path.lstrip("/").partition("/")[2])
|
|
668
667
|
elif test_invoke_match:
|
|
669
668
|
stage = invocation_context.stage
|
|
670
669
|
api_id = invocation_context.api_id
|
|
@@ -681,7 +680,7 @@ def set_api_id_stage_invocation_path(
|
|
|
681
680
|
return invocation_context
|
|
682
681
|
|
|
683
682
|
|
|
684
|
-
def get_api_account_id_and_region(api_id: str) ->
|
|
683
|
+
def get_api_account_id_and_region(api_id: str) -> tuple[str | None, str | None]:
|
|
685
684
|
"""Return the region name for the given REST API ID"""
|
|
686
685
|
for account_id, account in apigateway_backends.items():
|
|
687
686
|
for region_name, region in account.items():
|
|
@@ -698,7 +697,7 @@ def extract_api_id_from_hostname_in_url(hostname: str) -> str:
|
|
|
698
697
|
return match.group(1)
|
|
699
698
|
|
|
700
699
|
|
|
701
|
-
def multi_value_dict_for_list(elements:
|
|
700
|
+
def multi_value_dict_for_list(elements: list | dict) -> dict:
|
|
702
701
|
temp_mv_dict = defaultdict(list)
|
|
703
702
|
for key in elements:
|
|
704
703
|
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
|
|
@@ -783,7 +783,7 @@ class HTTPIntegration(BackendIntegration):
|
|
|
783
783
|
instances = client.list_instances(ServiceId=service_id)["Instances"]
|
|
784
784
|
instance = (instances or [None])[0]
|
|
785
785
|
if instance and instance.get("Id"):
|
|
786
|
-
uri = "http
|
|
786
|
+
uri = "http://{}/{}".format(instance["Id"], invocation_path.lstrip("/"))
|
|
787
787
|
|
|
788
788
|
# apply custom request template
|
|
789
789
|
invocation_context.context = get_event_request_context(invocation_context)
|
|
@@ -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
|
|
@@ -977,8 +977,9 @@ class StepFunctionIntegration(BackendIntegration):
|
|
|
977
977
|
headers={"Content-Type": APPLICATION_JSON},
|
|
978
978
|
data=json.dumps(
|
|
979
979
|
{
|
|
980
|
-
"message": "StepFunctions execution
|
|
981
|
-
|
|
980
|
+
"message": "StepFunctions execution {} failed with status '{}'".format(
|
|
981
|
+
result["executionArn"], result_status
|
|
982
|
+
)
|
|
982
983
|
}
|
|
983
984
|
),
|
|
984
985
|
)
|
|
@@ -1065,7 +1066,7 @@ class MockIntegration(BackendIntegration):
|
|
|
1065
1066
|
|
|
1066
1067
|
# TODO: remove once we migrate all usages to `apply_request_parameters` on BackendIntegration
|
|
1067
1068
|
def apply_request_parameters(
|
|
1068
|
-
uri: str, integration:
|
|
1069
|
+
uri: str, integration: dict[str, Any], path_params: dict[str, str], query_params: dict[str, str]
|
|
1069
1070
|
):
|
|
1070
1071
|
request_parameters = integration.get("requestParameters")
|
|
1071
1072
|
uri = uri or integration.get("uri") or integration.get("integrationUri") or ""
|
|
@@ -142,8 +142,9 @@ class RequestValidator:
|
|
|
142
142
|
# try to get the resolved model first
|
|
143
143
|
resolved_schema = model_resolver.get_resolved_model()
|
|
144
144
|
if not resolved_schema:
|
|
145
|
-
LOG.
|
|
146
|
-
"An exception occurred while trying to validate the request: could not find the model"
|
|
145
|
+
LOG.error(
|
|
146
|
+
"An exception occurred while trying to validate the request: could not find the model",
|
|
147
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
147
148
|
)
|
|
148
149
|
return False
|
|
149
150
|
|
|
@@ -279,7 +280,7 @@ def invoke_rest_api(invocation_context: ApiInvocationContext):
|
|
|
279
280
|
|
|
280
281
|
extracted_path, resource = get_target_resource_details(invocation_context)
|
|
281
282
|
if not resource:
|
|
282
|
-
return make_error_response("Unable to find path
|
|
283
|
+
return make_error_response(f"Unable to find path {invocation_context.path}", 404)
|
|
283
284
|
|
|
284
285
|
# validate request
|
|
285
286
|
validator = RequestValidator(invocation_context)
|
|
@@ -306,7 +307,7 @@ def invoke_rest_api(invocation_context: ApiInvocationContext):
|
|
|
306
307
|
# default to returning CORS headers if this is an OPTIONS request
|
|
307
308
|
return get_cors_response(headers)
|
|
308
309
|
return make_error_response(
|
|
309
|
-
"Unable to find integration for:
|
|
310
|
+
f"Unable to find integration for: {method} {invocation_path} ({raw_path})",
|
|
310
311
|
404,
|
|
311
312
|
)
|
|
312
313
|
|
|
@@ -334,7 +335,7 @@ def invoke_rest_api_integration(invocation_context: ApiInvocationContext):
|
|
|
334
335
|
return e.to_response()
|
|
335
336
|
except Exception as e:
|
|
336
337
|
msg = f"Error invoking integration for API Gateway ID '{invocation_context.api_id}': {e}"
|
|
337
|
-
LOG.
|
|
338
|
+
LOG.error(msg, exc_info=LOG.isEnabledFor(logging.DEBUG))
|
|
338
339
|
return make_error_response(msg, 400)
|
|
339
340
|
|
|
340
341
|
|