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
|
@@ -4,7 +4,7 @@ import abc
|
|
|
4
4
|
import datetime
|
|
5
5
|
import json
|
|
6
6
|
from collections import OrderedDict
|
|
7
|
-
from typing import Final
|
|
7
|
+
from typing import Final
|
|
8
8
|
|
|
9
9
|
from localstack.aws.api.stepfunctions import (
|
|
10
10
|
Arn,
|
|
@@ -37,15 +37,15 @@ from localstack.utils.strings import long_uid
|
|
|
37
37
|
class StateMachineInstance:
|
|
38
38
|
name: Name
|
|
39
39
|
arn: Arn
|
|
40
|
-
revision_id:
|
|
40
|
+
revision_id: RevisionId | None
|
|
41
41
|
definition: Definition
|
|
42
42
|
role_arn: Arn
|
|
43
43
|
create_date: datetime.datetime
|
|
44
44
|
sm_type: StateMachineType
|
|
45
45
|
logging_config: LoggingConfiguration
|
|
46
|
-
cloud_watch_logging_configuration:
|
|
47
|
-
tags:
|
|
48
|
-
tracing_config:
|
|
46
|
+
cloud_watch_logging_configuration: CloudWatchLoggingConfiguration | None
|
|
47
|
+
tags: TagList | None
|
|
48
|
+
tracing_config: TracingConfiguration | None
|
|
49
49
|
|
|
50
50
|
def __init__(
|
|
51
51
|
self,
|
|
@@ -54,18 +54,18 @@ class StateMachineInstance:
|
|
|
54
54
|
definition: Definition,
|
|
55
55
|
role_arn: Arn,
|
|
56
56
|
logging_config: LoggingConfiguration,
|
|
57
|
-
cloud_watch_logging_configuration:
|
|
58
|
-
create_date:
|
|
59
|
-
sm_type:
|
|
60
|
-
tags:
|
|
61
|
-
tracing_config:
|
|
57
|
+
cloud_watch_logging_configuration: CloudWatchLoggingConfiguration | None = None,
|
|
58
|
+
create_date: datetime.datetime | None = None,
|
|
59
|
+
sm_type: StateMachineType | None = None,
|
|
60
|
+
tags: TagList | None = None,
|
|
61
|
+
tracing_config: TracingConfiguration | None = None,
|
|
62
62
|
):
|
|
63
63
|
self.name = name
|
|
64
64
|
self.arn = arn
|
|
65
65
|
self.revision_id = None
|
|
66
66
|
self.definition = definition
|
|
67
67
|
self.role_arn = role_arn
|
|
68
|
-
self.create_date = create_date or datetime.datetime.now(tz=datetime.
|
|
68
|
+
self.create_date = create_date or datetime.datetime.now(tz=datetime.UTC)
|
|
69
69
|
self.sm_type = sm_type or StateMachineType.STANDARD
|
|
70
70
|
self.logging_config = logging_config
|
|
71
71
|
self.cloud_watch_logging_configuration = cloud_watch_logging_configuration
|
|
@@ -106,7 +106,7 @@ class TestStateMachine(StateMachineInstance):
|
|
|
106
106
|
arn: Arn,
|
|
107
107
|
definition: Definition,
|
|
108
108
|
role_arn: Arn,
|
|
109
|
-
create_date:
|
|
109
|
+
create_date: datetime.datetime | None = None,
|
|
110
110
|
):
|
|
111
111
|
super().__init__(
|
|
112
112
|
name,
|
|
@@ -125,7 +125,7 @@ class TestStateMachine(StateMachineInstance):
|
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
class TagManager:
|
|
128
|
-
_tags: Final[dict[str,
|
|
128
|
+
_tags: Final[dict[str, str | None]]
|
|
129
129
|
|
|
130
130
|
def __init__(self):
|
|
131
131
|
self._tags = OrderedDict()
|
|
@@ -154,7 +154,7 @@ class TagManager:
|
|
|
154
154
|
self._tags.pop(key, None)
|
|
155
155
|
|
|
156
156
|
def to_tag_list(self) -> TagList:
|
|
157
|
-
tag_list =
|
|
157
|
+
tag_list = []
|
|
158
158
|
for key, value in self._tags.items():
|
|
159
159
|
tag_list.append(Tag(key=key, value=value))
|
|
160
160
|
return tag_list
|
|
@@ -173,11 +173,11 @@ class StateMachineRevision(StateMachineInstance):
|
|
|
173
173
|
definition: Definition,
|
|
174
174
|
role_arn: Arn,
|
|
175
175
|
logging_config: LoggingConfiguration,
|
|
176
|
-
cloud_watch_logging_configuration:
|
|
177
|
-
create_date:
|
|
178
|
-
sm_type:
|
|
179
|
-
tags:
|
|
180
|
-
tracing_config:
|
|
176
|
+
cloud_watch_logging_configuration: CloudWatchLoggingConfiguration | None,
|
|
177
|
+
create_date: datetime.datetime | None = None,
|
|
178
|
+
sm_type: StateMachineType | None = None,
|
|
179
|
+
tags: TagList | None = None,
|
|
180
|
+
tracing_config: TracingConfiguration | None = None,
|
|
181
181
|
):
|
|
182
182
|
super().__init__(
|
|
183
183
|
name,
|
|
@@ -191,7 +191,7 @@ class StateMachineRevision(StateMachineInstance):
|
|
|
191
191
|
tags,
|
|
192
192
|
tracing_config,
|
|
193
193
|
)
|
|
194
|
-
self.versions =
|
|
194
|
+
self.versions = {}
|
|
195
195
|
self._version_number = 0
|
|
196
196
|
self.tag_manager = TagManager()
|
|
197
197
|
if tags:
|
|
@@ -200,10 +200,10 @@ class StateMachineRevision(StateMachineInstance):
|
|
|
200
200
|
|
|
201
201
|
def create_revision(
|
|
202
202
|
self,
|
|
203
|
-
definition:
|
|
204
|
-
role_arn:
|
|
205
|
-
logging_configuration:
|
|
206
|
-
) ->
|
|
203
|
+
definition: str | None,
|
|
204
|
+
role_arn: Arn | None,
|
|
205
|
+
logging_configuration: LoggingConfiguration | None,
|
|
206
|
+
) -> RevisionId | None:
|
|
207
207
|
update_definition = definition and json.loads(definition) != json.loads(self.definition)
|
|
208
208
|
if update_definition:
|
|
209
209
|
self.definition = definition
|
|
@@ -228,7 +228,7 @@ class StateMachineRevision(StateMachineInstance):
|
|
|
228
228
|
|
|
229
229
|
return self.revision_id
|
|
230
230
|
|
|
231
|
-
def create_version(self, description:
|
|
231
|
+
def create_version(self, description: str | None) -> StateMachineVersion | None:
|
|
232
232
|
if self.revision_id not in self.versions:
|
|
233
233
|
self._version_number += 1
|
|
234
234
|
version = StateMachineVersion(
|
|
@@ -259,10 +259,10 @@ class StateMachineRevision(StateMachineInstance):
|
|
|
259
259
|
class StateMachineVersion(StateMachineInstance):
|
|
260
260
|
source_arn: Arn
|
|
261
261
|
version: int
|
|
262
|
-
description:
|
|
262
|
+
description: str | None
|
|
263
263
|
|
|
264
264
|
def __init__(
|
|
265
|
-
self, state_machine_revision: StateMachineRevision, version: int, description:
|
|
265
|
+
self, state_machine_revision: StateMachineRevision, version: int, description: str | None
|
|
266
266
|
):
|
|
267
267
|
version_arn = f"{state_machine_revision.arn}:{version}"
|
|
268
268
|
super().__init__(
|
|
@@ -270,7 +270,7 @@ class StateMachineVersion(StateMachineInstance):
|
|
|
270
270
|
arn=version_arn,
|
|
271
271
|
definition=state_machine_revision.definition,
|
|
272
272
|
role_arn=state_machine_revision.role_arn,
|
|
273
|
-
create_date=datetime.datetime.now(tz=datetime.
|
|
273
|
+
create_date=datetime.datetime.now(tz=datetime.UTC),
|
|
274
274
|
sm_type=state_machine_revision.sm_type,
|
|
275
275
|
logging_config=state_machine_revision.logging_config,
|
|
276
276
|
cloud_watch_logging_configuration=state_machine_revision.cloud_watch_logging_configuration,
|
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
import threading
|
|
5
|
-
from typing import Optional
|
|
6
5
|
|
|
7
6
|
from localstack.aws.api.stepfunctions import (
|
|
8
7
|
Arn,
|
|
@@ -37,8 +36,8 @@ LOG = logging.getLogger(__name__)
|
|
|
37
36
|
|
|
38
37
|
|
|
39
38
|
class TestStateExecution(Execution):
|
|
40
|
-
exec_worker:
|
|
41
|
-
next_state:
|
|
39
|
+
exec_worker: TestStateExecutionWorker | None
|
|
40
|
+
next_state: str | None
|
|
42
41
|
|
|
43
42
|
class TestCaseExecutionWorkerCommunication(BaseExecutionWorkerCommunication):
|
|
44
43
|
_execution: TestStateExecution
|
|
@@ -62,7 +61,7 @@ class TestStateExecution(Execution):
|
|
|
62
61
|
state_machine: StateMachineInstance,
|
|
63
62
|
start_date: Timestamp,
|
|
64
63
|
activity_store: dict[Arn, Activity],
|
|
65
|
-
input_data:
|
|
64
|
+
input_data: dict | None = None,
|
|
66
65
|
):
|
|
67
66
|
super().__init__(
|
|
68
67
|
name=name,
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
1
|
from localstack.services.stepfunctions.asl.component.eval_component import EvalComponent
|
|
4
2
|
from localstack.services.stepfunctions.asl.eval.environment import Environment
|
|
5
3
|
from localstack.services.stepfunctions.asl.eval.event.event_manager import (
|
|
@@ -18,7 +16,7 @@ from localstack.services.stepfunctions.backend.execution_worker import SyncExecu
|
|
|
18
16
|
|
|
19
17
|
|
|
20
18
|
class TestStateExecutionWorker(SyncExecutionWorker):
|
|
21
|
-
env:
|
|
19
|
+
env: TestStateEnvironment | None
|
|
22
20
|
|
|
23
21
|
def _get_evaluation_entrypoint(self) -> EvalComponent:
|
|
24
22
|
return TestStateAmazonStateLanguageParser.parse(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import abc
|
|
2
|
-
from typing import Any, Final
|
|
2
|
+
from typing import Any, Final
|
|
3
3
|
|
|
4
4
|
from localstack.services.stepfunctions.mocking.mock_config_file import (
|
|
5
5
|
RawMockConfig,
|
|
@@ -56,7 +56,7 @@ class StateMockedResponses:
|
|
|
56
56
|
):
|
|
57
57
|
self.state_name = state_name
|
|
58
58
|
self.mocked_response_name = mocked_response_name
|
|
59
|
-
self.mocked_responses =
|
|
59
|
+
self.mocked_responses = []
|
|
60
60
|
last_range_end: int = -1
|
|
61
61
|
mocked_responses_sorted = sorted(mocked_responses, key=lambda mr: mr.range_start)
|
|
62
62
|
for mocked_response in mocked_responses_sorted:
|
|
@@ -87,7 +87,7 @@ class MockTestCase:
|
|
|
87
87
|
):
|
|
88
88
|
self.state_machine_name = state_machine_name
|
|
89
89
|
self.test_case_name = test_case_name
|
|
90
|
-
self.state_mocked_responses =
|
|
90
|
+
self.state_mocked_responses = {}
|
|
91
91
|
for state_mocked_response in state_mocked_responses_list:
|
|
92
92
|
state_name = state_mocked_response.state_name
|
|
93
93
|
if state_name in self.state_mocked_responses:
|
|
@@ -144,14 +144,14 @@ def _mocked_response_from_raw(
|
|
|
144
144
|
def _mocked_responses_from_raw(
|
|
145
145
|
mocked_response_name: str, raw_mock_config: RawMockConfig
|
|
146
146
|
) -> list[MockedResponse]:
|
|
147
|
-
raw_response_models:
|
|
148
|
-
|
|
147
|
+
raw_response_models: dict[str, RawResponseModel] | None = raw_mock_config.MockedResponses.get(
|
|
148
|
+
mocked_response_name
|
|
149
149
|
)
|
|
150
150
|
if not raw_response_models:
|
|
151
151
|
raise RuntimeError(
|
|
152
152
|
f"No definitions for mocked response '{mocked_response_name}' in the mock configuration file."
|
|
153
153
|
)
|
|
154
|
-
mocked_responses: list[MockedResponse] =
|
|
154
|
+
mocked_responses: list[MockedResponse] = []
|
|
155
155
|
for raw_response_model_range, raw_response_model in raw_response_models.items():
|
|
156
156
|
mocked_response: MockedResponse = _mocked_response_from_raw(
|
|
157
157
|
raw_response_model_range=raw_response_model_range, raw_response_model=raw_response_model
|
|
@@ -187,7 +187,7 @@ def _mock_test_case_from_raw(
|
|
|
187
187
|
f"No definitions for test case '{test_case_name}' and "
|
|
188
188
|
f"state machine '{state_machine_name}' in the mock configuration file."
|
|
189
189
|
)
|
|
190
|
-
state_mocked_responses_list: list[StateMockedResponses] =
|
|
190
|
+
state_mocked_responses_list: list[StateMockedResponses] = []
|
|
191
191
|
for state_name, mocked_response_name in test_case.root.items():
|
|
192
192
|
state_mocked_responses = _state_mocked_responses_from_raw(
|
|
193
193
|
state_name=state_name,
|
|
@@ -202,8 +202,8 @@ def _mock_test_case_from_raw(
|
|
|
202
202
|
)
|
|
203
203
|
|
|
204
204
|
|
|
205
|
-
def load_mock_test_case_for(state_machine_name: str, test_case_name: str) ->
|
|
206
|
-
raw_mock_config:
|
|
205
|
+
def load_mock_test_case_for(state_machine_name: str, test_case_name: str) -> MockTestCase | None:
|
|
206
|
+
raw_mock_config: RawMockConfig | None = _load_sfn_raw_mock_config()
|
|
207
207
|
if raw_mock_config is None:
|
|
208
208
|
return None
|
|
209
209
|
mock_test_case: MockTestCase = _mock_test_case_from_raw(
|
|
@@ -2,7 +2,7 @@ import logging
|
|
|
2
2
|
import os
|
|
3
3
|
from functools import lru_cache
|
|
4
4
|
from json import JSONDecodeError
|
|
5
|
-
from typing import Any,
|
|
5
|
+
from typing import Any, Final, Optional
|
|
6
6
|
|
|
7
7
|
from pydantic import BaseModel, RootModel, ValidationError, model_validator
|
|
8
8
|
|
|
@@ -44,8 +44,8 @@ class RawResponseModel(BaseModel):
|
|
|
44
44
|
|
|
45
45
|
model_config = {"frozen": True}
|
|
46
46
|
|
|
47
|
-
Return:
|
|
48
|
-
Throw:
|
|
47
|
+
Return: RawReturnResponse | None = None
|
|
48
|
+
Throw: RawThrowResponse | None = None
|
|
49
49
|
|
|
50
50
|
@model_validator(mode="before")
|
|
51
51
|
def validate_response(cls, data: dict) -> dict:
|
|
@@ -56,7 +56,7 @@ class RawResponseModel(BaseModel):
|
|
|
56
56
|
return data
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
class RawTestCase(RootModel[
|
|
59
|
+
class RawTestCase(RootModel[dict[str, str]]):
|
|
60
60
|
"""
|
|
61
61
|
Represents an individual test case.
|
|
62
62
|
The keys are state names (e.g., 'LambdaState', 'SQSState')
|
|
@@ -73,7 +73,7 @@ class RawStateMachine(BaseModel):
|
|
|
73
73
|
|
|
74
74
|
model_config = {"frozen": True}
|
|
75
75
|
|
|
76
|
-
TestCases:
|
|
76
|
+
TestCases: dict[str, RawTestCase]
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
class RawMockConfig(BaseModel):
|
|
@@ -86,8 +86,8 @@ class RawMockConfig(BaseModel):
|
|
|
86
86
|
|
|
87
87
|
model_config = {"frozen": True}
|
|
88
88
|
|
|
89
|
-
StateMachines:
|
|
90
|
-
MockedResponses:
|
|
89
|
+
StateMachines: dict[str, RawStateMachine]
|
|
90
|
+
MockedResponses: dict[str, dict[str, RawResponseModel]]
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
@lru_cache(maxsize=1)
|
|
@@ -119,11 +119,11 @@ def _read_sfn_raw_mock_config(file_path: str, modified_epoch: int) -> Optional[R
|
|
|
119
119
|
- Logging is used to capture warnings if file access or parsing fails.
|
|
120
120
|
"""
|
|
121
121
|
try:
|
|
122
|
-
with open(file_path
|
|
122
|
+
with open(file_path) as df:
|
|
123
123
|
mock_config_str = df.read()
|
|
124
124
|
mock_config: RawMockConfig = RawMockConfig.model_validate_json(mock_config_str)
|
|
125
125
|
return mock_config
|
|
126
|
-
except
|
|
126
|
+
except OSError as file_error:
|
|
127
127
|
LOG.error("Failed to open mock configuration file '%s'. Error: %s", file_path, file_error)
|
|
128
128
|
return None
|
|
129
129
|
except ValidationError as validation_error:
|
|
@@ -168,7 +168,7 @@ def _read_sfn_raw_mock_config(file_path: str, modified_epoch: int) -> Optional[R
|
|
|
168
168
|
return None
|
|
169
169
|
|
|
170
170
|
|
|
171
|
-
def _load_sfn_raw_mock_config() ->
|
|
171
|
+
def _load_sfn_raw_mock_config() -> RawMockConfig | None:
|
|
172
172
|
configuration_file_path = config.SFN_MOCK_CONFIG
|
|
173
173
|
if not configuration_file_path:
|
|
174
174
|
return None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from localstack.packages import Package, PackageInstaller
|
|
1
|
+
from localstack.packages import InstallTarget, Package, PackageInstaller
|
|
2
2
|
from localstack.packages.core import MavenPackageInstaller
|
|
3
|
-
from localstack.packages.java import JavaInstallerMixin
|
|
3
|
+
from localstack.packages.java import JavaInstallerMixin, java_package
|
|
4
4
|
|
|
5
5
|
JSONATA_DEFAULT_VERSION = "0.9.7"
|
|
6
6
|
JACKSON_DEFAULT_VERSION = "2.16.2"
|
|
@@ -12,9 +12,6 @@ class JSONataPackage(Package):
|
|
|
12
12
|
def __init__(self):
|
|
13
13
|
super().__init__("JSONataLibs", JSONATA_DEFAULT_VERSION)
|
|
14
14
|
|
|
15
|
-
# Match the dynamodb-local JRE version to reduce the LocalStack image size by sharing the same JRE version
|
|
16
|
-
self.java_version = "21"
|
|
17
|
-
|
|
18
15
|
def get_versions(self) -> list[str]:
|
|
19
16
|
return list(JSONATA_JACKSON_VERSION_STORE.keys())
|
|
20
17
|
|
|
@@ -25,6 +22,10 @@ class JSONataPackage(Package):
|
|
|
25
22
|
class JSONataPackageInstaller(JavaInstallerMixin, MavenPackageInstaller):
|
|
26
23
|
def __init__(self, version: str):
|
|
27
24
|
jackson_version = JSONATA_JACKSON_VERSION_STORE[version]
|
|
25
|
+
|
|
26
|
+
# Match the dynamodb-local JRE version to reduce the LocalStack image size by sharing the same JRE version
|
|
27
|
+
self.java_version = "21"
|
|
28
|
+
|
|
28
29
|
super().__init__(
|
|
29
30
|
f"pkg:maven/com.dashjoin/jsonata@{version}",
|
|
30
31
|
# jackson-databind is imported in jsonata.py as "from com.fasterxml.jackson.databind import ObjectMapper"
|
|
@@ -35,5 +36,13 @@ class JSONataPackageInstaller(JavaInstallerMixin, MavenPackageInstaller):
|
|
|
35
36
|
f"pkg:maven/com.fasterxml.jackson.core/jackson-databind@{jackson_version}",
|
|
36
37
|
)
|
|
37
38
|
|
|
39
|
+
def _prepare_installation(self, target: InstallTarget) -> None:
|
|
40
|
+
# override to install correct java version
|
|
41
|
+
java_package.get_installer(self.java_version).install(target)
|
|
42
|
+
|
|
43
|
+
def get_java_home(self) -> str | None:
|
|
44
|
+
"""Override to use the specific Java version"""
|
|
45
|
+
return java_package.get_installer(self.java_version).get_java_home()
|
|
46
|
+
|
|
38
47
|
|
|
39
48
|
jpype_jsonata_package = JSONataPackage()
|
|
@@ -4,7 +4,7 @@ import json
|
|
|
4
4
|
import logging
|
|
5
5
|
import re
|
|
6
6
|
import time
|
|
7
|
-
from typing import Final
|
|
7
|
+
from typing import Final
|
|
8
8
|
|
|
9
9
|
from localstack.aws.api import CommonServiceException, RequestContext
|
|
10
10
|
from localstack.aws.api.stepfunctions import (
|
|
@@ -275,7 +275,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
275
275
|
)
|
|
276
276
|
|
|
277
277
|
def _get_execution(self, context: RequestContext, execution_arn: Arn) -> Execution:
|
|
278
|
-
execution:
|
|
278
|
+
execution: Execution | None = self.get_store(context).executions.get(execution_arn)
|
|
279
279
|
if not execution:
|
|
280
280
|
raise ExecutionDoesNotExist(f"Execution Does Not Exist: '{execution_arn}'")
|
|
281
281
|
return execution
|
|
@@ -283,7 +283,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
283
283
|
def _get_executions(
|
|
284
284
|
self,
|
|
285
285
|
context: RequestContext,
|
|
286
|
-
execution_status:
|
|
286
|
+
execution_status: ExecutionStatus | None = None,
|
|
287
287
|
):
|
|
288
288
|
store = self.get_store(context)
|
|
289
289
|
execution: list[Execution] = list(store.executions.values())
|
|
@@ -297,9 +297,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
297
297
|
return execution
|
|
298
298
|
|
|
299
299
|
def _get_activity(self, context: RequestContext, activity_arn: Arn) -> Activity:
|
|
300
|
-
maybe_activity:
|
|
301
|
-
activity_arn, None
|
|
302
|
-
)
|
|
300
|
+
maybe_activity: Activity | None = self.get_store(context).activities.get(activity_arn, None)
|
|
303
301
|
if maybe_activity is None:
|
|
304
302
|
raise ActivityDoesNotExist(f"Activity Does Not Exist: '{activity_arn}'")
|
|
305
303
|
return maybe_activity
|
|
@@ -312,7 +310,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
312
310
|
state_machine_type: StateMachineType,
|
|
313
311
|
logging_configuration: LoggingConfiguration,
|
|
314
312
|
tracing_configuration: TracingConfiguration,
|
|
315
|
-
) ->
|
|
313
|
+
) -> StateMachineRevision | None:
|
|
316
314
|
# CreateStateMachine's idempotency check is based on the state machine name, definition, type,
|
|
317
315
|
# LoggingConfiguration and TracingConfiguration.
|
|
318
316
|
# If a following request has a different roleArn or tags, Step Functions will ignore these differences and
|
|
@@ -338,11 +336,11 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
338
336
|
|
|
339
337
|
def _idempotent_start_execution(
|
|
340
338
|
self,
|
|
341
|
-
execution:
|
|
339
|
+
execution: Execution | None,
|
|
342
340
|
state_machine: StateMachineInstance,
|
|
343
341
|
name: Name,
|
|
344
342
|
input_data: SensitiveData,
|
|
345
|
-
) ->
|
|
343
|
+
) -> Execution | None:
|
|
346
344
|
# StartExecution is idempotent for STANDARD workflows. For a STANDARD workflow,
|
|
347
345
|
# if you call StartExecution with the same name and input as a running execution,
|
|
348
346
|
# the call succeeds and return the same response as the original request.
|
|
@@ -366,9 +364,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
366
364
|
message=f"Execution Already Exists: '{execution.exec_arn}'",
|
|
367
365
|
)
|
|
368
366
|
|
|
369
|
-
def _revision_by_name(
|
|
370
|
-
self, context: RequestContext, name: str
|
|
371
|
-
) -> Optional[StateMachineInstance]:
|
|
367
|
+
def _revision_by_name(self, context: RequestContext, name: str) -> StateMachineInstance | None:
|
|
372
368
|
state_machines: list[StateMachineInstance] = list(
|
|
373
369
|
self.get_store(context).state_machines.values()
|
|
374
370
|
)
|
|
@@ -445,7 +441,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
445
441
|
|
|
446
442
|
# CreateStateMachine is an idempotent API. Subsequent requests won't create a duplicate resource if it was
|
|
447
443
|
# already created.
|
|
448
|
-
idem_state_machine:
|
|
444
|
+
idem_state_machine: StateMachineRevision | None = self._idempotent_revision(
|
|
449
445
|
context=context,
|
|
450
446
|
name=state_machine_name,
|
|
451
447
|
definition=state_machine_definition,
|
|
@@ -460,7 +456,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
460
456
|
)
|
|
461
457
|
|
|
462
458
|
# Assert this state machine name is unique.
|
|
463
|
-
state_machine_with_name:
|
|
459
|
+
state_machine_with_name: StateMachineRevision | None = self._revision_by_name(
|
|
464
460
|
context=context, name=state_machine_name
|
|
465
461
|
)
|
|
466
462
|
if state_machine_with_name is not None:
|
|
@@ -690,9 +686,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
690
686
|
self, context: RequestContext, state_machine_alias_arn: Arn, **kwargs
|
|
691
687
|
) -> DescribeStateMachineAliasOutput:
|
|
692
688
|
self._validate_state_machine_alias_arn(state_machine_alias_arn=state_machine_alias_arn)
|
|
693
|
-
alias:
|
|
694
|
-
state_machine_alias_arn
|
|
695
|
-
)
|
|
689
|
+
alias: Alias | None = self.get_store(context=context).aliases.get(state_machine_alias_arn)
|
|
696
690
|
if alias is None:
|
|
697
691
|
# TODO: assemble the correct exception
|
|
698
692
|
raise ValidationException()
|
|
@@ -778,9 +772,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
778
772
|
return state_machine_arn.split("#")[0]
|
|
779
773
|
|
|
780
774
|
@staticmethod
|
|
781
|
-
def _get_mock_test_case(
|
|
782
|
-
state_machine_arn: str, state_machine_name: str
|
|
783
|
-
) -> Optional[MockTestCase]:
|
|
775
|
+
def _get_mock_test_case(state_machine_arn: str, state_machine_name: str) -> MockTestCase | None:
|
|
784
776
|
"""Extract and load a mock test case from a state machine ARN if present."""
|
|
785
777
|
parts = state_machine_arn.split("#")
|
|
786
778
|
if len(parts) != 2:
|
|
@@ -813,9 +805,9 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
813
805
|
base_arn = self._get_state_machine_arn(state_machine_arn)
|
|
814
806
|
store = self.get_store(context=context)
|
|
815
807
|
|
|
816
|
-
alias:
|
|
808
|
+
alias: Alias | None = store.aliases.get(base_arn)
|
|
817
809
|
alias_sample_state_machine_version_arn = alias.sample() if alias is not None else None
|
|
818
|
-
unsafe_state_machine:
|
|
810
|
+
unsafe_state_machine: StateMachineInstance | None = store.state_machines.get(
|
|
819
811
|
alias_sample_state_machine_version_arn or base_arn
|
|
820
812
|
)
|
|
821
813
|
if not unsafe_state_machine:
|
|
@@ -825,7 +817,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
825
817
|
state_machine_clone = copy.deepcopy(unsafe_state_machine)
|
|
826
818
|
|
|
827
819
|
if input is None:
|
|
828
|
-
input_data =
|
|
820
|
+
input_data = {}
|
|
829
821
|
else:
|
|
830
822
|
try:
|
|
831
823
|
input_data = json.loads(input)
|
|
@@ -875,7 +867,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
875
867
|
region_name=context.region,
|
|
876
868
|
state_machine=state_machine_clone,
|
|
877
869
|
state_machine_alias_arn=alias.state_machine_alias_arn if alias is not None else None,
|
|
878
|
-
start_date=datetime.datetime.now(tz=datetime.
|
|
870
|
+
start_date=datetime.datetime.now(tz=datetime.UTC),
|
|
879
871
|
cloud_watch_logging_session=cloud_watch_logging_session,
|
|
880
872
|
input_data=input_data,
|
|
881
873
|
trace_header=trace_header,
|
|
@@ -901,7 +893,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
901
893
|
self._validate_state_machine_arn(state_machine_arn)
|
|
902
894
|
|
|
903
895
|
base_arn = self._get_state_machine_arn(state_machine_arn)
|
|
904
|
-
unsafe_state_machine:
|
|
896
|
+
unsafe_state_machine: StateMachineInstance | None = self.get_store(
|
|
905
897
|
context
|
|
906
898
|
).state_machines.get(base_arn)
|
|
907
899
|
if not unsafe_state_machine:
|
|
@@ -914,7 +906,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
914
906
|
state_machine_clone = copy.deepcopy(unsafe_state_machine)
|
|
915
907
|
|
|
916
908
|
if input is None:
|
|
917
|
-
input_data =
|
|
909
|
+
input_data = {}
|
|
918
910
|
else:
|
|
919
911
|
try:
|
|
920
912
|
input_data = json.loads(input)
|
|
@@ -950,7 +942,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
950
942
|
account_id=context.account_id,
|
|
951
943
|
region_name=context.region,
|
|
952
944
|
state_machine=state_machine_clone,
|
|
953
|
-
start_date=datetime.datetime.now(tz=datetime.
|
|
945
|
+
start_date=datetime.datetime.now(tz=datetime.UTC),
|
|
954
946
|
cloud_watch_logging_session=cloud_watch_logging_session,
|
|
955
947
|
input_data=input_data,
|
|
956
948
|
trace_header=trace_header,
|
|
@@ -980,7 +972,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
980
972
|
|
|
981
973
|
@staticmethod
|
|
982
974
|
def _list_execution_filter(
|
|
983
|
-
ex: Execution, state_machine_arn: str, status_filter:
|
|
975
|
+
ex: Execution, state_machine_arn: str, status_filter: str | None
|
|
984
976
|
) -> bool:
|
|
985
977
|
state_machine_reference_arn_set = {ex.state_machine_arn, ex.state_machine_version_arn}
|
|
986
978
|
if state_machine_arn not in state_machine_reference_arn_set:
|
|
@@ -1105,7 +1097,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1105
1097
|
if not isinstance(state_machine_revision, StateMachineRevision):
|
|
1106
1098
|
raise InvalidArn(f"Invalid arn: {state_machine_arn}")
|
|
1107
1099
|
|
|
1108
|
-
state_machine_aliases: StateMachineAliasList =
|
|
1100
|
+
state_machine_aliases: StateMachineAliasList = []
|
|
1109
1101
|
valid_token_found = next_token is None
|
|
1110
1102
|
|
|
1111
1103
|
for alias in state_machine_revision.aliases:
|
|
@@ -1149,7 +1141,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1149
1141
|
if not isinstance(state_machine_revision, StateMachineRevision):
|
|
1150
1142
|
raise InvalidArn(f"Invalid arn: {state_machine_arn}")
|
|
1151
1143
|
|
|
1152
|
-
state_machine_version_items =
|
|
1144
|
+
state_machine_version_items = []
|
|
1153
1145
|
for version_arn in state_machine_revision.versions.values():
|
|
1154
1146
|
state_machine_version = state_machines[version_arn]
|
|
1155
1147
|
if isinstance(state_machine_version, StateMachineVersion):
|
|
@@ -1245,7 +1237,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1245
1237
|
if (
|
|
1246
1238
|
state_machine_revision := state_machines.get(state_machine_version.source_arn)
|
|
1247
1239
|
) and isinstance(state_machine_revision, StateMachineRevision):
|
|
1248
|
-
referencing_alias_names: list[str] =
|
|
1240
|
+
referencing_alias_names: list[str] = []
|
|
1249
1241
|
for alias in state_machine_revision.aliases:
|
|
1250
1242
|
if alias.is_router_for(state_machine_version_arn=state_machine_version_arn):
|
|
1251
1243
|
referencing_alias_names.append(alias.name)
|
|
@@ -1275,7 +1267,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1275
1267
|
if execution.sm_type != StateMachineType.STANDARD:
|
|
1276
1268
|
self._raise_resource_type_not_in_context(resource_type=execution.sm_type)
|
|
1277
1269
|
|
|
1278
|
-
stop_date = datetime.datetime.now(tz=datetime.
|
|
1270
|
+
stop_date = datetime.datetime.now(tz=datetime.UTC)
|
|
1279
1271
|
execution.stop(stop_date=stop_date, cause=cause, error=error)
|
|
1280
1272
|
return StopExecutionOutput(stopDate=stop_date)
|
|
1281
1273
|
|
|
@@ -1328,9 +1320,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1328
1320
|
target_revision_id = revision_id or state_machine.revision_id
|
|
1329
1321
|
version_arn = state_machine.versions[target_revision_id]
|
|
1330
1322
|
|
|
1331
|
-
update_output = UpdateStateMachineOutput(
|
|
1332
|
-
updateDate=datetime.datetime.now(tz=datetime.timezone.utc)
|
|
1333
|
-
)
|
|
1323
|
+
update_output = UpdateStateMachineOutput(updateDate=datetime.datetime.now(tz=datetime.UTC))
|
|
1334
1324
|
if revision_id is not None:
|
|
1335
1325
|
update_output["revisionId"] = revision_id
|
|
1336
1326
|
if version_arn is not None:
|
|
@@ -1437,7 +1427,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1437
1427
|
) -> DescribeMapRunOutput:
|
|
1438
1428
|
store = self.get_store(context)
|
|
1439
1429
|
for execution in store.executions.values():
|
|
1440
|
-
map_run_record:
|
|
1430
|
+
map_run_record: MapRunRecord | None = (
|
|
1441
1431
|
execution.exec_worker.env.map_run_record_pool_manager.get(map_run_arn)
|
|
1442
1432
|
)
|
|
1443
1433
|
if map_run_record is not None:
|
|
@@ -1477,7 +1467,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1477
1467
|
# TODO: investigate behaviour of empty requests.
|
|
1478
1468
|
store = self.get_store(context)
|
|
1479
1469
|
for execution in store.executions.values():
|
|
1480
|
-
map_run_record:
|
|
1470
|
+
map_run_record: MapRunRecord | None = (
|
|
1481
1471
|
execution.exec_worker.env.map_run_record_pool_manager.get(map_run_arn)
|
|
1482
1472
|
)
|
|
1483
1473
|
if map_run_record is not None:
|
|
@@ -1507,7 +1497,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1507
1497
|
definition=definition, static_analysers=[TestStateStaticAnalyser()]
|
|
1508
1498
|
)
|
|
1509
1499
|
|
|
1510
|
-
name:
|
|
1500
|
+
name: Name | None = f"TestState-{short_uid()}"
|
|
1511
1501
|
arn = stepfunctions_state_machine_arn(
|
|
1512
1502
|
name=name, account_id=context.account_id, region_name=context.region
|
|
1513
1503
|
)
|
|
@@ -1527,7 +1517,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1527
1517
|
account_id=context.account_id,
|
|
1528
1518
|
region_name=context.region,
|
|
1529
1519
|
state_machine=state_machine,
|
|
1530
|
-
start_date=datetime.datetime.now(tz=datetime.
|
|
1520
|
+
start_date=datetime.datetime.now(tz=datetime.UTC),
|
|
1531
1521
|
input_data=input_json,
|
|
1532
1522
|
activity_store=self.get_store(context).activities,
|
|
1533
1523
|
)
|
|
@@ -1591,7 +1581,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1591
1581
|
self,
|
|
1592
1582
|
context: RequestContext,
|
|
1593
1583
|
task_token: TaskToken,
|
|
1594
|
-
worker_name:
|
|
1584
|
+
worker_name: Name | None,
|
|
1595
1585
|
) -> None:
|
|
1596
1586
|
executions: list[Execution] = self._get_executions(context)
|
|
1597
1587
|
for execution in executions:
|
|
@@ -1604,7 +1594,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1604
1594
|
raise InvalidToken()
|
|
1605
1595
|
|
|
1606
1596
|
@staticmethod
|
|
1607
|
-
def _pull_activity_task(activity: Activity) ->
|
|
1597
|
+
def _pull_activity_task(activity: Activity) -> ActivityTask | None:
|
|
1608
1598
|
seconds_left = 60
|
|
1609
1599
|
while seconds_left > 0:
|
|
1610
1600
|
try:
|
|
@@ -1624,7 +1614,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1624
1614
|
self._validate_activity_arn(activity_arn)
|
|
1625
1615
|
|
|
1626
1616
|
activity = self._get_activity(context=context, activity_arn=activity_arn)
|
|
1627
|
-
maybe_task:
|
|
1617
|
+
maybe_task: ActivityTask | None = self._pull_activity_task(activity=activity)
|
|
1628
1618
|
if maybe_task is not None:
|
|
1629
1619
|
self._send_activity_task_started(
|
|
1630
1620
|
context, maybe_task.task_token, worker_name=worker_name
|
|
@@ -1645,13 +1635,13 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
|
|
|
1645
1635
|
state_machine_type: StateMachineType = request.get("type", StateMachineType.STANDARD)
|
|
1646
1636
|
definition: str = request["definition"]
|
|
1647
1637
|
|
|
1648
|
-
static_analysers =
|
|
1638
|
+
static_analysers = []
|
|
1649
1639
|
if state_machine_type == StateMachineType.STANDARD:
|
|
1650
1640
|
static_analysers.append(StaticAnalyser())
|
|
1651
1641
|
else:
|
|
1652
1642
|
static_analysers.append(ExpressStaticAnalyser())
|
|
1653
1643
|
|
|
1654
|
-
diagnostics: ValidateStateMachineDefinitionDiagnosticList =
|
|
1644
|
+
diagnostics: ValidateStateMachineDefinitionDiagnosticList = []
|
|
1655
1645
|
try:
|
|
1656
1646
|
StepFunctionsProvider._validate_definition(
|
|
1657
1647
|
definition=definition, static_analysers=static_analysers
|