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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import
|
|
5
|
+
from typing import TypedDict
|
|
6
6
|
|
|
7
7
|
import localstack.services.cloudformation.provider_utils as util
|
|
8
8
|
from localstack.services.cloudformation.resource_provider import (
|
|
@@ -14,41 +14,41 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class SESEmailIdentityProperties(TypedDict):
|
|
17
|
-
EmailIdentity:
|
|
18
|
-
ConfigurationSetAttributes:
|
|
19
|
-
DkimAttributes:
|
|
20
|
-
DkimDNSTokenName1:
|
|
21
|
-
DkimDNSTokenName2:
|
|
22
|
-
DkimDNSTokenName3:
|
|
23
|
-
DkimDNSTokenValue1:
|
|
24
|
-
DkimDNSTokenValue2:
|
|
25
|
-
DkimDNSTokenValue3:
|
|
26
|
-
DkimSigningAttributes:
|
|
27
|
-
FeedbackAttributes:
|
|
28
|
-
MailFromAttributes:
|
|
17
|
+
EmailIdentity: str | None
|
|
18
|
+
ConfigurationSetAttributes: ConfigurationSetAttributes | None
|
|
19
|
+
DkimAttributes: DkimAttributes | None
|
|
20
|
+
DkimDNSTokenName1: str | None
|
|
21
|
+
DkimDNSTokenName2: str | None
|
|
22
|
+
DkimDNSTokenName3: str | None
|
|
23
|
+
DkimDNSTokenValue1: str | None
|
|
24
|
+
DkimDNSTokenValue2: str | None
|
|
25
|
+
DkimDNSTokenValue3: str | None
|
|
26
|
+
DkimSigningAttributes: DkimSigningAttributes | None
|
|
27
|
+
FeedbackAttributes: FeedbackAttributes | None
|
|
28
|
+
MailFromAttributes: MailFromAttributes | None
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class ConfigurationSetAttributes(TypedDict):
|
|
32
|
-
ConfigurationSetName:
|
|
32
|
+
ConfigurationSetName: str | None
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class DkimSigningAttributes(TypedDict):
|
|
36
|
-
DomainSigningPrivateKey:
|
|
37
|
-
DomainSigningSelector:
|
|
38
|
-
NextSigningKeyLength:
|
|
36
|
+
DomainSigningPrivateKey: str | None
|
|
37
|
+
DomainSigningSelector: str | None
|
|
38
|
+
NextSigningKeyLength: str | None
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class DkimAttributes(TypedDict):
|
|
42
|
-
SigningEnabled:
|
|
42
|
+
SigningEnabled: bool | None
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
class MailFromAttributes(TypedDict):
|
|
46
|
-
BehaviorOnMxFailure:
|
|
47
|
-
MailFromDomain:
|
|
46
|
+
BehaviorOnMxFailure: str | None
|
|
47
|
+
MailFromDomain: str | None
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
class FeedbackAttributes(TypedDict):
|
|
51
|
-
EmailForwardingEnabled:
|
|
51
|
+
EmailForwardingEnabled: bool | None
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
REPEATED_INVOCATION = "repeated_invocation"
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
|
-
|
|
3
1
|
from localstack.services.cloudformation.resource_provider import (
|
|
4
2
|
CloudFormationResourceProviderPlugin,
|
|
5
3
|
ResourceProvider,
|
|
@@ -10,7 +8,7 @@ class SESEmailIdentityProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::SES::EmailIdentity"
|
|
11
9
|
|
|
12
10
|
def __init__(self):
|
|
13
|
-
self.factory:
|
|
11
|
+
self.factory: type[ResourceProvider] | None = None
|
|
14
12
|
|
|
15
13
|
def load(self):
|
|
16
14
|
from localstack.services.ses.resource_providers.aws_ses_emailidentity import (
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import re
|
|
2
2
|
from string import ascii_letters, digits
|
|
3
|
+
from typing import get_args
|
|
4
|
+
|
|
5
|
+
from localstack.services.sns.v2.models import SnsApplicationPlatforms
|
|
3
6
|
|
|
4
7
|
SNS_PROTOCOLS = [
|
|
5
8
|
"http",
|
|
@@ -13,7 +16,7 @@ SNS_PROTOCOLS = [
|
|
|
13
16
|
"firehose",
|
|
14
17
|
]
|
|
15
18
|
|
|
16
|
-
VALID_SUBSCRIPTION_ATTR_NAME = [
|
|
19
|
+
VALID_SUBSCRIPTION_ATTR_NAME: list[str] = [
|
|
17
20
|
"DeliveryPolicy",
|
|
18
21
|
"FilterPolicy",
|
|
19
22
|
"FilterPolicyScope",
|
|
@@ -39,3 +42,6 @@ SUBSCRIPTION_TOKENS_ENDPOINT = "/_aws/sns/subscription-tokens"
|
|
|
39
42
|
SNS_CERT_ENDPOINT = "/_aws/sns/SimpleNotificationService-6c6f63616c737461636b69736e696365.pem"
|
|
40
43
|
|
|
41
44
|
DUMMY_SUBSCRIPTION_PRINCIPAL = "arn:{partition}:iam::{account_id}:user/DummySNSPrincipal"
|
|
45
|
+
E164_REGEX = re.compile(r"^\+?[1-9]\d{1,14}$")
|
|
46
|
+
|
|
47
|
+
VALID_APPLICATION_PLATFORMS = list(get_args(SnsApplicationPlatforms))
|
|
@@ -18,7 +18,10 @@ def _worker(work_queue: queue.Queue):
|
|
|
18
18
|
del work_item
|
|
19
19
|
|
|
20
20
|
except Exception:
|
|
21
|
-
LOG.
|
|
21
|
+
LOG.error(
|
|
22
|
+
"Exception in worker",
|
|
23
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
24
|
+
)
|
|
22
25
|
|
|
23
26
|
|
|
24
27
|
class _WorkItem:
|
|
@@ -31,7 +34,11 @@ class _WorkItem:
|
|
|
31
34
|
try:
|
|
32
35
|
self.fn(*self.args, **self.kwargs)
|
|
33
36
|
except Exception:
|
|
34
|
-
LOG.
|
|
37
|
+
LOG.error(
|
|
38
|
+
"Unhandled Exception in while running %s",
|
|
39
|
+
self.fn.__name__,
|
|
40
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
41
|
+
)
|
|
35
42
|
|
|
36
43
|
|
|
37
44
|
class TopicPartitionedThreadPoolExecutor:
|
|
@@ -2,7 +2,7 @@ import itertools
|
|
|
2
2
|
import time
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
4
|
from enum import StrEnum
|
|
5
|
-
from typing import
|
|
5
|
+
from typing import Literal, TypedDict
|
|
6
6
|
|
|
7
7
|
from localstack.aws.api.sns import (
|
|
8
8
|
MessageAttributeMap,
|
|
@@ -80,18 +80,18 @@ class SnsMessageType(StrEnum):
|
|
|
80
80
|
@dataclass
|
|
81
81
|
class SnsMessage:
|
|
82
82
|
type: SnsMessageType
|
|
83
|
-
message:
|
|
84
|
-
str
|
|
85
|
-
|
|
86
|
-
message_attributes:
|
|
87
|
-
message_structure:
|
|
88
|
-
subject:
|
|
89
|
-
message_deduplication_id:
|
|
90
|
-
message_group_id:
|
|
91
|
-
token:
|
|
83
|
+
message: (
|
|
84
|
+
str | dict
|
|
85
|
+
) # can be Dict if after being JSON decoded for validation if structure is `json`
|
|
86
|
+
message_attributes: MessageAttributeMap | None = None
|
|
87
|
+
message_structure: str | None = None
|
|
88
|
+
subject: str | None = None
|
|
89
|
+
message_deduplication_id: str | None = None
|
|
90
|
+
message_group_id: str | None = None
|
|
91
|
+
token: str | None = None
|
|
92
92
|
message_id: str = field(default_factory=long_uid)
|
|
93
|
-
is_fifo:
|
|
94
|
-
sequencer_number:
|
|
93
|
+
is_fifo: bool | None = False
|
|
94
|
+
sequencer_number: str | None = None
|
|
95
95
|
|
|
96
96
|
def __post_init__(self):
|
|
97
97
|
if self.message_attributes is None:
|
|
@@ -140,39 +140,39 @@ class SnsSubscription(TypedDict, total=False):
|
|
|
140
140
|
Protocol: SnsProtocols
|
|
141
141
|
SubscriptionArn: subscriptionARN
|
|
142
142
|
PendingConfirmation: Literal["true", "false"]
|
|
143
|
-
Owner:
|
|
144
|
-
SubscriptionPrincipal:
|
|
145
|
-
FilterPolicy:
|
|
143
|
+
Owner: str | None
|
|
144
|
+
SubscriptionPrincipal: str | None
|
|
145
|
+
FilterPolicy: str | None
|
|
146
146
|
FilterPolicyScope: Literal["MessageAttributes", "MessageBody"]
|
|
147
147
|
RawMessageDelivery: Literal["true", "false"]
|
|
148
148
|
ConfirmationWasAuthenticated: Literal["true", "false"]
|
|
149
|
-
SubscriptionRoleArn:
|
|
150
|
-
DeliveryPolicy:
|
|
149
|
+
SubscriptionRoleArn: str | None
|
|
150
|
+
DeliveryPolicy: str | None
|
|
151
151
|
|
|
152
152
|
|
|
153
153
|
class SnsStore(BaseStore):
|
|
154
154
|
# maps topic ARN to subscriptions ARN
|
|
155
|
-
topic_subscriptions:
|
|
155
|
+
topic_subscriptions: dict[str, list[str]] = LocalAttribute(default=dict)
|
|
156
156
|
|
|
157
157
|
# maps subscription ARN to SnsSubscription
|
|
158
|
-
subscriptions:
|
|
158
|
+
subscriptions: dict[str, SnsSubscription] = LocalAttribute(default=dict)
|
|
159
159
|
|
|
160
160
|
# maps confirmation token to subscription ARN
|
|
161
|
-
subscription_tokens:
|
|
161
|
+
subscription_tokens: dict[str, str] = LocalAttribute(default=dict)
|
|
162
162
|
|
|
163
163
|
# maps topic ARN to list of tags
|
|
164
|
-
sns_tags:
|
|
164
|
+
sns_tags: dict[str, list[dict]] = LocalAttribute(default=dict)
|
|
165
165
|
|
|
166
166
|
# cache of topic ARN to platform endpoint messages (used primarily for testing)
|
|
167
|
-
platform_endpoint_messages:
|
|
167
|
+
platform_endpoint_messages: dict[str, list[dict]] = LocalAttribute(default=dict)
|
|
168
168
|
|
|
169
169
|
# list of sent SMS messages
|
|
170
|
-
sms_messages:
|
|
170
|
+
sms_messages: list[dict] = LocalAttribute(default=list)
|
|
171
171
|
|
|
172
172
|
# filter policy are stored as JSON string in subscriptions, store the decoded result Dict
|
|
173
|
-
subscription_filter_policy:
|
|
173
|
+
subscription_filter_policy: dict[subscriptionARN, dict] = LocalAttribute(default=dict)
|
|
174
174
|
|
|
175
|
-
def get_topic_subscriptions(self, topic_arn: str) ->
|
|
175
|
+
def get_topic_subscriptions(self, topic_arn: str) -> list[SnsSubscription]:
|
|
176
176
|
topic_subscriptions = self.topic_subscriptions.get(topic_arn, [])
|
|
177
177
|
subscriptions = [
|
|
178
178
|
subscription
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import base64
|
|
2
|
+
import contextlib
|
|
2
3
|
import copy
|
|
3
4
|
import functools
|
|
4
5
|
import json
|
|
5
6
|
import logging
|
|
6
|
-
from typing import Dict, List
|
|
7
7
|
from uuid import uuid4
|
|
8
8
|
|
|
9
9
|
from botocore.utils import InvalidArnException
|
|
@@ -420,6 +420,10 @@ class SnsProvider(SnsApi, ServiceLifecycleHook):
|
|
|
420
420
|
def unsubscribe(
|
|
421
421
|
self, context: RequestContext, subscription_arn: subscriptionARN, **kwargs
|
|
422
422
|
) -> None:
|
|
423
|
+
if subscription_arn is None:
|
|
424
|
+
raise InvalidParameterException(
|
|
425
|
+
"Invalid parameter: SubscriptionArn Reason: no value for required parameter",
|
|
426
|
+
)
|
|
423
427
|
count = len(subscription_arn.split(":"))
|
|
424
428
|
try:
|
|
425
429
|
parsed_arn = parse_arn(subscription_arn)
|
|
@@ -470,7 +474,8 @@ class SnsProvider(SnsApi, ServiceLifecycleHook):
|
|
|
470
474
|
subscription_arn=subscription_arn,
|
|
471
475
|
)
|
|
472
476
|
|
|
473
|
-
|
|
477
|
+
with contextlib.suppress(ValueError):
|
|
478
|
+
store.topic_subscriptions[subscription["TopicArn"]].remove(subscription_arn)
|
|
474
479
|
store.subscription_filter_policy.pop(subscription_arn, None)
|
|
475
480
|
store.subscriptions.pop(subscription_arn, None)
|
|
476
481
|
|
|
@@ -584,10 +589,7 @@ class SnsProvider(SnsApi, ServiceLifecycleHook):
|
|
|
584
589
|
raise InvalidParameterException(
|
|
585
590
|
"Invalid parameter: MessageDeduplicationId Reason: The request includes MessageDeduplicationId parameter that is not valid for this topic type"
|
|
586
591
|
)
|
|
587
|
-
|
|
588
|
-
raise InvalidParameterException(
|
|
589
|
-
"Invalid parameter: MessageGroupId Reason: The request includes MessageGroupId parameter that is not valid for this topic type"
|
|
590
|
-
)
|
|
592
|
+
|
|
591
593
|
is_endpoint_publish = target_arn and ":endpoint/" in target_arn
|
|
592
594
|
if message_structure == "json":
|
|
593
595
|
try:
|
|
@@ -1130,7 +1132,7 @@ def register_sns_api_resource(router: Router):
|
|
|
1130
1132
|
router.add(SNSServiceSubscriptionTokenApiResource())
|
|
1131
1133
|
|
|
1132
1134
|
|
|
1133
|
-
def _format_messages(sent_messages:
|
|
1135
|
+
def _format_messages(sent_messages: list[dict[str, str]], validated_keys: list[str]):
|
|
1134
1136
|
"""
|
|
1135
1137
|
This method format the messages to be more readable and undo the format change that was needed for Moto
|
|
1136
1138
|
Should be removed once we refactor SNS.
|
|
@@ -9,7 +9,6 @@ import time
|
|
|
9
9
|
import traceback
|
|
10
10
|
from concurrent.futures import ThreadPoolExecutor
|
|
11
11
|
from dataclasses import dataclass, field
|
|
12
|
-
from typing import Dict, List, Tuple, Union
|
|
13
12
|
|
|
14
13
|
import requests
|
|
15
14
|
from cryptography.hazmat.primitives import hashes
|
|
@@ -61,9 +60,9 @@ class SnsPublishContext:
|
|
|
61
60
|
|
|
62
61
|
@dataclass
|
|
63
62
|
class SnsBatchPublishContext:
|
|
64
|
-
messages:
|
|
63
|
+
messages: list[SnsMessage]
|
|
65
64
|
store: SnsStore
|
|
66
|
-
request_headers:
|
|
65
|
+
request_headers: dict[str, str]
|
|
67
66
|
topic_attributes: dict[str, str] = field(default_factory=dict)
|
|
68
67
|
|
|
69
68
|
|
|
@@ -90,9 +89,10 @@ class TopicPublisher(abc.ABC):
|
|
|
90
89
|
try:
|
|
91
90
|
self._publish(context=context, subscriber=subscriber)
|
|
92
91
|
except Exception:
|
|
93
|
-
LOG.
|
|
92
|
+
LOG.error(
|
|
94
93
|
"An internal error occurred while trying to send the SNS message %s",
|
|
95
94
|
context.message,
|
|
95
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
96
96
|
)
|
|
97
97
|
return
|
|
98
98
|
|
|
@@ -148,9 +148,10 @@ class EndpointPublisher(abc.ABC):
|
|
|
148
148
|
try:
|
|
149
149
|
self._publish(context=context, endpoint=endpoint)
|
|
150
150
|
except Exception:
|
|
151
|
-
LOG.
|
|
151
|
+
LOG.error(
|
|
152
152
|
"An internal error occurred while trying to send the SNS message %s",
|
|
153
153
|
context.message,
|
|
154
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
154
155
|
)
|
|
155
156
|
return
|
|
156
157
|
|
|
@@ -296,7 +297,10 @@ class SqsTopicPublisher(TopicPublisher):
|
|
|
296
297
|
)
|
|
297
298
|
kwargs = self.get_sqs_kwargs(msg_context=message_context, subscriber=subscriber)
|
|
298
299
|
except Exception:
|
|
299
|
-
LOG.
|
|
300
|
+
LOG.error(
|
|
301
|
+
"An internal error occurred while trying to format the message for SQS",
|
|
302
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
303
|
+
)
|
|
300
304
|
return
|
|
301
305
|
try:
|
|
302
306
|
queue_url: str = sqs_queue_url_for_arn(subscriber["Endpoint"])
|
|
@@ -336,19 +340,29 @@ class SqsTopicPublisher(TopicPublisher):
|
|
|
336
340
|
|
|
337
341
|
# SNS now allows regular non-fifo subscriptions to FIFO topics. Validate that the subscription target is fifo
|
|
338
342
|
# before passing the FIFO-only parameters
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
343
|
+
|
|
344
|
+
# SNS will only forward the `MessageGroupId` for Fair Queues in some scenarios:
|
|
345
|
+
# - non-FIFO SNS topic to Fair Queue
|
|
346
|
+
# - FIFO topic to FIFO queue
|
|
347
|
+
# It will NOT forward it with FIFO topic to regular Queue (possibly used for internal grouping without relying
|
|
348
|
+
# on SQS capabilities)
|
|
349
|
+
if subscriber["TopicArn"].endswith(".fifo"):
|
|
350
|
+
if subscriber["Endpoint"].endswith(".fifo"):
|
|
351
|
+
if msg_context.message_group_id:
|
|
352
|
+
kwargs["MessageGroupId"] = msg_context.message_group_id
|
|
353
|
+
if msg_context.message_deduplication_id:
|
|
354
|
+
kwargs["MessageDeduplicationId"] = msg_context.message_deduplication_id
|
|
355
|
+
else:
|
|
356
|
+
# SNS uses the message body provided to generate a unique hash value to use as the deduplication ID
|
|
357
|
+
# for each message, so you don't need to set a deduplication ID when you send each message.
|
|
358
|
+
# https://docs.aws.amazon.com/sns/latest/dg/fifo-message-dedup.html
|
|
359
|
+
content = msg_context.message_content("sqs")
|
|
360
|
+
kwargs["MessageDeduplicationId"] = hashlib.sha256(
|
|
361
|
+
content.encode("utf-8")
|
|
362
|
+
).hexdigest()
|
|
363
|
+
|
|
364
|
+
elif msg_context.message_group_id:
|
|
365
|
+
kwargs["MessageGroupId"] = msg_context.message_group_id
|
|
352
366
|
|
|
353
367
|
# TODO: for message deduplication, we are using the underlying features of the SQS queue
|
|
354
368
|
# however, SQS queue only deduplicate at the Queue level, where the SNS topic deduplicate on the topic level
|
|
@@ -818,7 +832,7 @@ class ApplicationEndpointPublisher(EndpointPublisher):
|
|
|
818
832
|
# TODO: see about delivery log for individual endpoint message, need credentials for testing
|
|
819
833
|
# store_delivery_log(subscriber, context, success=True)
|
|
820
834
|
|
|
821
|
-
def prepare_message(self, message_context: SnsMessage, endpoint: str) ->
|
|
835
|
+
def prepare_message(self, message_context: SnsMessage, endpoint: str) -> str | dict:
|
|
822
836
|
platform_type = get_platform_type_from_endpoint_arn(endpoint)
|
|
823
837
|
return {
|
|
824
838
|
"TargetArn": endpoint,
|
|
@@ -862,7 +876,7 @@ def get_application_platform_arn_from_endpoint_arn(endpoint_arn: str) -> str:
|
|
|
862
876
|
return f"{base_arn}:app/{platform_type}/{app_name}"
|
|
863
877
|
|
|
864
878
|
|
|
865
|
-
def get_attributes_for_application_endpoint(endpoint_arn: str) ->
|
|
879
|
+
def get_attributes_for_application_endpoint(endpoint_arn: str) -> tuple[dict, dict]:
|
|
866
880
|
"""
|
|
867
881
|
Retrieve the attributes necessary to send a message directly to the platform (credentials and token)
|
|
868
882
|
:param endpoint_arn:
|
|
@@ -883,7 +897,7 @@ def get_attributes_for_application_endpoint(endpoint_arn: str) -> Tuple[Dict, Di
|
|
|
883
897
|
|
|
884
898
|
|
|
885
899
|
def send_message_to_gcm(
|
|
886
|
-
context: SnsPublishContext, app_attributes:
|
|
900
|
+
context: SnsPublishContext, app_attributes: dict[str, str], endpoint_attributes: dict[str, str]
|
|
887
901
|
) -> None:
|
|
888
902
|
"""
|
|
889
903
|
Send the message directly to GCM, with the credentials used when creating the PlatformApplication and the Endpoint
|
|
@@ -1014,7 +1028,7 @@ def create_sns_message_body(
|
|
|
1014
1028
|
|
|
1015
1029
|
def prepare_message_attributes(
|
|
1016
1030
|
message_attributes: MessageAttributeMap,
|
|
1017
|
-
) ->
|
|
1031
|
+
) -> dict[str, dict[str, str]]:
|
|
1018
1032
|
attributes = {}
|
|
1019
1033
|
if not message_attributes:
|
|
1020
1034
|
return attributes
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import json
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import TypedDict
|
|
7
7
|
|
|
8
8
|
import localstack.services.cloudformation.provider_utils as util
|
|
9
9
|
from localstack import config
|
|
@@ -18,18 +18,18 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class SNSSubscriptionProperties(TypedDict):
|
|
21
|
-
Protocol:
|
|
22
|
-
TopicArn:
|
|
23
|
-
DeliveryPolicy:
|
|
24
|
-
Endpoint:
|
|
25
|
-
FilterPolicy:
|
|
26
|
-
FilterPolicyScope:
|
|
27
|
-
Id:
|
|
28
|
-
RawMessageDelivery:
|
|
29
|
-
RedrivePolicy:
|
|
30
|
-
Region:
|
|
31
|
-
ReplayPolicy:
|
|
32
|
-
SubscriptionRoleArn:
|
|
21
|
+
Protocol: str | None
|
|
22
|
+
TopicArn: str | None
|
|
23
|
+
DeliveryPolicy: dict | None
|
|
24
|
+
Endpoint: str | None
|
|
25
|
+
FilterPolicy: dict | None
|
|
26
|
+
FilterPolicyScope: str | None
|
|
27
|
+
Id: str | None
|
|
28
|
+
RawMessageDelivery: bool | None
|
|
29
|
+
RedrivePolicy: dict | None
|
|
30
|
+
Region: str | None
|
|
31
|
+
ReplayPolicy: dict | None
|
|
32
|
+
SubscriptionRoleArn: str | None
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
REPEATED_INVOCATION = "repeated_invocation"
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
|
-
|
|
3
1
|
from localstack.services.cloudformation.resource_provider import (
|
|
4
2
|
CloudFormationResourceProviderPlugin,
|
|
5
3
|
ResourceProvider,
|
|
@@ -10,7 +8,7 @@ class SNSSubscriptionProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::SNS::Subscription"
|
|
11
9
|
|
|
12
10
|
def __init__(self):
|
|
13
|
-
self.factory:
|
|
11
|
+
self.factory: type[ResourceProvider] | None = None
|
|
14
12
|
|
|
15
13
|
def load(self):
|
|
16
14
|
from localstack.services.sns.resource_providers.aws_sns_subscription import (
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import json
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import TypedDict
|
|
7
7
|
|
|
8
8
|
import localstack.services.cloudformation.provider_utils as util
|
|
9
9
|
from localstack.services.cloudformation.resource_provider import (
|
|
@@ -16,27 +16,27 @@ from localstack.utils.strings import canonicalize_bool_to_str, short_uid
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class SNSTopicProperties(TypedDict):
|
|
19
|
-
ContentBasedDeduplication:
|
|
20
|
-
DataProtectionPolicy:
|
|
21
|
-
DisplayName:
|
|
22
|
-
FifoTopic:
|
|
23
|
-
KmsMasterKeyId:
|
|
24
|
-
SignatureVersion:
|
|
25
|
-
Subscription:
|
|
26
|
-
Tags:
|
|
27
|
-
TopicArn:
|
|
28
|
-
TopicName:
|
|
29
|
-
TracingConfig:
|
|
19
|
+
ContentBasedDeduplication: bool | None
|
|
20
|
+
DataProtectionPolicy: dict | None
|
|
21
|
+
DisplayName: str | None
|
|
22
|
+
FifoTopic: bool | None
|
|
23
|
+
KmsMasterKeyId: str | None
|
|
24
|
+
SignatureVersion: str | None
|
|
25
|
+
Subscription: list[Subscription] | None
|
|
26
|
+
Tags: list[Tag] | None
|
|
27
|
+
TopicArn: str | None
|
|
28
|
+
TopicName: str | None
|
|
29
|
+
TracingConfig: str | None
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class Subscription(TypedDict):
|
|
33
|
-
Endpoint:
|
|
34
|
-
Protocol:
|
|
33
|
+
Endpoint: str | None
|
|
34
|
+
Protocol: str | None
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class Tag(TypedDict):
|
|
38
|
-
Key:
|
|
39
|
-
Value:
|
|
38
|
+
Key: str | None
|
|
39
|
+
Value: str | None
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
REPEATED_INVOCATION = "repeated_invocation"
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
|
-
|
|
3
1
|
from localstack.services.cloudformation.resource_provider import (
|
|
4
2
|
CloudFormationResourceProviderPlugin,
|
|
5
3
|
ResourceProvider,
|
|
@@ -10,7 +8,7 @@ class SNSTopicProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::SNS::Topic"
|
|
11
9
|
|
|
12
10
|
def __init__(self):
|
|
13
|
-
self.factory:
|
|
11
|
+
self.factory: type[ResourceProvider] | None = None
|
|
14
12
|
|
|
15
13
|
def load(self):
|
|
16
14
|
from localstack.services.sns.resource_providers.aws_sns_topic import SNSTopicProvider
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import json
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import TypedDict
|
|
7
7
|
|
|
8
8
|
from botocore.exceptions import ClientError
|
|
9
9
|
|
|
@@ -18,9 +18,9 @@ from localstack.services.sns.models import create_default_sns_topic_policy
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class SNSTopicPolicyProperties(TypedDict):
|
|
21
|
-
PolicyDocument:
|
|
22
|
-
Topics:
|
|
23
|
-
Id:
|
|
21
|
+
PolicyDocument: dict | str | None
|
|
22
|
+
Topics: list[str] | None
|
|
23
|
+
Id: str | None
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
REPEATED_INVOCATION = "repeated_invocation"
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
|
-
|
|
3
1
|
from localstack.services.cloudformation.resource_provider import (
|
|
4
2
|
CloudFormationResourceProviderPlugin,
|
|
5
3
|
ResourceProvider,
|
|
@@ -10,7 +8,7 @@ class SNSTopicPolicyProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::SNS::TopicPolicy"
|
|
11
9
|
|
|
12
10
|
def __init__(self):
|
|
13
|
-
self.factory:
|
|
11
|
+
self.factory: type[ResourceProvider] | None = None
|
|
14
12
|
|
|
15
13
|
def load(self):
|
|
16
14
|
from localstack.services.sns.resource_providers.aws_sns_topicpolicy import (
|