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
|
@@ -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 (
|
|
@@ -15,151 +15,151 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class OpenSearchServiceDomainProperties(TypedDict):
|
|
18
|
-
AccessPolicies:
|
|
19
|
-
AdvancedOptions:
|
|
20
|
-
AdvancedSecurityOptions:
|
|
21
|
-
Arn:
|
|
22
|
-
ClusterConfig:
|
|
23
|
-
CognitoOptions:
|
|
24
|
-
DomainArn:
|
|
25
|
-
DomainEndpoint:
|
|
26
|
-
DomainEndpointOptions:
|
|
27
|
-
DomainEndpoints:
|
|
28
|
-
DomainName:
|
|
29
|
-
EBSOptions:
|
|
30
|
-
EncryptionAtRestOptions:
|
|
31
|
-
EngineVersion:
|
|
32
|
-
Id:
|
|
33
|
-
LogPublishingOptions:
|
|
34
|
-
NodeToNodeEncryptionOptions:
|
|
35
|
-
OffPeakWindowOptions:
|
|
36
|
-
ServiceSoftwareOptions:
|
|
37
|
-
SnapshotOptions:
|
|
38
|
-
SoftwareUpdateOptions:
|
|
39
|
-
Tags:
|
|
40
|
-
VPCOptions:
|
|
18
|
+
AccessPolicies: dict | None
|
|
19
|
+
AdvancedOptions: dict | None
|
|
20
|
+
AdvancedSecurityOptions: AdvancedSecurityOptionsInput | None
|
|
21
|
+
Arn: str | None
|
|
22
|
+
ClusterConfig: ClusterConfig | None
|
|
23
|
+
CognitoOptions: CognitoOptions | None
|
|
24
|
+
DomainArn: str | None
|
|
25
|
+
DomainEndpoint: str | None
|
|
26
|
+
DomainEndpointOptions: DomainEndpointOptions | None
|
|
27
|
+
DomainEndpoints: dict | None
|
|
28
|
+
DomainName: str | None
|
|
29
|
+
EBSOptions: EBSOptions | None
|
|
30
|
+
EncryptionAtRestOptions: EncryptionAtRestOptions | None
|
|
31
|
+
EngineVersion: str | None
|
|
32
|
+
Id: str | None
|
|
33
|
+
LogPublishingOptions: dict | None
|
|
34
|
+
NodeToNodeEncryptionOptions: NodeToNodeEncryptionOptions | None
|
|
35
|
+
OffPeakWindowOptions: OffPeakWindowOptions | None
|
|
36
|
+
ServiceSoftwareOptions: ServiceSoftwareOptions | None
|
|
37
|
+
SnapshotOptions: SnapshotOptions | None
|
|
38
|
+
SoftwareUpdateOptions: SoftwareUpdateOptions | None
|
|
39
|
+
Tags: list[Tag] | None
|
|
40
|
+
VPCOptions: VPCOptions | None
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
class ZoneAwarenessConfig(TypedDict):
|
|
44
|
-
AvailabilityZoneCount:
|
|
44
|
+
AvailabilityZoneCount: int | None
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
class ClusterConfig(TypedDict):
|
|
48
|
-
DedicatedMasterCount:
|
|
49
|
-
DedicatedMasterEnabled:
|
|
50
|
-
DedicatedMasterType:
|
|
51
|
-
InstanceCount:
|
|
52
|
-
InstanceType:
|
|
53
|
-
WarmCount:
|
|
54
|
-
WarmEnabled:
|
|
55
|
-
WarmType:
|
|
56
|
-
ZoneAwarenessConfig:
|
|
57
|
-
ZoneAwarenessEnabled:
|
|
48
|
+
DedicatedMasterCount: int | None
|
|
49
|
+
DedicatedMasterEnabled: bool | None
|
|
50
|
+
DedicatedMasterType: str | None
|
|
51
|
+
InstanceCount: int | None
|
|
52
|
+
InstanceType: str | None
|
|
53
|
+
WarmCount: int | None
|
|
54
|
+
WarmEnabled: bool | None
|
|
55
|
+
WarmType: str | None
|
|
56
|
+
ZoneAwarenessConfig: ZoneAwarenessConfig | None
|
|
57
|
+
ZoneAwarenessEnabled: bool | None
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
class SnapshotOptions(TypedDict):
|
|
61
|
-
AutomatedSnapshotStartHour:
|
|
61
|
+
AutomatedSnapshotStartHour: int | None
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
class VPCOptions(TypedDict):
|
|
65
|
-
SecurityGroupIds:
|
|
66
|
-
SubnetIds:
|
|
65
|
+
SecurityGroupIds: list[str] | None
|
|
66
|
+
SubnetIds: list[str] | None
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
class NodeToNodeEncryptionOptions(TypedDict):
|
|
70
|
-
Enabled:
|
|
70
|
+
Enabled: bool | None
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
class DomainEndpointOptions(TypedDict):
|
|
74
|
-
CustomEndpoint:
|
|
75
|
-
CustomEndpointCertificateArn:
|
|
76
|
-
CustomEndpointEnabled:
|
|
77
|
-
EnforceHTTPS:
|
|
78
|
-
TLSSecurityPolicy:
|
|
74
|
+
CustomEndpoint: str | None
|
|
75
|
+
CustomEndpointCertificateArn: str | None
|
|
76
|
+
CustomEndpointEnabled: bool | None
|
|
77
|
+
EnforceHTTPS: bool | None
|
|
78
|
+
TLSSecurityPolicy: str | None
|
|
79
79
|
|
|
80
80
|
|
|
81
81
|
class CognitoOptions(TypedDict):
|
|
82
|
-
Enabled:
|
|
83
|
-
IdentityPoolId:
|
|
84
|
-
RoleArn:
|
|
85
|
-
UserPoolId:
|
|
82
|
+
Enabled: bool | None
|
|
83
|
+
IdentityPoolId: str | None
|
|
84
|
+
RoleArn: str | None
|
|
85
|
+
UserPoolId: str | None
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
class MasterUserOptions(TypedDict):
|
|
89
|
-
MasterUserARN:
|
|
90
|
-
MasterUserName:
|
|
91
|
-
MasterUserPassword:
|
|
89
|
+
MasterUserARN: str | None
|
|
90
|
+
MasterUserName: str | None
|
|
91
|
+
MasterUserPassword: str | None
|
|
92
92
|
|
|
93
93
|
|
|
94
94
|
class Idp(TypedDict):
|
|
95
|
-
EntityId:
|
|
96
|
-
MetadataContent:
|
|
95
|
+
EntityId: str | None
|
|
96
|
+
MetadataContent: str | None
|
|
97
97
|
|
|
98
98
|
|
|
99
99
|
class SAMLOptions(TypedDict):
|
|
100
|
-
Enabled:
|
|
101
|
-
Idp:
|
|
102
|
-
MasterBackendRole:
|
|
103
|
-
MasterUserName:
|
|
104
|
-
RolesKey:
|
|
105
|
-
SessionTimeoutMinutes:
|
|
106
|
-
SubjectKey:
|
|
100
|
+
Enabled: bool | None
|
|
101
|
+
Idp: Idp | None
|
|
102
|
+
MasterBackendRole: str | None
|
|
103
|
+
MasterUserName: str | None
|
|
104
|
+
RolesKey: str | None
|
|
105
|
+
SessionTimeoutMinutes: int | None
|
|
106
|
+
SubjectKey: str | None
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
class AdvancedSecurityOptionsInput(TypedDict):
|
|
110
|
-
AnonymousAuthDisableDate:
|
|
111
|
-
AnonymousAuthEnabled:
|
|
112
|
-
Enabled:
|
|
113
|
-
InternalUserDatabaseEnabled:
|
|
114
|
-
MasterUserOptions:
|
|
115
|
-
SAMLOptions:
|
|
110
|
+
AnonymousAuthDisableDate: str | None
|
|
111
|
+
AnonymousAuthEnabled: bool | None
|
|
112
|
+
Enabled: bool | None
|
|
113
|
+
InternalUserDatabaseEnabled: bool | None
|
|
114
|
+
MasterUserOptions: MasterUserOptions | None
|
|
115
|
+
SAMLOptions: SAMLOptions | None
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
class EBSOptions(TypedDict):
|
|
119
|
-
EBSEnabled:
|
|
120
|
-
Iops:
|
|
121
|
-
Throughput:
|
|
122
|
-
VolumeSize:
|
|
123
|
-
VolumeType:
|
|
119
|
+
EBSEnabled: bool | None
|
|
120
|
+
Iops: int | None
|
|
121
|
+
Throughput: int | None
|
|
122
|
+
VolumeSize: int | None
|
|
123
|
+
VolumeType: str | None
|
|
124
124
|
|
|
125
125
|
|
|
126
126
|
class EncryptionAtRestOptions(TypedDict):
|
|
127
|
-
Enabled:
|
|
128
|
-
KmsKeyId:
|
|
127
|
+
Enabled: bool | None
|
|
128
|
+
KmsKeyId: str | None
|
|
129
129
|
|
|
130
130
|
|
|
131
131
|
class Tag(TypedDict):
|
|
132
|
-
Key:
|
|
133
|
-
Value:
|
|
132
|
+
Key: str | None
|
|
133
|
+
Value: str | None
|
|
134
134
|
|
|
135
135
|
|
|
136
136
|
class ServiceSoftwareOptions(TypedDict):
|
|
137
|
-
AutomatedUpdateDate:
|
|
138
|
-
Cancellable:
|
|
139
|
-
CurrentVersion:
|
|
140
|
-
Description:
|
|
141
|
-
NewVersion:
|
|
142
|
-
OptionalDeployment:
|
|
143
|
-
UpdateAvailable:
|
|
144
|
-
UpdateStatus:
|
|
137
|
+
AutomatedUpdateDate: str | None
|
|
138
|
+
Cancellable: bool | None
|
|
139
|
+
CurrentVersion: str | None
|
|
140
|
+
Description: str | None
|
|
141
|
+
NewVersion: str | None
|
|
142
|
+
OptionalDeployment: bool | None
|
|
143
|
+
UpdateAvailable: bool | None
|
|
144
|
+
UpdateStatus: str | None
|
|
145
145
|
|
|
146
146
|
|
|
147
147
|
class WindowStartTime(TypedDict):
|
|
148
|
-
Hours:
|
|
149
|
-
Minutes:
|
|
148
|
+
Hours: int | None
|
|
149
|
+
Minutes: int | None
|
|
150
150
|
|
|
151
151
|
|
|
152
152
|
class OffPeakWindow(TypedDict):
|
|
153
|
-
WindowStartTime:
|
|
153
|
+
WindowStartTime: WindowStartTime | None
|
|
154
154
|
|
|
155
155
|
|
|
156
156
|
class OffPeakWindowOptions(TypedDict):
|
|
157
|
-
Enabled:
|
|
158
|
-
OffPeakWindow:
|
|
157
|
+
Enabled: bool | None
|
|
158
|
+
OffPeakWindow: OffPeakWindow | None
|
|
159
159
|
|
|
160
160
|
|
|
161
161
|
class SoftwareUpdateOptions(TypedDict):
|
|
162
|
-
AutoSoftwareUpdateEnabled:
|
|
162
|
+
AutoSoftwareUpdateEnabled: bool | None
|
|
163
163
|
|
|
164
164
|
|
|
165
165
|
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 OpenSearchServiceDomainProviderPlugin(CloudFormationResourceProviderPlugin
|
|
|
10
8
|
name = "AWS::OpenSearchService::Domain"
|
|
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.opensearch.resource_providers.aws_opensearchservice_domain import (
|
|
@@ -6,8 +6,6 @@ the latest install_versions from the github repository tags. Run::
|
|
|
6
6
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
from typing import Dict
|
|
10
|
-
|
|
11
9
|
import semver
|
|
12
10
|
|
|
13
11
|
from localstack.aws.api.opensearch import CompatibleVersionsMap, EngineType
|
|
@@ -15,20 +13,24 @@ from localstack.utils.common import get_arch
|
|
|
15
13
|
|
|
16
14
|
# Internal representation of the OpenSearch versions (without the "OpenSearch_" prefix)
|
|
17
15
|
_opensearch_install_versions = {
|
|
16
|
+
"3.1": "3.1.0",
|
|
17
|
+
"2.19": "2.19.3",
|
|
18
|
+
"2.17": "2.17.1",
|
|
19
|
+
"2.15": "2.15.0",
|
|
18
20
|
"2.13": "2.13.0",
|
|
19
21
|
"2.11": "2.11.1",
|
|
20
22
|
"2.9": "2.9.0",
|
|
21
23
|
"2.7": "2.7.0",
|
|
22
24
|
"2.5": "2.5.0",
|
|
23
25
|
"2.3": "2.3.0",
|
|
24
|
-
"1.3": "1.3.
|
|
26
|
+
"1.3": "1.3.20",
|
|
25
27
|
"1.2": "1.2.4",
|
|
26
28
|
"1.1": "1.1.0",
|
|
27
29
|
"1.0": "1.0.0",
|
|
28
30
|
}
|
|
29
31
|
# Internal representation of the Elasticsearch versions (without the "Elasticsearch_" prefix)
|
|
30
32
|
_elasticsearch_install_versions = {
|
|
31
|
-
"7.10": "7.10.
|
|
33
|
+
"7.10": "7.10.2",
|
|
32
34
|
"7.9": "7.9.3",
|
|
33
35
|
"7.8": "7.8.1",
|
|
34
36
|
"7.7": "7.7.1",
|
|
@@ -223,6 +225,9 @@ compatible_versions = [
|
|
|
223
225
|
"OpenSearch_2.9",
|
|
224
226
|
"OpenSearch_2.11",
|
|
225
227
|
"OpenSearch_2.13",
|
|
228
|
+
"OpenSearch_2.15",
|
|
229
|
+
"OpenSearch_2.17",
|
|
230
|
+
"OpenSearch_2.19",
|
|
226
231
|
],
|
|
227
232
|
),
|
|
228
233
|
CompatibleVersionsMap(
|
|
@@ -233,28 +238,68 @@ compatible_versions = [
|
|
|
233
238
|
"OpenSearch_2.9",
|
|
234
239
|
"OpenSearch_2.11",
|
|
235
240
|
"OpenSearch_2.13",
|
|
241
|
+
"OpenSearch_2.15",
|
|
242
|
+
"OpenSearch_2.17",
|
|
243
|
+
"OpenSearch_2.19",
|
|
236
244
|
],
|
|
237
245
|
),
|
|
238
246
|
CompatibleVersionsMap(
|
|
239
247
|
SourceVersion="OpenSearch_2.5",
|
|
240
|
-
TargetVersions=[
|
|
248
|
+
TargetVersions=[
|
|
249
|
+
"OpenSearch_2.7",
|
|
250
|
+
"OpenSearch_2.9",
|
|
251
|
+
"OpenSearch_2.11",
|
|
252
|
+
"OpenSearch_2.13",
|
|
253
|
+
"OpenSearch_2.15",
|
|
254
|
+
"OpenSearch_2.17",
|
|
255
|
+
"OpenSearch_2.19",
|
|
256
|
+
],
|
|
241
257
|
),
|
|
242
258
|
CompatibleVersionsMap(
|
|
243
259
|
SourceVersion="OpenSearch_2.7",
|
|
244
|
-
TargetVersions=[
|
|
260
|
+
TargetVersions=[
|
|
261
|
+
"OpenSearch_2.9",
|
|
262
|
+
"OpenSearch_2.11",
|
|
263
|
+
"OpenSearch_2.13",
|
|
264
|
+
"OpenSearch_2.15",
|
|
265
|
+
"OpenSearch_2.17",
|
|
266
|
+
"OpenSearch_2.19",
|
|
267
|
+
],
|
|
245
268
|
),
|
|
246
269
|
CompatibleVersionsMap(
|
|
247
270
|
SourceVersion="OpenSearch_2.9",
|
|
248
|
-
TargetVersions=[
|
|
271
|
+
TargetVersions=[
|
|
272
|
+
"OpenSearch_2.11",
|
|
273
|
+
"OpenSearch_2.13",
|
|
274
|
+
"OpenSearch_2.15",
|
|
275
|
+
"OpenSearch_2.17",
|
|
276
|
+
"OpenSearch_2.19",
|
|
277
|
+
],
|
|
249
278
|
),
|
|
250
279
|
CompatibleVersionsMap(
|
|
251
280
|
SourceVersion="OpenSearch_2.11",
|
|
252
|
-
TargetVersions=["OpenSearch_2.13"],
|
|
281
|
+
TargetVersions=["OpenSearch_2.13", "OpenSearch_2.15", "OpenSearch_2.17", "OpenSearch_2.19"],
|
|
282
|
+
),
|
|
283
|
+
CompatibleVersionsMap(
|
|
284
|
+
SourceVersion="OpenSearch_2.13",
|
|
285
|
+
TargetVersions=["OpenSearch_2.15", "OpenSearch_2.17", "OpenSearch_2.19"],
|
|
286
|
+
),
|
|
287
|
+
CompatibleVersionsMap(
|
|
288
|
+
SourceVersion="OpenSearch_2.15",
|
|
289
|
+
TargetVersions=["OpenSearch_2.17", "OpenSearch_2.19"],
|
|
290
|
+
),
|
|
291
|
+
CompatibleVersionsMap(
|
|
292
|
+
SourceVersion="OpenSearch_2.17",
|
|
293
|
+
TargetVersions=["OpenSearch_2.19"],
|
|
294
|
+
),
|
|
295
|
+
CompatibleVersionsMap(
|
|
296
|
+
SourceVersion="OpenSearch_2.19",
|
|
297
|
+
TargetVersions=["OpenSearch_3.1"],
|
|
253
298
|
),
|
|
254
299
|
]
|
|
255
300
|
|
|
256
301
|
|
|
257
|
-
def get_install_type_and_version(version: str) ->
|
|
302
|
+
def get_install_type_and_version(version: str) -> tuple[EngineType, str]:
|
|
258
303
|
engine_type = EngineType(version.split("_")[0])
|
|
259
304
|
|
|
260
305
|
if version not in install_versions:
|
|
@@ -299,9 +344,11 @@ def get_download_url(install_version: str, engine_type: EngineType) -> str:
|
|
|
299
344
|
return _opensearch_url(install_version)
|
|
300
345
|
elif engine_type == EngineType.Elasticsearch:
|
|
301
346
|
return _es_url(install_version)
|
|
347
|
+
else:
|
|
348
|
+
raise ValueError(f"Unknown OpenSearch engine type: {engine_type}")
|
|
302
349
|
|
|
303
350
|
|
|
304
|
-
def fetch_latest_versions() ->
|
|
351
|
+
def fetch_latest_versions() -> dict[str, str]: # pragma: no cover
|
|
305
352
|
"""
|
|
306
353
|
Fetches from the opensearch git repository tags the latest patch versions for a minor version and returns a
|
|
307
354
|
dictionary where the key corresponds to the minor version, and the value to the patch version. Run this once in a
|
localstack/services/plugins.py
CHANGED
|
@@ -3,9 +3,10 @@ import functools
|
|
|
3
3
|
import logging
|
|
4
4
|
import threading
|
|
5
5
|
from collections import defaultdict
|
|
6
|
+
from collections.abc import Callable
|
|
6
7
|
from concurrent.futures import ThreadPoolExecutor
|
|
7
8
|
from enum import Enum
|
|
8
|
-
from typing import
|
|
9
|
+
from typing import Protocol
|
|
9
10
|
|
|
10
11
|
from plux import Plugin, PluginLifecycleListener, PluginManager, PluginSpec
|
|
11
12
|
|
|
@@ -190,7 +191,7 @@ class ServiceContainer:
|
|
|
190
191
|
service: Service
|
|
191
192
|
state: ServiceState
|
|
192
193
|
lock: threading.RLock
|
|
193
|
-
errors:
|
|
194
|
+
errors: list[Exception]
|
|
194
195
|
|
|
195
196
|
def __init__(self, service: Service, state=ServiceState.UNKNOWN):
|
|
196
197
|
self.service = service
|
|
@@ -236,13 +237,13 @@ class ServiceContainer:
|
|
|
236
237
|
class ServiceManager:
|
|
237
238
|
def __init__(self) -> None:
|
|
238
239
|
super().__init__()
|
|
239
|
-
self._services:
|
|
240
|
+
self._services: dict[str, ServiceContainer] = {}
|
|
240
241
|
self._mutex = threading.RLock()
|
|
241
242
|
|
|
242
|
-
def get_service_container(self, name: str) ->
|
|
243
|
+
def get_service_container(self, name: str) -> ServiceContainer | None:
|
|
243
244
|
return self._services.get(name)
|
|
244
245
|
|
|
245
|
-
def get_service(self, name: str) ->
|
|
246
|
+
def get_service(self, name: str) -> Service | None:
|
|
246
247
|
container = self.get_service_container(name)
|
|
247
248
|
return container.service if container else None
|
|
248
249
|
|
|
@@ -252,7 +253,7 @@ class ServiceManager:
|
|
|
252
253
|
|
|
253
254
|
return True
|
|
254
255
|
|
|
255
|
-
def list_available(self) ->
|
|
256
|
+
def list_available(self) -> list[str]:
|
|
256
257
|
return list(self._services.keys())
|
|
257
258
|
|
|
258
259
|
def exists(self, name: str) -> bool:
|
|
@@ -268,11 +269,11 @@ class ServiceManager:
|
|
|
268
269
|
def check_all(self):
|
|
269
270
|
return any(self.check(service_name) for service_name in self.list_available())
|
|
270
271
|
|
|
271
|
-
def get_state(self, name: str) ->
|
|
272
|
+
def get_state(self, name: str) -> ServiceState | None:
|
|
272
273
|
container = self.get_service_container(name)
|
|
273
274
|
return container.state if container else None
|
|
274
275
|
|
|
275
|
-
def get_states(self) ->
|
|
276
|
+
def get_states(self) -> dict[str, ServiceState]:
|
|
276
277
|
return {name: self.get_state(name) for name in self.list_available()}
|
|
277
278
|
|
|
278
279
|
@log_duration()
|
|
@@ -285,19 +286,19 @@ class ServiceManager:
|
|
|
285
286
|
container = self.get_service_container(name)
|
|
286
287
|
|
|
287
288
|
if not container:
|
|
288
|
-
raise ValueError("no such service
|
|
289
|
+
raise ValueError(f"no such service {name}")
|
|
289
290
|
|
|
290
291
|
if container.state == ServiceState.STARTING:
|
|
291
292
|
if not poll_condition(lambda: container.state != ServiceState.STARTING, timeout=30):
|
|
292
|
-
raise TimeoutError("gave up waiting for service
|
|
293
|
+
raise TimeoutError(f"gave up waiting for service {name} to start")
|
|
293
294
|
|
|
294
295
|
if container.state == ServiceState.STOPPING:
|
|
295
296
|
if not poll_condition(lambda: container.state == ServiceState.STOPPED, timeout=30):
|
|
296
|
-
raise TimeoutError("gave up waiting for service
|
|
297
|
+
raise TimeoutError(f"gave up waiting for service {name} to stop")
|
|
297
298
|
|
|
298
299
|
with container.lock:
|
|
299
300
|
if container.state == ServiceState.DISABLED:
|
|
300
|
-
raise ServiceDisabled("service
|
|
301
|
+
raise ServiceDisabled(f"service {name} is disabled")
|
|
301
302
|
|
|
302
303
|
if container.state == ServiceState.RUNNING:
|
|
303
304
|
return container.service
|
|
@@ -313,7 +314,7 @@ class ServiceManager:
|
|
|
313
314
|
raise container.errors[-1]
|
|
314
315
|
|
|
315
316
|
raise ServiceStateException(
|
|
316
|
-
"service
|
|
317
|
+
f"service {name} is not ready ({container.state}) and could not be started"
|
|
317
318
|
)
|
|
318
319
|
|
|
319
320
|
# legacy map compatibility
|
|
@@ -397,13 +398,13 @@ class ServicePluginErrorCollector(PluginLifecycleListener):
|
|
|
397
398
|
A PluginLifecycleListener that collects errors related to service plugins.
|
|
398
399
|
"""
|
|
399
400
|
|
|
400
|
-
errors:
|
|
401
|
+
errors: dict[tuple[str, str], Exception] # keys are: (api, provider)
|
|
401
402
|
|
|
402
|
-
def __init__(self, errors:
|
|
403
|
+
def __init__(self, errors: dict[str, Exception] = None) -> None:
|
|
403
404
|
super().__init__()
|
|
404
405
|
self.errors = errors or {}
|
|
405
406
|
|
|
406
|
-
def get_key(self, plugin_name) ->
|
|
407
|
+
def get_key(self, plugin_name) -> tuple[str, str]:
|
|
407
408
|
# the convention is <api>:<provider>, currently we don't really expose the provider
|
|
408
409
|
# TODO: faulty plugin names would break this
|
|
409
410
|
return tuple(plugin_name.split(":", maxsplit=1))
|
|
@@ -446,7 +447,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
446
447
|
self.provider_config = provider_config or config.SERVICE_PROVIDER_CONFIG
|
|
447
448
|
|
|
448
449
|
# locks used to make sure plugin loading is thread safe - will be cleared after single use
|
|
449
|
-
self._plugin_load_locks:
|
|
450
|
+
self._plugin_load_locks: dict[str, threading.RLock] = SynchronizedDefaultDict(
|
|
450
451
|
threading.RLock
|
|
451
452
|
)
|
|
452
453
|
|
|
@@ -469,7 +470,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
469
470
|
|
|
470
471
|
# TODO make the abstraction clearer, to provide better information if service is available versus discoverable
|
|
471
472
|
# especially important when considering pro services
|
|
472
|
-
def list_available(self) ->
|
|
473
|
+
def list_available(self) -> list[str]:
|
|
473
474
|
"""
|
|
474
475
|
List all available services, which have an available, configured provider
|
|
475
476
|
|
|
@@ -482,8 +483,8 @@ class ServicePluginManager(ServiceManager):
|
|
|
482
483
|
]
|
|
483
484
|
|
|
484
485
|
def _get_loaded_service_containers(
|
|
485
|
-
self, services:
|
|
486
|
-
) ->
|
|
486
|
+
self, services: list[str] | None = None
|
|
487
|
+
) -> list[ServiceContainer]:
|
|
487
488
|
"""
|
|
488
489
|
Returns all the available service containers.
|
|
489
490
|
:param services: the list of services to restrict the search to. If empty or NULL then service containers for
|
|
@@ -495,7 +496,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
495
496
|
c for s in services if (c := super(ServicePluginManager, self).get_service_container(s))
|
|
496
497
|
]
|
|
497
498
|
|
|
498
|
-
def list_loaded_services(self) ->
|
|
499
|
+
def list_loaded_services(self) -> list[str]:
|
|
499
500
|
"""
|
|
500
501
|
Lists all the services which have a provider that has been initialized
|
|
501
502
|
|
|
@@ -506,7 +507,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
506
507
|
for service_container in self._get_loaded_service_containers()
|
|
507
508
|
]
|
|
508
509
|
|
|
509
|
-
def list_active_services(self) ->
|
|
510
|
+
def list_active_services(self) -> list[str]:
|
|
510
511
|
"""
|
|
511
512
|
Lists all services that have an initialised provider and are currently running.
|
|
512
513
|
|
|
@@ -521,7 +522,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
521
522
|
def exists(self, name: str) -> bool:
|
|
522
523
|
return name in self.list_available()
|
|
523
524
|
|
|
524
|
-
def get_state(self, name: str) ->
|
|
525
|
+
def get_state(self, name: str) -> ServiceState | None:
|
|
525
526
|
if name in self._services:
|
|
526
527
|
# ServiceContainer exists, which means the plugin has been loaded
|
|
527
528
|
return super().get_state(name)
|
|
@@ -537,7 +538,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
537
538
|
|
|
538
539
|
return ServiceState.AVAILABLE if is_api_enabled(name) else ServiceState.DISABLED
|
|
539
540
|
|
|
540
|
-
def get_service_container(self, name: str) ->
|
|
541
|
+
def get_service_container(self, name: str) -> ServiceContainer | None:
|
|
541
542
|
if container := self._services.get(name):
|
|
542
543
|
return container
|
|
543
544
|
|
|
@@ -565,7 +566,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
565
566
|
return self._services.get(name)
|
|
566
567
|
|
|
567
568
|
@property
|
|
568
|
-
def api_provider_specs(self) ->
|
|
569
|
+
def api_provider_specs(self) -> dict[str, list[str]]:
|
|
569
570
|
"""
|
|
570
571
|
Returns all provider names within the service plugin namespace and parses their name according to the convention,
|
|
571
572
|
that is "<api>:<provider>". The result is a dictionary that maps api => List[str (name of a provider)].
|
|
@@ -579,7 +580,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
579
580
|
return self._api_provider_specs
|
|
580
581
|
|
|
581
582
|
@log_duration()
|
|
582
|
-
def _load_service_plugin(self, name: str) ->
|
|
583
|
+
def _load_service_plugin(self, name: str) -> ServicePlugin | None:
|
|
583
584
|
providers = self.api_provider_specs.get(name)
|
|
584
585
|
if not providers:
|
|
585
586
|
# no providers for this api
|
|
@@ -608,7 +609,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
608
609
|
return plugin
|
|
609
610
|
|
|
610
611
|
@log_duration()
|
|
611
|
-
def _resolve_api_provider_specs(self) ->
|
|
612
|
+
def _resolve_api_provider_specs(self) -> dict[str, list[str]]:
|
|
612
613
|
result = defaultdict(list)
|
|
613
614
|
|
|
614
615
|
for spec in self.plugin_manager.list_plugin_specs():
|
|
@@ -619,7 +620,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
619
620
|
|
|
620
621
|
return result
|
|
621
622
|
|
|
622
|
-
def apis_with_provider(self, provider: str) ->
|
|
623
|
+
def apis_with_provider(self, provider: str) -> list[str]:
|
|
623
624
|
"""
|
|
624
625
|
Lists all apis where a given provider exists for.
|
|
625
626
|
:param provider: Name of the provider
|
|
@@ -631,7 +632,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
631
632
|
apis.append(api)
|
|
632
633
|
return apis
|
|
633
634
|
|
|
634
|
-
def _stop_services(self, service_containers:
|
|
635
|
+
def _stop_services(self, service_containers: list[ServiceContainer]) -> None:
|
|
635
636
|
"""
|
|
636
637
|
Atomically attempts to stop all given 'ServiceState.STARTING' and 'ServiceState.RUNNING' services.
|
|
637
638
|
:param service_containers: the list of service containers to be stopped.
|
|
@@ -642,7 +643,7 @@ class ServicePluginManager(ServiceManager):
|
|
|
642
643
|
if service_container.state in target_service_states:
|
|
643
644
|
service_container.stop()
|
|
644
645
|
|
|
645
|
-
def stop_services(self, services:
|
|
646
|
+
def stop_services(self, services: list[str] = None):
|
|
646
647
|
"""
|
|
647
648
|
Stops services for this service manager, if they are currently active.
|
|
648
649
|
Will not stop services not already started or in and error state.
|
|
@@ -691,7 +692,7 @@ def check_service_health(api, expect_shutdown=False):
|
|
|
691
692
|
LOG.warning('Service "%s" not yet available, retrying...', api)
|
|
692
693
|
else:
|
|
693
694
|
LOG.warning('Service "%s" still shutting down, retrying...', api)
|
|
694
|
-
raise Exception("Service check failed for api:
|
|
695
|
+
raise Exception(f"Service check failed for api: {api}")
|
|
695
696
|
|
|
696
697
|
|
|
697
698
|
@hooks.on_infra_start(should_load=lambda: config.EAGER_SERVICE_LOADING)
|
|
@@ -707,4 +708,8 @@ def eager_load_services():
|
|
|
707
708
|
except ServiceDisabled as e:
|
|
708
709
|
LOG.debug("%s", e)
|
|
709
710
|
except Exception:
|
|
710
|
-
LOG.
|
|
711
|
+
LOG.error(
|
|
712
|
+
"could not load service plugin %s",
|
|
713
|
+
api,
|
|
714
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
715
|
+
)
|
localstack/services/providers.py
CHANGED
|
@@ -41,7 +41,7 @@ def apigateway_legacy():
|
|
|
41
41
|
return Service.for_provider(provider, dispatch_table_factory=MotoFallbackDispatcher)
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
@aws_provider()
|
|
44
|
+
@aws_provider(api="cloudformation", name="engine-legacy")
|
|
45
45
|
def cloudformation():
|
|
46
46
|
from localstack.services.cloudformation.provider import CloudformationProvider
|
|
47
47
|
|
|
@@ -49,7 +49,7 @@ def cloudformation():
|
|
|
49
49
|
return Service.for_provider(provider)
|
|
50
50
|
|
|
51
51
|
|
|
52
|
-
@aws_provider(api="cloudformation"
|
|
52
|
+
@aws_provider(api="cloudformation")
|
|
53
53
|
def cloudformation_v2():
|
|
54
54
|
from localstack.services.cloudformation.v2.provider import CloudformationProviderV2
|
|
55
55
|
|
|
@@ -318,6 +318,14 @@ def sns():
|
|
|
318
318
|
return Service.for_provider(provider, dispatch_table_factory=MotoFallbackDispatcher)
|
|
319
319
|
|
|
320
320
|
|
|
321
|
+
@aws_provider(api="sns", name="v2")
|
|
322
|
+
def sns_v2():
|
|
323
|
+
from localstack.services.sns.v2.provider import SnsProvider
|
|
324
|
+
|
|
325
|
+
provider = SnsProvider()
|
|
326
|
+
return Service.for_provider(provider)
|
|
327
|
+
|
|
328
|
+
|
|
321
329
|
@aws_provider()
|
|
322
330
|
def sqs():
|
|
323
331
|
from localstack.services.sqs.provider import SqsProvider
|