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,5 +1,4 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from typing import List
|
|
3
2
|
|
|
4
3
|
from localstack import config
|
|
5
4
|
from localstack.constants import ARTIFACTS_REPO, MAVEN_REPO_URL
|
|
@@ -18,7 +17,8 @@ from localstack.utils.run import run
|
|
|
18
17
|
DDB_AGENT_JAR_URL = f"{ARTIFACTS_REPO}/raw/e4e8c8e294b1fcda90c678ff6af5d5ebe1f091eb/dynamodb-local-patch/target/ddb-local-loader-0.2.jar"
|
|
19
18
|
JAVASSIST_JAR_URL = f"{MAVEN_REPO_URL}/org/javassist/javassist/3.30.2-GA/javassist-3.30.2-GA.jar"
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
# URL points to 2.x here - however the latest 3.x builds are available under this URL
|
|
21
|
+
DDBLOCAL_URL = "https://d1ni2b6xgvw0s0.cloudfront.net/v2.x/dynamodb_local_latest.zip"
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class DynamoDBLocalPackage(Package):
|
|
@@ -28,7 +28,7 @@ class DynamoDBLocalPackage(Package):
|
|
|
28
28
|
def _get_installer(self, _) -> PackageInstaller:
|
|
29
29
|
return DynamoDBLocalPackageInstaller()
|
|
30
30
|
|
|
31
|
-
def get_versions(self) ->
|
|
31
|
+
def get_versions(self) -> list[str]:
|
|
32
32
|
return ["2"]
|
|
33
33
|
|
|
34
34
|
|
|
@@ -12,7 +12,6 @@ from concurrent.futures import ThreadPoolExecutor
|
|
|
12
12
|
from contextlib import contextmanager
|
|
13
13
|
from datetime import datetime
|
|
14
14
|
from operator import itemgetter
|
|
15
|
-
from typing import Dict, List, Optional
|
|
16
15
|
|
|
17
16
|
import requests
|
|
18
17
|
import werkzeug
|
|
@@ -27,6 +26,7 @@ from localstack.aws.api import (
|
|
|
27
26
|
handler,
|
|
28
27
|
)
|
|
29
28
|
from localstack.aws.api.dynamodb import (
|
|
29
|
+
ApproximateCreationDateTimePrecision,
|
|
30
30
|
AttributeMap,
|
|
31
31
|
BatchExecuteStatementOutput,
|
|
32
32
|
BatchGetItemOutput,
|
|
@@ -47,6 +47,8 @@ from localstack.aws.api.dynamodb import (
|
|
|
47
47
|
DeleteRequest,
|
|
48
48
|
DeleteTableOutput,
|
|
49
49
|
DescribeContinuousBackupsOutput,
|
|
50
|
+
DescribeContributorInsightsInput,
|
|
51
|
+
DescribeContributorInsightsOutput,
|
|
50
52
|
DescribeGlobalTableOutput,
|
|
51
53
|
DescribeKinesisStreamingDestinationOutput,
|
|
52
54
|
DescribeTableOutput,
|
|
@@ -92,6 +94,7 @@ from localstack.aws.api.dynamodb import (
|
|
|
92
94
|
ScanInput,
|
|
93
95
|
ScanOutput,
|
|
94
96
|
StreamArn,
|
|
97
|
+
TableArn,
|
|
95
98
|
TableDescription,
|
|
96
99
|
TableName,
|
|
97
100
|
TagKeyList,
|
|
@@ -108,6 +111,8 @@ from localstack.aws.api.dynamodb import (
|
|
|
108
111
|
UpdateGlobalTableOutput,
|
|
109
112
|
UpdateItemInput,
|
|
110
113
|
UpdateItemOutput,
|
|
114
|
+
UpdateKinesisStreamingConfiguration,
|
|
115
|
+
UpdateKinesisStreamingDestinationOutput,
|
|
111
116
|
UpdateTableInput,
|
|
112
117
|
UpdateTableOutput,
|
|
113
118
|
UpdateTimeToLiveOutput,
|
|
@@ -488,7 +493,7 @@ class ExpiredItemsWorker:
|
|
|
488
493
|
def __init__(self) -> None:
|
|
489
494
|
super().__init__()
|
|
490
495
|
self.scheduler = Scheduler()
|
|
491
|
-
self.thread:
|
|
496
|
+
self.thread: FuncThread | None = None
|
|
492
497
|
self.mutex = threading.RLock()
|
|
493
498
|
|
|
494
499
|
def start(self):
|
|
@@ -743,6 +748,9 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
743
748
|
if "NumberOfDecreasesToday" not in table_description["ProvisionedThroughput"]:
|
|
744
749
|
table_description["ProvisionedThroughput"]["NumberOfDecreasesToday"] = 0
|
|
745
750
|
|
|
751
|
+
if "WarmThroughput" in table_description:
|
|
752
|
+
table_description["WarmThroughput"]["Status"] = "UPDATING"
|
|
753
|
+
|
|
746
754
|
tags = table_definitions.pop("Tags", [])
|
|
747
755
|
if tags:
|
|
748
756
|
get_store(context.account_id, context.region).TABLE_TAGS[table_arn] = {
|
|
@@ -760,6 +768,13 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
760
768
|
) -> DeleteTableOutput:
|
|
761
769
|
global_table_region = self.get_global_table_region(context, table_name)
|
|
762
770
|
|
|
771
|
+
self.ensure_table_exists(
|
|
772
|
+
context.account_id,
|
|
773
|
+
global_table_region,
|
|
774
|
+
table_name,
|
|
775
|
+
error_message=f"Requested resource not found: Table: {table_name} not found",
|
|
776
|
+
)
|
|
777
|
+
|
|
763
778
|
# Limitation note: On AWS, for a replicated table, if the source table is deleted, the replicated tables continue to exist.
|
|
764
779
|
# This is not the case for LocalStack, where all replicated tables will also be removed if source is deleted.
|
|
765
780
|
|
|
@@ -792,7 +807,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
792
807
|
store = get_store(context.account_id, context.region)
|
|
793
808
|
|
|
794
809
|
# Update replication details
|
|
795
|
-
replicas:
|
|
810
|
+
replicas: dict[RegionName, ReplicaDescription] = store.REPLICAS.get(table_name, {})
|
|
796
811
|
|
|
797
812
|
replica_description_list = []
|
|
798
813
|
|
|
@@ -820,6 +835,9 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
820
835
|
table_description["TableClassSummary"] = {
|
|
821
836
|
"TableClass": table_definitions["TableClass"]
|
|
822
837
|
}
|
|
838
|
+
if warm_throughput := table_definitions.get("WarmThroughput"):
|
|
839
|
+
table_description["WarmThroughput"] = warm_throughput.copy()
|
|
840
|
+
table_description["WarmThroughput"].setdefault("Status", "ACTIVE")
|
|
823
841
|
|
|
824
842
|
if "GlobalSecondaryIndexes" in table_description:
|
|
825
843
|
for gsi in table_description["GlobalSecondaryIndexes"]:
|
|
@@ -832,6 +850,17 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
832
850
|
# Terraform depends on this parity for update operations
|
|
833
851
|
gsi["ProvisionedThroughput"] = default_values | gsi.get("ProvisionedThroughput", {})
|
|
834
852
|
|
|
853
|
+
# Set defaults for warm throughput
|
|
854
|
+
if "WarmThroughput" not in table_description:
|
|
855
|
+
billing_mode = table_definitions.get("BillingMode") if table_definitions else None
|
|
856
|
+
table_description["WarmThroughput"] = {
|
|
857
|
+
"ReadUnitsPerSecond": 12000 if billing_mode == "PAY_PER_REQUEST" else 5,
|
|
858
|
+
"WriteUnitsPerSecond": 4000 if billing_mode == "PAY_PER_REQUEST" else 5,
|
|
859
|
+
}
|
|
860
|
+
table_description["WarmThroughput"]["Status"] = (
|
|
861
|
+
table_description.get("TableStatus") or "ACTIVE"
|
|
862
|
+
)
|
|
863
|
+
|
|
835
864
|
return DescribeTableOutput(
|
|
836
865
|
Table=select_from_typed_dict(TableDescription, table_description)
|
|
837
866
|
)
|
|
@@ -861,7 +890,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
861
890
|
store = get_store(context.account_id, global_table_region)
|
|
862
891
|
|
|
863
892
|
# Dict with source region to set of replicated regions
|
|
864
|
-
replicas:
|
|
893
|
+
replicas: dict[RegionName, ReplicaDescription] = store.REPLICAS.get(table_name, {})
|
|
865
894
|
|
|
866
895
|
for replica_update in replica_updates:
|
|
867
896
|
for key, details in replica_update.items():
|
|
@@ -952,6 +981,22 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
952
981
|
|
|
953
982
|
return response
|
|
954
983
|
|
|
984
|
+
#
|
|
985
|
+
# Contributor Insights
|
|
986
|
+
#
|
|
987
|
+
|
|
988
|
+
@handler("DescribeContributorInsights", expand=False)
|
|
989
|
+
def describe_contributor_insights(
|
|
990
|
+
self,
|
|
991
|
+
context: RequestContext,
|
|
992
|
+
describe_contributor_insights_input: DescribeContributorInsightsInput,
|
|
993
|
+
) -> DescribeContributorInsightsOutput:
|
|
994
|
+
return DescribeContributorInsightsOutput(
|
|
995
|
+
TableName=describe_contributor_insights_input["TableName"],
|
|
996
|
+
IndexName=describe_contributor_insights_input.get("IndexName"),
|
|
997
|
+
ContributorInsightsStatus="DISABLED",
|
|
998
|
+
)
|
|
999
|
+
|
|
955
1000
|
#
|
|
956
1001
|
# Item ops
|
|
957
1002
|
#
|
|
@@ -1508,7 +1553,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1508
1553
|
replication_group: ReplicaList,
|
|
1509
1554
|
**kwargs,
|
|
1510
1555
|
) -> CreateGlobalTableOutput:
|
|
1511
|
-
global_tables:
|
|
1556
|
+
global_tables: dict = get_store(context.account_id, context.region).GLOBAL_TABLES
|
|
1512
1557
|
if global_table_name in global_tables:
|
|
1513
1558
|
raise GlobalTableAlreadyExistsException("Global table with this name already exists")
|
|
1514
1559
|
replication_group = [grp.copy() for grp in replication_group or []]
|
|
@@ -1586,7 +1631,15 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1586
1631
|
enable_kinesis_streaming_configuration: EnableKinesisStreamingConfiguration = None,
|
|
1587
1632
|
**kwargs,
|
|
1588
1633
|
) -> KinesisStreamingDestinationOutput:
|
|
1589
|
-
self.ensure_table_exists(
|
|
1634
|
+
self.ensure_table_exists(
|
|
1635
|
+
context.account_id,
|
|
1636
|
+
context.region,
|
|
1637
|
+
table_name,
|
|
1638
|
+
error_message=f"Requested resource not found: Table: {table_name} not found",
|
|
1639
|
+
)
|
|
1640
|
+
|
|
1641
|
+
# TODO: Use the time precision in config if set
|
|
1642
|
+
enable_kinesis_streaming_configuration = enable_kinesis_streaming_configuration or {}
|
|
1590
1643
|
|
|
1591
1644
|
stream = self._event_forwarder.is_kinesis_stream_exists(stream_arn=stream_arn)
|
|
1592
1645
|
if not stream:
|
|
@@ -1604,9 +1657,8 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1604
1657
|
"to perform ENABLE operation."
|
|
1605
1658
|
)
|
|
1606
1659
|
|
|
1607
|
-
table_def
|
|
1608
|
-
|
|
1609
|
-
)
|
|
1660
|
+
table_def.setdefault("KinesisDataStreamDestinations", [])
|
|
1661
|
+
|
|
1610
1662
|
# remove the stream destination if already present
|
|
1611
1663
|
table_def["KinesisDataStreamDestinations"] = [
|
|
1612
1664
|
t for t in table_def["KinesisDataStreamDestinations"] if t["StreamArn"] != stream_arn
|
|
@@ -1617,11 +1669,15 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1617
1669
|
"DestinationStatus": DestinationStatus.ACTIVE,
|
|
1618
1670
|
"DestinationStatusDescription": "Stream is active",
|
|
1619
1671
|
"StreamArn": stream_arn,
|
|
1672
|
+
"ApproximateCreationDateTimePrecision": ApproximateCreationDateTimePrecision.MILLISECOND,
|
|
1620
1673
|
}
|
|
1621
1674
|
)
|
|
1622
1675
|
table_def["KinesisDataStreamDestinationStatus"] = DestinationStatus.ACTIVE
|
|
1623
1676
|
return KinesisStreamingDestinationOutput(
|
|
1624
|
-
DestinationStatus=DestinationStatus.
|
|
1677
|
+
DestinationStatus=DestinationStatus.ENABLING,
|
|
1678
|
+
StreamArn=stream_arn,
|
|
1679
|
+
TableName=table_name,
|
|
1680
|
+
EnableKinesisStreamingConfiguration=enable_kinesis_streaming_configuration,
|
|
1625
1681
|
)
|
|
1626
1682
|
|
|
1627
1683
|
def disable_kinesis_streaming_destination(
|
|
@@ -1632,7 +1688,14 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1632
1688
|
enable_kinesis_streaming_configuration: EnableKinesisStreamingConfiguration = None,
|
|
1633
1689
|
**kwargs,
|
|
1634
1690
|
) -> KinesisStreamingDestinationOutput:
|
|
1635
|
-
self.ensure_table_exists(
|
|
1691
|
+
self.ensure_table_exists(
|
|
1692
|
+
context.account_id,
|
|
1693
|
+
context.region,
|
|
1694
|
+
table_name,
|
|
1695
|
+
error_message=f"Requested resource not found: Table: {table_name} not found",
|
|
1696
|
+
)
|
|
1697
|
+
|
|
1698
|
+
# TODO: Must raise if invoked before KinesisStreamingDestination is ACTIVE
|
|
1636
1699
|
|
|
1637
1700
|
stream = self._event_forwarder.is_kinesis_stream_exists(stream_arn=stream_arn)
|
|
1638
1701
|
if not stream:
|
|
@@ -1656,7 +1719,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1656
1719
|
dest["DestinationStatusDescription"] = ("Stream is disabled",)
|
|
1657
1720
|
table_def["KinesisDataStreamDestinationStatus"] = DestinationStatus.DISABLED
|
|
1658
1721
|
return KinesisStreamingDestinationOutput(
|
|
1659
|
-
DestinationStatus=DestinationStatus.
|
|
1722
|
+
DestinationStatus=DestinationStatus.DISABLING,
|
|
1660
1723
|
StreamArn=stream_arn,
|
|
1661
1724
|
TableName=table_name,
|
|
1662
1725
|
)
|
|
@@ -1675,8 +1738,81 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1675
1738
|
)
|
|
1676
1739
|
|
|
1677
1740
|
stream_destinations = table_def.get("KinesisDataStreamDestinations") or []
|
|
1741
|
+
stream_destinations = copy.deepcopy(stream_destinations)
|
|
1742
|
+
|
|
1743
|
+
for destination in stream_destinations:
|
|
1744
|
+
destination.pop("ApproximateCreationDateTimePrecision", None)
|
|
1745
|
+
destination.pop("DestinationStatusDescription", None)
|
|
1746
|
+
|
|
1678
1747
|
return DescribeKinesisStreamingDestinationOutput(
|
|
1679
|
-
KinesisDataStreamDestinations=stream_destinations,
|
|
1748
|
+
KinesisDataStreamDestinations=stream_destinations,
|
|
1749
|
+
TableName=table_name,
|
|
1750
|
+
)
|
|
1751
|
+
|
|
1752
|
+
def update_kinesis_streaming_destination(
|
|
1753
|
+
self,
|
|
1754
|
+
context: RequestContext,
|
|
1755
|
+
table_name: TableArn,
|
|
1756
|
+
stream_arn: StreamArn,
|
|
1757
|
+
update_kinesis_streaming_configuration: UpdateKinesisStreamingConfiguration | None = None,
|
|
1758
|
+
**kwargs,
|
|
1759
|
+
) -> UpdateKinesisStreamingDestinationOutput:
|
|
1760
|
+
self.ensure_table_exists(context.account_id, context.region, table_name)
|
|
1761
|
+
|
|
1762
|
+
if not update_kinesis_streaming_configuration:
|
|
1763
|
+
raise ValidationException(
|
|
1764
|
+
"Streaming destination cannot be updated with given parameters: "
|
|
1765
|
+
"UpdateKinesisStreamingConfiguration cannot be null or contain only null values"
|
|
1766
|
+
)
|
|
1767
|
+
|
|
1768
|
+
time_precision = update_kinesis_streaming_configuration.get(
|
|
1769
|
+
"ApproximateCreationDateTimePrecision"
|
|
1770
|
+
)
|
|
1771
|
+
if time_precision not in (
|
|
1772
|
+
ApproximateCreationDateTimePrecision.MILLISECOND,
|
|
1773
|
+
ApproximateCreationDateTimePrecision.MICROSECOND,
|
|
1774
|
+
):
|
|
1775
|
+
raise ValidationException(
|
|
1776
|
+
f"1 validation error detected: Value '{time_precision}' at "
|
|
1777
|
+
"'updateKinesisStreamingConfiguration.approximateCreationDateTimePrecision' failed to satisfy constraint: "
|
|
1778
|
+
"Member must satisfy enum value set: [MILLISECOND, MICROSECOND]"
|
|
1779
|
+
)
|
|
1780
|
+
|
|
1781
|
+
store = get_store(context.account_id, context.region)
|
|
1782
|
+
|
|
1783
|
+
table_def = store.table_definitions.get(table_name) or {}
|
|
1784
|
+
table_def.setdefault("KinesisDataStreamDestinations", [])
|
|
1785
|
+
|
|
1786
|
+
table_id = table_def["TableId"]
|
|
1787
|
+
|
|
1788
|
+
destination = None
|
|
1789
|
+
for stream in table_def["KinesisDataStreamDestinations"]:
|
|
1790
|
+
if stream["StreamArn"] == stream_arn:
|
|
1791
|
+
destination = stream
|
|
1792
|
+
|
|
1793
|
+
if destination is None:
|
|
1794
|
+
raise ValidationException(
|
|
1795
|
+
"Table is not in a valid state to enable Kinesis Streaming Destination: "
|
|
1796
|
+
f"No streaming destination with streamArn: {stream_arn} found for table with tableName: {table_name}"
|
|
1797
|
+
)
|
|
1798
|
+
|
|
1799
|
+
if (
|
|
1800
|
+
existing_precision := destination["ApproximateCreationDateTimePrecision"]
|
|
1801
|
+
) == update_kinesis_streaming_configuration["ApproximateCreationDateTimePrecision"]:
|
|
1802
|
+
raise ValidationException(
|
|
1803
|
+
f"Invalid Request: Precision is already set to the desired value of {existing_precision} "
|
|
1804
|
+
f"for tableId: {table_id}, kdsArn: {stream_arn}"
|
|
1805
|
+
)
|
|
1806
|
+
|
|
1807
|
+
destination["ApproximateCreationDateTimePrecision"] = time_precision
|
|
1808
|
+
|
|
1809
|
+
return UpdateKinesisStreamingDestinationOutput(
|
|
1810
|
+
TableName=table_name,
|
|
1811
|
+
StreamArn=stream_arn,
|
|
1812
|
+
DestinationStatus=DestinationStatus.UPDATING,
|
|
1813
|
+
UpdateKinesisStreamingConfiguration=UpdateKinesisStreamingConfiguration(
|
|
1814
|
+
ApproximateCreationDateTimePrecision=time_precision,
|
|
1815
|
+
),
|
|
1680
1816
|
)
|
|
1681
1817
|
|
|
1682
1818
|
#
|
|
@@ -1754,7 +1890,12 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1754
1890
|
return dynamodb_table_exists(table_name, client)
|
|
1755
1891
|
|
|
1756
1892
|
@staticmethod
|
|
1757
|
-
def ensure_table_exists(
|
|
1893
|
+
def ensure_table_exists(
|
|
1894
|
+
account_id: str,
|
|
1895
|
+
region_name: str,
|
|
1896
|
+
table_name: str,
|
|
1897
|
+
error_message: str = "Cannot do operations on a non-existent table",
|
|
1898
|
+
):
|
|
1758
1899
|
"""
|
|
1759
1900
|
Raise ResourceNotFoundException if the given table does not exist.
|
|
1760
1901
|
|
|
@@ -1764,7 +1905,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1764
1905
|
:raise: ResourceNotFoundException if table does not exist in DynamoDB Local
|
|
1765
1906
|
"""
|
|
1766
1907
|
if not DynamoDBProvider.table_exists(account_id, region_name, table_name):
|
|
1767
|
-
raise ResourceNotFoundException(
|
|
1908
|
+
raise ResourceNotFoundException(error_message)
|
|
1768
1909
|
|
|
1769
1910
|
@staticmethod
|
|
1770
1911
|
def get_global_table_region(context: RequestContext, table_name: str) -> str:
|
|
@@ -1791,7 +1932,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1791
1932
|
return context.region
|
|
1792
1933
|
|
|
1793
1934
|
@staticmethod
|
|
1794
|
-
def prepare_request_headers(headers:
|
|
1935
|
+
def prepare_request_headers(headers: dict, account_id: str, region_name: str):
|
|
1795
1936
|
"""
|
|
1796
1937
|
Modify the Credentials field of Authorization header to achieve namespacing in DynamoDBLocal.
|
|
1797
1938
|
"""
|
|
@@ -1808,7 +1949,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
|
|
|
1808
1949
|
flags=re.IGNORECASE,
|
|
1809
1950
|
)
|
|
1810
1951
|
|
|
1811
|
-
def fix_consumed_capacity(self, request:
|
|
1952
|
+
def fix_consumed_capacity(self, request: dict, result: dict):
|
|
1812
1953
|
# make sure we append 'ConsumedCapacity', which is properly
|
|
1813
1954
|
# returned by dynalite, but not by AWS's DynamoDBLocal
|
|
1814
1955
|
table_name = request.get("TableName")
|
|
@@ -2182,7 +2323,7 @@ def get_updated_records(
|
|
|
2182
2323
|
account_id: str,
|
|
2183
2324
|
region_name: str,
|
|
2184
2325
|
table_name: str,
|
|
2185
|
-
existing_items:
|
|
2326
|
+
existing_items: list,
|
|
2186
2327
|
server_url: str,
|
|
2187
2328
|
table_stream_type: TableStreamType,
|
|
2188
2329
|
) -> RecordsMap:
|
|
@@ -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,125 +14,125 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class DynamoDBGlobalTableProperties(TypedDict):
|
|
17
|
-
AttributeDefinitions:
|
|
18
|
-
KeySchema:
|
|
19
|
-
Replicas:
|
|
20
|
-
Arn:
|
|
21
|
-
BillingMode:
|
|
22
|
-
GlobalSecondaryIndexes:
|
|
23
|
-
LocalSecondaryIndexes:
|
|
24
|
-
SSESpecification:
|
|
25
|
-
StreamArn:
|
|
26
|
-
StreamSpecification:
|
|
27
|
-
TableId:
|
|
28
|
-
TableName:
|
|
29
|
-
TimeToLiveSpecification:
|
|
30
|
-
WriteProvisionedThroughputSettings:
|
|
17
|
+
AttributeDefinitions: list[AttributeDefinition] | None
|
|
18
|
+
KeySchema: list[KeySchema] | None
|
|
19
|
+
Replicas: list[ReplicaSpecification] | None
|
|
20
|
+
Arn: str | None
|
|
21
|
+
BillingMode: str | None
|
|
22
|
+
GlobalSecondaryIndexes: list[GlobalSecondaryIndex] | None
|
|
23
|
+
LocalSecondaryIndexes: list[LocalSecondaryIndex] | None
|
|
24
|
+
SSESpecification: SSESpecification | None
|
|
25
|
+
StreamArn: str | None
|
|
26
|
+
StreamSpecification: StreamSpecification | None
|
|
27
|
+
TableId: str | None
|
|
28
|
+
TableName: str | None
|
|
29
|
+
TimeToLiveSpecification: TimeToLiveSpecification | None
|
|
30
|
+
WriteProvisionedThroughputSettings: WriteProvisionedThroughputSettings | None
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class AttributeDefinition(TypedDict):
|
|
34
|
-
AttributeName:
|
|
35
|
-
AttributeType:
|
|
34
|
+
AttributeName: str | None
|
|
35
|
+
AttributeType: str | None
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class KeySchema(TypedDict):
|
|
39
|
-
AttributeName:
|
|
40
|
-
KeyType:
|
|
39
|
+
AttributeName: str | None
|
|
40
|
+
KeyType: str | None
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
class Projection(TypedDict):
|
|
44
|
-
NonKeyAttributes:
|
|
45
|
-
ProjectionType:
|
|
44
|
+
NonKeyAttributes: list[str] | None
|
|
45
|
+
ProjectionType: str | None
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class TargetTrackingScalingPolicyConfiguration(TypedDict):
|
|
49
|
-
TargetValue:
|
|
50
|
-
DisableScaleIn:
|
|
51
|
-
ScaleInCooldown:
|
|
52
|
-
ScaleOutCooldown:
|
|
49
|
+
TargetValue: float | None
|
|
50
|
+
DisableScaleIn: bool | None
|
|
51
|
+
ScaleInCooldown: int | None
|
|
52
|
+
ScaleOutCooldown: int | None
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
class CapacityAutoScalingSettings(TypedDict):
|
|
56
|
-
MaxCapacity:
|
|
57
|
-
MinCapacity:
|
|
58
|
-
TargetTrackingScalingPolicyConfiguration:
|
|
59
|
-
SeedCapacity:
|
|
56
|
+
MaxCapacity: int | None
|
|
57
|
+
MinCapacity: int | None
|
|
58
|
+
TargetTrackingScalingPolicyConfiguration: TargetTrackingScalingPolicyConfiguration | None
|
|
59
|
+
SeedCapacity: int | None
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
class WriteProvisionedThroughputSettings(TypedDict):
|
|
63
|
-
WriteCapacityAutoScalingSettings:
|
|
63
|
+
WriteCapacityAutoScalingSettings: CapacityAutoScalingSettings | None
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
class GlobalSecondaryIndex(TypedDict):
|
|
67
|
-
IndexName:
|
|
68
|
-
KeySchema:
|
|
69
|
-
Projection:
|
|
70
|
-
WriteProvisionedThroughputSettings:
|
|
67
|
+
IndexName: str | None
|
|
68
|
+
KeySchema: list[KeySchema] | None
|
|
69
|
+
Projection: Projection | None
|
|
70
|
+
WriteProvisionedThroughputSettings: WriteProvisionedThroughputSettings | None
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
class LocalSecondaryIndex(TypedDict):
|
|
74
|
-
IndexName:
|
|
75
|
-
KeySchema:
|
|
76
|
-
Projection:
|
|
74
|
+
IndexName: str | None
|
|
75
|
+
KeySchema: list[KeySchema] | None
|
|
76
|
+
Projection: Projection | None
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
class ContributorInsightsSpecification(TypedDict):
|
|
80
|
-
Enabled:
|
|
80
|
+
Enabled: bool | None
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
class ReadProvisionedThroughputSettings(TypedDict):
|
|
84
|
-
ReadCapacityAutoScalingSettings:
|
|
85
|
-
ReadCapacityUnits:
|
|
84
|
+
ReadCapacityAutoScalingSettings: CapacityAutoScalingSettings | None
|
|
85
|
+
ReadCapacityUnits: int | None
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
class ReplicaGlobalSecondaryIndexSpecification(TypedDict):
|
|
89
|
-
IndexName:
|
|
90
|
-
ContributorInsightsSpecification:
|
|
91
|
-
ReadProvisionedThroughputSettings:
|
|
89
|
+
IndexName: str | None
|
|
90
|
+
ContributorInsightsSpecification: ContributorInsightsSpecification | None
|
|
91
|
+
ReadProvisionedThroughputSettings: ReadProvisionedThroughputSettings | None
|
|
92
92
|
|
|
93
93
|
|
|
94
94
|
class PointInTimeRecoverySpecification(TypedDict):
|
|
95
|
-
PointInTimeRecoveryEnabled:
|
|
95
|
+
PointInTimeRecoveryEnabled: bool | None
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
class ReplicaSSESpecification(TypedDict):
|
|
99
|
-
KMSMasterKeyId:
|
|
99
|
+
KMSMasterKeyId: str | None
|
|
100
100
|
|
|
101
101
|
|
|
102
102
|
class Tag(TypedDict):
|
|
103
|
-
Key:
|
|
104
|
-
Value:
|
|
103
|
+
Key: str | None
|
|
104
|
+
Value: str | None
|
|
105
105
|
|
|
106
106
|
|
|
107
107
|
class KinesisStreamSpecification(TypedDict):
|
|
108
|
-
StreamArn:
|
|
108
|
+
StreamArn: str | None
|
|
109
109
|
|
|
110
110
|
|
|
111
111
|
class ReplicaSpecification(TypedDict):
|
|
112
|
-
Region:
|
|
113
|
-
ContributorInsightsSpecification:
|
|
114
|
-
DeletionProtectionEnabled:
|
|
115
|
-
GlobalSecondaryIndexes:
|
|
116
|
-
KinesisStreamSpecification:
|
|
117
|
-
PointInTimeRecoverySpecification:
|
|
118
|
-
ReadProvisionedThroughputSettings:
|
|
119
|
-
SSESpecification:
|
|
120
|
-
TableClass:
|
|
121
|
-
Tags:
|
|
112
|
+
Region: str | None
|
|
113
|
+
ContributorInsightsSpecification: ContributorInsightsSpecification | None
|
|
114
|
+
DeletionProtectionEnabled: bool | None
|
|
115
|
+
GlobalSecondaryIndexes: list[ReplicaGlobalSecondaryIndexSpecification] | None
|
|
116
|
+
KinesisStreamSpecification: KinesisStreamSpecification | None
|
|
117
|
+
PointInTimeRecoverySpecification: PointInTimeRecoverySpecification | None
|
|
118
|
+
ReadProvisionedThroughputSettings: ReadProvisionedThroughputSettings | None
|
|
119
|
+
SSESpecification: ReplicaSSESpecification | None
|
|
120
|
+
TableClass: str | None
|
|
121
|
+
Tags: list[Tag] | None
|
|
122
122
|
|
|
123
123
|
|
|
124
124
|
class SSESpecification(TypedDict):
|
|
125
|
-
SSEEnabled:
|
|
126
|
-
SSEType:
|
|
125
|
+
SSEEnabled: bool | None
|
|
126
|
+
SSEType: str | None
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
class StreamSpecification(TypedDict):
|
|
130
|
-
StreamViewType:
|
|
130
|
+
StreamViewType: str | None
|
|
131
131
|
|
|
132
132
|
|
|
133
133
|
class TimeToLiveSpecification(TypedDict):
|
|
134
|
-
Enabled:
|
|
135
|
-
AttributeName:
|
|
134
|
+
Enabled: bool | None
|
|
135
|
+
AttributeName: str | None
|
|
136
136
|
|
|
137
137
|
|
|
138
138
|
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 DynamoDBGlobalTableProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::DynamoDB::GlobalTable"
|
|
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.dynamodb.resource_providers.aws_dynamodb_globaltable import (
|