localstack-core 4.6.1.dev60__py3-none-any.whl → 4.10.1.dev12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- localstack/aws/api/apigateway/__init__.py +87 -110
- localstack/aws/api/cloudformation/__init__.py +18 -4
- localstack/aws/api/cloudwatch/__init__.py +41 -1
- localstack/aws/api/config/__init__.py +4 -0
- localstack/aws/api/core.py +8 -5
- localstack/aws/api/dynamodb/__init__.py +30 -0
- localstack/aws/api/ec2/__init__.py +1545 -66
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/iam/__init__.py +7 -0
- localstack/aws/api/kinesis/__init__.py +19 -0
- localstack/aws/api/kms/__init__.py +6 -0
- localstack/aws/api/lambda_/__init__.py +36 -23
- localstack/aws/api/logs/__init__.py +20 -8
- localstack/aws/api/opensearch/__init__.py +16 -0
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/redshift/__init__.py +9 -3
- localstack/aws/api/route53/__init__.py +5 -0
- localstack/aws/api/s3/__init__.py +12 -0
- localstack/aws/api/s3control/__init__.py +56 -0
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/ssm/__init__.py +2 -0
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/api/transcribe/__init__.py +17 -0
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +14 -11
- localstack/aws/connect.py +42 -41
- localstack/aws/forwarder.py +57 -9
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +2 -3
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/internal_requests.py +6 -1
- localstack/aws/handlers/logging.py +13 -4
- localstack/aws/handlers/metric_handler.py +44 -5
- localstack/aws/handlers/service.py +48 -28
- localstack/aws/mocking.py +18 -27
- localstack/aws/patches.py +2 -2
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +475 -49
- localstack/aws/protocol/serializer.py +723 -106
- localstack/aws/protocol/service_router.py +133 -33
- localstack/aws/protocol/validate.py +6 -6
- localstack/aws/scaffold.py +9 -10
- localstack/aws/serving/edge.py +5 -6
- localstack/aws/serving/hypercorn.py +2 -2
- localstack/aws/serving/twisted.py +1 -2
- localstack/aws/serving/werkzeug.py +2 -2
- localstack/aws/skeleton.py +12 -11
- localstack/aws/spec-patches.json +58 -0
- localstack/aws/spec.py +66 -46
- localstack/cli/exceptions.py +1 -1
- localstack/cli/localstack.py +11 -11
- localstack/cli/lpm.py +4 -5
- localstack/cli/plugins.py +1 -1
- localstack/cli/profiles.py +1 -2
- localstack/config.py +44 -30
- localstack/constants.py +4 -29
- localstack/deprecations.py +5 -5
- localstack/dev/kubernetes/__main__.py +130 -7
- localstack/dev/run/__main__.py +5 -5
- localstack/dev/run/configurators.py +1 -4
- localstack/dev/run/paths.py +6 -6
- localstack/dns/models.py +2 -1
- localstack/dns/plugins.py +5 -1
- localstack/dns/server.py +16 -6
- localstack/http/dispatcher.py +1 -2
- localstack/http/response.py +2 -2
- localstack/http/router.py +1 -1
- localstack/http/trace.py +2 -1
- localstack/logging/format.py +6 -6
- localstack/packages/api.py +13 -12
- localstack/packages/core.py +4 -4
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +38 -12
- localstack/packages/plugins.py +0 -8
- localstack/runtime/analytics.py +3 -0
- localstack/runtime/hooks.py +1 -1
- localstack/runtime/init.py +8 -9
- localstack/runtime/main.py +5 -5
- localstack/runtime/patches.py +2 -2
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +7 -10
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +27 -28
- localstack/services/apigateway/legacy/integration.py +11 -10
- localstack/services/apigateway/legacy/invocations.py +6 -5
- localstack/services/apigateway/legacy/provider.py +148 -68
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +6 -6
- localstack/services/apigateway/models.py +16 -16
- localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
- localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
- localstack/services/apigateway/next_gen/execute_api/handlers/method_request.py +7 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +2 -3
- localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +9 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +12 -12
- localstack/services/apigateway/next_gen/execute_api/router.py +31 -0
- localstack/services/apigateway/next_gen/execute_api/template_mapping.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/test_invoke.py +114 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- localstack/services/apigateway/next_gen/provider.py +5 -0
- localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
- localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
- localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
- localstack/services/cdk/resource_providers/cdk_metadata.py +4 -3
- localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
- localstack/services/cloudformation/api_utils.py +4 -8
- localstack/services/cloudformation/cfn_utils.py +2 -2
- localstack/services/cloudformation/deployment_utils.py +14 -12
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +27 -17
- localstack/services/cloudformation/engine/parameters.py +4 -4
- localstack/services/cloudformation/engine/template_deployer.py +15 -14
- localstack/services/cloudformation/engine/template_utils.py +34 -12
- localstack/services/cloudformation/engine/transformers.py +11 -8
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +336 -39
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +96 -17
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +289 -136
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +315 -146
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +380 -105
- localstack/services/cloudformation/engine/v2/change_set_model_validator.py +183 -0
- localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +6 -0
- localstack/services/cloudformation/engine/v2/resolving.py +102 -0
- localstack/services/cloudformation/engine/yaml_parser.py +9 -2
- localstack/services/cloudformation/provider.py +11 -6
- localstack/services/cloudformation/provider_utils.py +34 -4
- localstack/services/cloudformation/resource_provider.py +31 -21
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
- localstack/services/cloudformation/resources.py +24149 -0
- localstack/services/cloudformation/scaffolding/__main__.py +13 -12
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/service_models.py +2 -2
- localstack/services/cloudformation/stores.py +33 -22
- localstack/services/cloudformation/v2/entities.py +103 -88
- localstack/services/cloudformation/v2/provider.py +872 -131
- localstack/services/cloudformation/v2/types.py +38 -0
- localstack/services/cloudformation/v2/utils.py +4 -1
- localstack/services/cloudwatch/alarm_scheduler.py +11 -8
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +30 -25
- localstack/services/cloudwatch/provider_v2.py +27 -32
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
- localstack/services/dynamodb/packages.py +3 -3
- localstack/services/dynamodb/provider.py +159 -18
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
- localstack/services/dynamodb/server.py +2 -2
- localstack/services/dynamodb/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +157 -18
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +26 -5
- localstack/services/ec2/provider.py +3 -3
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
- localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
- localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
- localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +29 -22
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
- localstack/services/ecr/resource_providers/aws_ecr_repository.py +22 -19
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +6 -6
- localstack/services/es/provider.py +21 -21
- localstack/services/events/archive.py +2 -2
- localstack/services/events/connection.py +5 -5
- localstack/services/events/event_bus.py +9 -9
- localstack/services/events/event_rule_engine.py +31 -13
- localstack/services/events/models.py +29 -30
- localstack/services/events/provider.py +29 -26
- localstack/services/events/replay.py +3 -3
- localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
- localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_connection.py +27 -27
- localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
- localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
- localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_rule.py +82 -82
- localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
- localstack/services/events/rule.py +15 -15
- localstack/services/events/target.py +21 -13
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +15 -15
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +25 -16
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +14 -119
- localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
- localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
- localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
- localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
- localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
- localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
- localstack/services/iam/resources/policy_simulator.py +133 -0
- localstack/services/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +17 -5
- localstack/services/kinesis/packages.py +3 -3
- localstack/services/kinesis/provider.py +86 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
- localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
- localstack/services/kms/models.py +21 -18
- localstack/services/kms/provider.py +62 -26
- localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
- localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
- localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
- localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
- localstack/services/kms/utils.py +4 -3
- localstack/services/lambda_/api_utils.py +19 -16
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +4 -7
- localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
- localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
- localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
- localstack/services/lambda_/hooks.py +6 -1
- localstack/services/lambda_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +7 -11
- localstack/services/lambda_/invocation/event_manager.py +1 -1
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +8 -11
- localstack/services/lambda_/invocation/internal_sqs_queue.py +6 -10
- localstack/services/lambda_/invocation/lambda_models.py +33 -30
- localstack/services/lambda_/invocation/lambda_service.py +12 -5
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/invocation/version_manager.py +31 -8
- localstack/services/lambda_/ldm.py +14 -0
- localstack/services/lambda_/packages.py +3 -4
- localstack/services/lambda_/provider.py +9 -26
- localstack/services/lambda_/provider_utils.py +1 -1
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
- localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
- localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_url.py +15 -15
- localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
- localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
- localstack/services/lambda_/runtimes.py +1 -3
- localstack/services/lambda_/urlrouter.py +14 -1
- localstack/services/logs/models.py +1 -3
- localstack/services/logs/provider.py +39 -22
- localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
- localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
- localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
- localstack/services/moto.py +5 -4
- localstack/services/opensearch/cluster.py +28 -20
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +27 -9
- localstack/services/opensearch/provider.py +15 -10
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
- localstack/services/opensearch/versions.py +57 -10
- localstack/services/plugins.py +37 -32
- localstack/services/providers.py +10 -2
- localstack/services/redshift/provider.py +0 -21
- localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
- localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
- localstack/services/route53/models.py +1 -3
- localstack/services/route53/provider.py +1 -2
- localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
- localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
- localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
- localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
- localstack/services/route53resolver/models.py +8 -10
- localstack/services/route53resolver/provider.py +12 -12
- localstack/services/s3/codec.py +2 -2
- localstack/services/s3/constants.py +5 -2
- localstack/services/s3/cors.py +8 -8
- localstack/services/s3/models.py +73 -73
- localstack/services/s3/notifications.py +74 -58
- localstack/services/s3/presigned_url.py +41 -59
- localstack/services/s3/provider.py +86 -29
- localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
- localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
- localstack/services/s3/storage/core.py +4 -3
- localstack/services/s3/storage/ephemeral.py +7 -6
- localstack/services/s3/utils.py +51 -31
- localstack/services/s3/validation.py +47 -33
- localstack/services/s3/website_hosting.py +9 -7
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
- localstack/services/secretsmanager/provider.py +10 -12
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
- localstack/services/ses/models.py +8 -1
- localstack/services/ses/provider.py +128 -55
- localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
- localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
- localstack/services/sns/constants.py +7 -1
- localstack/services/sns/executor.py +9 -2
- localstack/services/sns/models.py +25 -25
- localstack/services/sns/provider.py +9 -7
- localstack/services/sns/publisher.py +37 -23
- localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
- localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
- localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
- localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
- localstack/services/sns/v2/models.py +167 -0
- localstack/services/sns/v2/provider.py +867 -0
- localstack/services/sns/v2/utils.py +130 -0
- localstack/services/sqs/constants.py +2 -2
- localstack/services/sqs/developer_api.py +205 -0
- localstack/services/sqs/models.py +71 -36
- localstack/services/sqs/provider.py +56 -332
- localstack/services/sqs/query_api.py +8 -5
- localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
- localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +7 -5
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
- localstack/services/sqs/utils.py +123 -4
- localstack/services/ssm/provider.py +3 -4
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
- localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
- localstack/services/stepfunctions/asl/component/common/assign/assign_decl.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_decl_binding.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_array.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_object.py +1 -1
- localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
- localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
- localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
- localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
- localstack/services/stepfunctions/asl/component/common/error_name/states_error_name_type.py +1 -1
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_array.py +1 -1
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_object.py +1 -1
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +4 -4
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +4 -4
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadarr/payload_arr.py +1 -1
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadtmpl/payload_tmpl.py +1 -1
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +3 -3
- localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
- localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
- localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +4 -4
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/array/array_partition.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/generic/string_format.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_array.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_format.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/member.py +1 -1
- localstack/services/stepfunctions/asl/component/program/program.py +9 -9
- localstack/services/stepfunctions/asl/component/program/states.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state.py +10 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/comparison/comparison.py +5 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_output_transformer/resource_output_transformer_csv.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +12 -13
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +2 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +18 -18
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_aws_sdk.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +8 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +5 -7
- localstack/services/stepfunctions/asl/component/state/state_succeed/state_succeed.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_wait/state_wait.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
- localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
- localstack/services/stepfunctions/asl/eval/environment.py +22 -24
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +10 -10
- localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
- localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
- localstack/services/stepfunctions/asl/eval/states.py +12 -12
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +6 -6
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +7 -6
- localstack/services/stepfunctions/asl/parse/asl_parser.py +1 -1
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +2 -3
- localstack/services/stepfunctions/asl/parse/preprocessor.py +44 -44
- localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
- localstack/services/stepfunctions/asl/static_analyser/intrinsic/variable_names_intrinsic_static_analyser.py +1 -1
- localstack/services/stepfunctions/asl/static_analyser/variable_references_static_analyser.py +2 -2
- localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
- localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
- localstack/services/stepfunctions/backend/activity.py +4 -4
- localstack/services/stepfunctions/backend/alias.py +8 -8
- localstack/services/stepfunctions/backend/execution.py +29 -30
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +28 -28
- localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
- localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
- localstack/services/stepfunctions/mocking/mock_config.py +9 -9
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/packages.py +14 -5
- localstack/services/stepfunctions/provider.py +34 -44
- localstack/services/stepfunctions/quotas.py +2 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
- localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
- localstack/services/stores.py +8 -8
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +8 -3
- localstack/state/codecs.py +61 -0
- localstack/state/core.py +11 -5
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +36 -23
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/cloudformation_utils.py +1 -1
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +68 -18
- localstack/testing/pytest/container.py +5 -5
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +188 -49
- localstack/testing/pytest/in_memory_localstack.py +1 -3
- localstack/testing/pytest/marking.py +42 -15
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/fixtures.py +4 -4
- localstack/testing/pytest/stepfunctions/utils.py +11 -10
- localstack/testing/pytest/util.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -4
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +8 -3
- localstack/testing/testselection/matching.py +2 -2
- localstack/testing/testselection/opt_out.py +1 -1
- localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
- localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
- localstack/testing/testselection/testselection.py +2 -2
- localstack/utils/analytics/cli.py +2 -3
- localstack/utils/analytics/client.py +5 -5
- localstack/utils/analytics/events.py +2 -2
- localstack/utils/analytics/metadata.py +6 -4
- localstack/utils/analytics/metrics/counter.py +11 -18
- localstack/utils/analytics/metrics/registry.py +2 -2
- localstack/utils/analytics/publisher.py +4 -5
- localstack/utils/analytics/service_providers.py +19 -0
- localstack/utils/analytics/service_request_aggregator.py +4 -4
- localstack/utils/archives.py +12 -12
- localstack/utils/asyncio.py +2 -2
- localstack/utils/aws/arns.py +26 -31
- localstack/utils/aws/aws_responses.py +21 -28
- localstack/utils/aws/aws_stack.py +7 -12
- localstack/utils/aws/dead_letter_queue.py +4 -9
- localstack/utils/aws/message_forwarding.py +8 -11
- localstack/utils/aws/request_context.py +5 -6
- localstack/utils/aws/resources.py +1 -1
- localstack/utils/aws/templating.py +4 -4
- localstack/utils/batch_policy.py +4 -4
- localstack/utils/bootstrap.py +37 -30
- localstack/utils/catalog/catalog.py +139 -0
- localstack/utils/catalog/catalog_loader.py +119 -0
- localstack/utils/catalog/common.py +58 -0
- localstack/utils/catalog/plugins.py +28 -0
- localstack/utils/cloudwatch/cloudwatch_util.py +5 -5
- localstack/utils/collections.py +33 -27
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +5 -6
- localstack/utils/container_utils/container_client.py +156 -160
- localstack/utils/container_utils/docker_cmd_client.py +97 -81
- localstack/utils/container_utils/docker_sdk_client.py +75 -72
- localstack/utils/crypto.py +12 -13
- localstack/utils/diagnose.py +11 -12
- localstack/utils/docker_utils.py +11 -7
- localstack/utils/files.py +34 -15
- localstack/utils/functions.py +5 -4
- localstack/utils/http.py +14 -14
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +21 -7
- localstack/utils/kinesis/kinesis_connector.py +2 -1
- localstack/utils/net.py +25 -17
- localstack/utils/no_exit_argument_parser.py +2 -2
- localstack/utils/numbers.py +9 -2
- localstack/utils/objects.py +15 -14
- localstack/utils/patch.py +14 -7
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +15 -14
- localstack/utils/scheduler.py +13 -12
- localstack/utils/server/tcp_proxy.py +2 -2
- localstack/utils/serving.py +3 -4
- localstack/utils/strings.py +15 -16
- localstack/utils/sync.py +126 -1
- localstack/utils/tagging.py +10 -8
- localstack/utils/testutil.py +17 -17
- localstack/utils/threads.py +3 -3
- localstack/utils/time.py +12 -4
- localstack/utils/urls.py +1 -3
- localstack/utils/xml.py +1 -1
- localstack/utils/xray/traceid.py +1 -1
- localstack/version.py +16 -3
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/METADATA +18 -13
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/RECORD +663 -655
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/entry_points.txt +8 -4
- localstack_core-4.10.1.dev12.dist-info/plux.json +1 -0
- localstack/packages/terraform.py +0 -47
- localstack/services/cloudformation/deploy.html +0 -144
- localstack/services/cloudformation/deploy_ui.py +0 -47
- localstack/services/cloudformation/plugins.py +0 -12
- localstack/services/lambda_/lambda_debug_mode/ldm.py +0 -375
- localstack/services/lambda_/lambda_debug_mode/ldm_config_file.py +0 -178
- localstack/services/lambda_/lambda_debug_mode/ldm_types.py +0 -11
- localstack/services/lambda_/lambda_debug_mode/ldm_utils.py +0 -43
- localstack_core-4.6.1.dev60.dist-info/plux.json +0 -1
- /localstack/{services/lambda_/lambda_debug_mode/__init__.py → testing/pytest/cloudformation/transformers.py} +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/WHEEL +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/top_level.txt +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
from typing import Final, Union
|
|
1
|
+
from typing import Any, Final
|
|
3
2
|
|
|
4
3
|
from localstack.services.stepfunctions.asl.utils.encoding import to_json_str
|
|
5
4
|
|
|
6
5
|
MAX_STATE_SIZE_UTF8_BYTES: Final[int] = 256 * 1024 # 256 KB of data as a UTF-8 encoded string.
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
def is_within_size_quota(value:
|
|
8
|
+
def is_within_size_quota(value: str | Any) -> bool:
|
|
10
9
|
item_str = value if isinstance(value, str) else to_json_str(value)
|
|
11
10
|
item_bytes = item_str.encode("utf-8")
|
|
12
11
|
len_item_bytes = len(item_bytes)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import
|
|
5
|
+
from typing import TypedDict
|
|
6
6
|
|
|
7
7
|
import localstack.services.cloudformation.provider_utils as util
|
|
8
8
|
from localstack.services.cloudformation.resource_provider import (
|
|
@@ -14,14 +14,14 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class StepFunctionsActivityProperties(TypedDict):
|
|
17
|
-
Name:
|
|
18
|
-
Arn:
|
|
19
|
-
Tags:
|
|
17
|
+
Name: str | None
|
|
18
|
+
Arn: str | None
|
|
19
|
+
Tags: list[TagsEntry] | None
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class TagsEntry(TypedDict):
|
|
23
|
-
Key:
|
|
24
|
-
Value:
|
|
23
|
+
Key: str | None
|
|
24
|
+
Value: str | None
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
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 StepFunctionsActivityProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::StepFunctions::Activity"
|
|
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.stepfunctions.resource_providers.aws_stepfunctions_activity import (
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
import json
|
|
5
5
|
import re
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import TypedDict
|
|
8
8
|
|
|
9
9
|
import localstack.services.cloudformation.provider_utils as util
|
|
10
10
|
from localstack.services.cloudformation.resource_provider import (
|
|
@@ -18,48 +18,48 @@ from localstack.utils.strings import to_str
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class StepFunctionsStateMachineProperties(TypedDict):
|
|
21
|
-
RoleArn:
|
|
22
|
-
Arn:
|
|
23
|
-
Definition:
|
|
24
|
-
DefinitionS3Location:
|
|
25
|
-
DefinitionString:
|
|
26
|
-
DefinitionSubstitutions:
|
|
27
|
-
LoggingConfiguration:
|
|
28
|
-
Name:
|
|
29
|
-
StateMachineName:
|
|
30
|
-
StateMachineRevisionId:
|
|
31
|
-
StateMachineType:
|
|
32
|
-
Tags:
|
|
33
|
-
TracingConfiguration:
|
|
21
|
+
RoleArn: str | None
|
|
22
|
+
Arn: str | None
|
|
23
|
+
Definition: dict | None
|
|
24
|
+
DefinitionS3Location: S3Location | None
|
|
25
|
+
DefinitionString: str | None
|
|
26
|
+
DefinitionSubstitutions: dict | None
|
|
27
|
+
LoggingConfiguration: LoggingConfiguration | None
|
|
28
|
+
Name: str | None
|
|
29
|
+
StateMachineName: str | None
|
|
30
|
+
StateMachineRevisionId: str | None
|
|
31
|
+
StateMachineType: str | None
|
|
32
|
+
Tags: list[TagsEntry] | None
|
|
33
|
+
TracingConfiguration: TracingConfiguration | None
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class CloudWatchLogsLogGroup(TypedDict):
|
|
37
|
-
LogGroupArn:
|
|
37
|
+
LogGroupArn: str | None
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
class LogDestination(TypedDict):
|
|
41
|
-
CloudWatchLogsLogGroup:
|
|
41
|
+
CloudWatchLogsLogGroup: CloudWatchLogsLogGroup | None
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
class LoggingConfiguration(TypedDict):
|
|
45
|
-
Destinations:
|
|
46
|
-
IncludeExecutionData:
|
|
47
|
-
Level:
|
|
45
|
+
Destinations: list[LogDestination] | None
|
|
46
|
+
IncludeExecutionData: bool | None
|
|
47
|
+
Level: str | None
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
class TracingConfiguration(TypedDict):
|
|
51
|
-
Enabled:
|
|
51
|
+
Enabled: bool | None
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
class S3Location(TypedDict):
|
|
55
|
-
Bucket:
|
|
56
|
-
Key:
|
|
57
|
-
Version:
|
|
55
|
+
Bucket: str | None
|
|
56
|
+
Key: str | None
|
|
57
|
+
Version: str | None
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
class TagsEntry(TypedDict):
|
|
61
|
-
Key:
|
|
62
|
-
Value:
|
|
61
|
+
Key: str | None
|
|
62
|
+
Value: str | None
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
REPEATED_INVOCATION = "repeated_invocation"
|
localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py
CHANGED
|
@@ -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 StepFunctionsStateMachineProviderPlugin(CloudFormationResourceProviderPlug
|
|
|
10
8
|
name = "AWS::StepFunctions::StateMachine"
|
|
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.stepfunctions.resource_providers.aws_stepfunctions_statemachine import (
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import logging
|
|
3
|
-
from typing import Dict
|
|
4
3
|
|
|
5
4
|
from localstack.aws.api.stepfunctions import ValidationException
|
|
6
5
|
from localstack.aws.connect import connect_to
|
|
@@ -11,7 +10,7 @@ from localstack.utils.strings import to_bytes, to_str
|
|
|
11
10
|
LOG = logging.getLogger(__name__)
|
|
12
11
|
|
|
13
12
|
|
|
14
|
-
def await_sfn_execution_result(execution_arn: str, timeout_secs: int = 60) ->
|
|
13
|
+
def await_sfn_execution_result(execution_arn: str, timeout_secs: int = 60) -> dict:
|
|
15
14
|
"""Wait until the given SFN execution ARN is no longer in RUNNING status, then return execution result."""
|
|
16
15
|
|
|
17
16
|
arn_data = parse_arn(execution_arn)
|
localstack/services/stores.py
CHANGED
|
@@ -30,9 +30,9 @@ While not recommended, store classes may define member helper functions and prop
|
|
|
30
30
|
"""
|
|
31
31
|
|
|
32
32
|
import re
|
|
33
|
-
from collections.abc import Callable
|
|
33
|
+
from collections.abc import Callable, Iterator
|
|
34
34
|
from threading import RLock
|
|
35
|
-
from typing import Any, Generic,
|
|
35
|
+
from typing import Any, Generic, TypeVar
|
|
36
36
|
|
|
37
37
|
from localstack import config
|
|
38
38
|
from localstack.utils.aws.aws_stack import get_valid_regions_for_service
|
|
@@ -52,7 +52,7 @@ class LocalAttribute:
|
|
|
52
52
|
Descriptor protocol for marking store attributes as local to a region.
|
|
53
53
|
"""
|
|
54
54
|
|
|
55
|
-
def __init__(self, default:
|
|
55
|
+
def __init__(self, default: Callable | int | float | str | bool | None):
|
|
56
56
|
"""
|
|
57
57
|
:param default: Default value assigned to the local attribute. Must be a scalar
|
|
58
58
|
or a callable.
|
|
@@ -81,7 +81,7 @@ class CrossRegionAttribute:
|
|
|
81
81
|
Descriptor protocol for marking store attributes as shared across all regions.
|
|
82
82
|
"""
|
|
83
83
|
|
|
84
|
-
def __init__(self, default:
|
|
84
|
+
def __init__(self, default: Callable | int | float | str | bool | None):
|
|
85
85
|
"""
|
|
86
86
|
:param default: The default value assigned to the cross-region attribute.
|
|
87
87
|
This must be a scalar or a callable.
|
|
@@ -122,7 +122,7 @@ class CrossAccountAttribute:
|
|
|
122
122
|
This should be used for resources that are identified by ARNs.
|
|
123
123
|
"""
|
|
124
124
|
|
|
125
|
-
def __init__(self, default:
|
|
125
|
+
def __init__(self, default: Callable | int | float | str | bool | None):
|
|
126
126
|
"""
|
|
127
127
|
:param default: The default value assigned to the cross-account attribute.
|
|
128
128
|
This must be a scalar or a callable.
|
|
@@ -198,7 +198,7 @@ class RegionBundle(dict, Generic[BaseStoreType]):
|
|
|
198
198
|
def __init__(
|
|
199
199
|
self,
|
|
200
200
|
service_name: str,
|
|
201
|
-
store:
|
|
201
|
+
store: type[BaseStoreType],
|
|
202
202
|
account_id: str,
|
|
203
203
|
validate: bool = True,
|
|
204
204
|
lock: RLock = None,
|
|
@@ -238,7 +238,7 @@ class RegionBundle(dict, Generic[BaseStoreType]):
|
|
|
238
238
|
|
|
239
239
|
store_obj._global = self._global
|
|
240
240
|
store_obj._universal = self._universal
|
|
241
|
-
store_obj.
|
|
241
|
+
store_obj._service_name = self.service_name
|
|
242
242
|
store_obj._account_id = self.account_id
|
|
243
243
|
store_obj._region_name = region_name
|
|
244
244
|
|
|
@@ -286,7 +286,7 @@ class AccountRegionBundle(dict, Generic[BaseStoreType]):
|
|
|
286
286
|
Encapsulation for all stores for all AWS account IDs.
|
|
287
287
|
"""
|
|
288
288
|
|
|
289
|
-
def __init__(self, service_name: str, store:
|
|
289
|
+
def __init__(self, service_name: str, store: type[BaseStoreType], validate: bool = True):
|
|
290
290
|
"""
|
|
291
291
|
:param service_name: Name of the service. Must be a valid service defined in botocore.
|
|
292
292
|
:param store: Class definition of the Store
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
1
|
from localstack.packages import Package
|
|
4
2
|
from localstack.packages.core import PythonPackageInstaller
|
|
5
3
|
|
|
@@ -13,7 +11,7 @@ class VoskPackage(Package[PythonPackageInstaller]):
|
|
|
13
11
|
def _get_installer(self, version: str) -> PythonPackageInstaller:
|
|
14
12
|
return VoskPackageInstaller(version)
|
|
15
13
|
|
|
16
|
-
def get_versions(self) ->
|
|
14
|
+
def get_versions(self) -> list[str]:
|
|
17
15
|
return [_VOSK_DEFAULT_VERSION]
|
|
18
16
|
|
|
19
17
|
|
|
@@ -5,7 +5,7 @@ import threading
|
|
|
5
5
|
import wave
|
|
6
6
|
from functools import cache
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
9
9
|
from zipfile import ZipFile
|
|
10
10
|
|
|
11
11
|
from localstack import config
|
|
@@ -277,7 +277,7 @@ class TranscribeProvider(TranscribeApi):
|
|
|
277
277
|
# Threads
|
|
278
278
|
#
|
|
279
279
|
|
|
280
|
-
def _run_transcription_job(self, args:
|
|
280
|
+
def _run_transcription_job(self, args: tuple[TranscribeStore, str]) -> None:
|
|
281
281
|
store, job_name = args
|
|
282
282
|
|
|
283
283
|
job = store.transcription_jobs[job_name]
|
|
@@ -412,4 +412,9 @@ class TranscribeProvider(TranscribeApi):
|
|
|
412
412
|
job["FailureReason"] = failure_reason or str(exc)
|
|
413
413
|
job["TranscriptionJobStatus"] = TranscriptionJobStatus.FAILED
|
|
414
414
|
|
|
415
|
-
LOG.
|
|
415
|
+
LOG.error(
|
|
416
|
+
"Transcription job %s failed: %s",
|
|
417
|
+
job_name,
|
|
418
|
+
job["FailureReason"],
|
|
419
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
420
|
+
)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Factory for encoders and decoders"""
|
|
2
|
+
|
|
3
|
+
from localstack import config
|
|
4
|
+
from localstack.state import Decoder, Encoder
|
|
5
|
+
from localstack.state.pickle import PickleDecoder, PickleEncoder
|
|
6
|
+
|
|
7
|
+
ENCODERS = {
|
|
8
|
+
"dill": PickleEncoder,
|
|
9
|
+
}
|
|
10
|
+
"""Encoders that map to the name of ``STATE_SERIALIZATION_BACKEND``."""
|
|
11
|
+
|
|
12
|
+
DECODERS = {
|
|
13
|
+
"dill": PickleDecoder,
|
|
14
|
+
}
|
|
15
|
+
"""Decoders that map to the name of ``STATE_SERIALIZATION_BACKEND``."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def create_encoder(encoder_type: str) -> Encoder:
|
|
19
|
+
cls = ENCODERS.get(encoder_type)
|
|
20
|
+
if cls is None:
|
|
21
|
+
raise ValueError(f"Unknown encoder type: {encoder_type}")
|
|
22
|
+
return cls()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def create_decoder(decoder_type: str) -> Decoder:
|
|
26
|
+
cls = DECODERS.get(decoder_type, PickleDecoder)
|
|
27
|
+
if cls is None:
|
|
28
|
+
raise ValueError(f"Unknown decoder type: {decoder_type}")
|
|
29
|
+
return cls()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def get_default_encoder() -> Encoder:
|
|
33
|
+
"""
|
|
34
|
+
Gets the default encoder based on the state serialization backend defined in the configuration
|
|
35
|
+
``STATE_SERIALIZATION_BACKEND``.
|
|
36
|
+
|
|
37
|
+
If the serialization backend specified in the configuration leads to an error
|
|
38
|
+
(such as an invalid backend), a ``PickleEncoder`` is returned as a fallback.
|
|
39
|
+
|
|
40
|
+
:return: The default encoder for state serialization.
|
|
41
|
+
"""
|
|
42
|
+
try:
|
|
43
|
+
return create_encoder(config.STATE_SERIALIZATION_BACKEND)
|
|
44
|
+
except ValueError:
|
|
45
|
+
return PickleEncoder()
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def get_default_decoder() -> Decoder:
|
|
49
|
+
"""
|
|
50
|
+
Gets the default decoder based on the state serialization backend defined in the configuration
|
|
51
|
+
``STATE_SERIALIZATION_BACKEND``.
|
|
52
|
+
|
|
53
|
+
If the serialization backend specified in the configuration leads to an error
|
|
54
|
+
(such as an invalid backend), a ``PickleDecoder`` is returned as a fallback.
|
|
55
|
+
|
|
56
|
+
:return: The default decoder for state serialization.
|
|
57
|
+
"""
|
|
58
|
+
try:
|
|
59
|
+
return create_decoder(config.STATE_SERIALIZATION_BACKEND)
|
|
60
|
+
except ValueError:
|
|
61
|
+
return PickleDecoder()
|
localstack/state/core.py
CHANGED
|
@@ -97,42 +97,48 @@ class AssetDirectory:
|
|
|
97
97
|
|
|
98
98
|
|
|
99
99
|
class Encoder:
|
|
100
|
-
def encodes(self, obj: Any) -> bytes:
|
|
100
|
+
def encodes(self, obj: Any, py_type: type = None) -> bytes:
|
|
101
101
|
"""
|
|
102
102
|
Encode an object into bytes.
|
|
103
103
|
|
|
104
104
|
:param obj: the object to encode
|
|
105
|
+
:param py_type: the type of the object. needed by some encoders that don't have implicit type knowledge.
|
|
105
106
|
:return: the encoded object
|
|
106
107
|
"""
|
|
107
108
|
b = io.BytesIO()
|
|
108
109
|
self.encode(obj, b)
|
|
109
110
|
return b.getvalue()
|
|
110
111
|
|
|
111
|
-
def encode(self, obj: Any, file: IO[bytes]):
|
|
112
|
+
def encode(self, obj: Any, file: IO[bytes], py_type: type = None):
|
|
112
113
|
"""
|
|
113
114
|
Encode an object into bytes.
|
|
114
115
|
|
|
115
116
|
:param obj: the object to encode
|
|
117
|
+
:param py_type: the type of the object. needed by some encoders that don't have implicit type knowledge.
|
|
116
118
|
:param file: the file to write the encoded data into
|
|
117
119
|
"""
|
|
118
120
|
raise NotImplementedError
|
|
119
121
|
|
|
120
122
|
|
|
121
123
|
class Decoder:
|
|
122
|
-
def decodes(self, data: bytes) -> Any:
|
|
124
|
+
def decodes(self, data: bytes, py_type: type = None) -> Any:
|
|
123
125
|
"""
|
|
124
126
|
Decode a previously encoded object.
|
|
125
127
|
|
|
126
128
|
:param data: the encoded object to decode
|
|
129
|
+
:param py_type: the type that is expected as return type. Needed by some decoders that don't have implicit
|
|
130
|
+
type knowledge.
|
|
127
131
|
:return: the decoded object
|
|
128
132
|
"""
|
|
129
|
-
return self.decode(io.BytesIO(data))
|
|
133
|
+
return self.decode(io.BytesIO(data), py_type)
|
|
130
134
|
|
|
131
|
-
def decode(self, file: IO[bytes]) -> Any:
|
|
135
|
+
def decode(self, file: IO[bytes], py_type: type = None) -> Any:
|
|
132
136
|
"""
|
|
133
137
|
Decode a previously encoded object.
|
|
134
138
|
|
|
135
139
|
:param file: the io object containing the object to decode
|
|
140
|
+
:param py_type: the type that is expected as return type. Needed by some decoders that don't have implicit
|
|
141
|
+
type knowledge.
|
|
136
142
|
:return: the decoded object
|
|
137
143
|
"""
|
|
138
144
|
raise NotImplementedError
|
localstack/state/inspect.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import importlib
|
|
4
4
|
import logging
|
|
5
5
|
from functools import singledispatchmethod
|
|
6
|
-
from typing import Any,
|
|
6
|
+
from typing import Any, TypedDict
|
|
7
7
|
|
|
8
8
|
from moto.core.base_backend import BackendDict
|
|
9
9
|
|
|
@@ -17,14 +17,14 @@ class ServiceBackend(TypedDict, total=False):
|
|
|
17
17
|
"""Wrapper of the possible type of backends that a service can use."""
|
|
18
18
|
|
|
19
19
|
localstack: AccountRegionBundle | None
|
|
20
|
-
moto: BackendDict |
|
|
20
|
+
moto: BackendDict | dict | None
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class ServiceBackendCollectorVisitor(StateVisitor):
|
|
24
24
|
"""Implementation of StateVisitor meant to collect the backends that a given service use to hold its state."""
|
|
25
25
|
|
|
26
26
|
store: AccountRegionBundle | None
|
|
27
|
-
backend_dict: BackendDict |
|
|
27
|
+
backend_dict: BackendDict | dict | None
|
|
28
28
|
|
|
29
29
|
def __init__(self) -> None:
|
|
30
30
|
self.store = None
|
|
@@ -60,7 +60,7 @@ class ReflectionStateLocator:
|
|
|
60
60
|
|
|
61
61
|
provider: Any
|
|
62
62
|
|
|
63
|
-
def __init__(self, provider:
|
|
63
|
+
def __init__(self, provider: Any | None = None, service: str | None = None):
|
|
64
64
|
self.provider = provider
|
|
65
65
|
self.service = service or provider.service
|
|
66
66
|
|
localstack/state/pickle.py
CHANGED
|
@@ -29,7 +29,8 @@ https://dill.readthedocs.io/en/latest/index.html?highlight=register#dill.Pickler
|
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
31
|
import inspect
|
|
32
|
-
from
|
|
32
|
+
from collections.abc import Callable
|
|
33
|
+
from typing import Any, BinaryIO, Generic, TypeVar
|
|
33
34
|
|
|
34
35
|
import dill
|
|
35
36
|
from dill._dill import MetaCatchingDict
|
|
@@ -42,7 +43,7 @@ PythonPickler = Any
|
|
|
42
43
|
"""Type placeholder for pickle._Pickler (which has for instance the save_reduce method)"""
|
|
43
44
|
|
|
44
45
|
|
|
45
|
-
def register(cls:
|
|
46
|
+
def register(cls: type = None, subclasses: bool = False):
|
|
46
47
|
"""
|
|
47
48
|
Decorator to register a custom type or type tree into the dill pickling dispatcher table.
|
|
48
49
|
|
|
@@ -60,14 +61,14 @@ def register(cls: Type = None, subclasses: bool = False):
|
|
|
60
61
|
elif callable(fn):
|
|
61
62
|
add_dispatch_entry(cls, fn, subclasses=subclasses)
|
|
62
63
|
else:
|
|
63
|
-
raise ValueError("cannot register
|
|
64
|
+
raise ValueError(f"cannot register {fn}")
|
|
64
65
|
|
|
65
66
|
return fn
|
|
66
67
|
|
|
67
68
|
return _wrapper
|
|
68
69
|
|
|
69
70
|
|
|
70
|
-
def reducer(cls:
|
|
71
|
+
def reducer(cls: type, restore: Callable = None, subclasses: bool = False):
|
|
71
72
|
"""
|
|
72
73
|
Convenience decorator to simplify the following pattern::
|
|
73
74
|
|
|
@@ -115,14 +116,14 @@ def reducer(cls: Type, restore: Callable = None, subclasses: bool = False):
|
|
|
115
116
|
|
|
116
117
|
|
|
117
118
|
def add_dispatch_entry(
|
|
118
|
-
cls:
|
|
119
|
+
cls: type, fn: Callable[[PythonPickler, Any], None], subclasses: bool = False
|
|
119
120
|
):
|
|
120
121
|
Pickler.dispatch_overwrite[cls] = fn
|
|
121
122
|
if subclasses:
|
|
122
123
|
Pickler.match_subclasses_of.add(cls)
|
|
123
124
|
|
|
124
125
|
|
|
125
|
-
def remove_dispatch_entry(cls:
|
|
126
|
+
def remove_dispatch_entry(cls: type):
|
|
126
127
|
try:
|
|
127
128
|
del Pickler.dispatch_overwrite[cls]
|
|
128
129
|
except KeyError:
|
|
@@ -136,42 +137,42 @@ def remove_dispatch_entry(cls: Type):
|
|
|
136
137
|
|
|
137
138
|
def dumps(obj: Any) -> bytes:
|
|
138
139
|
"""
|
|
139
|
-
Pickle an object into bytes using a ``
|
|
140
|
+
Pickle an object into bytes using a ``Encoder``.
|
|
140
141
|
|
|
141
142
|
:param obj: the object to pickle
|
|
142
143
|
:return: the pickled object
|
|
143
144
|
"""
|
|
144
|
-
return
|
|
145
|
+
return get_default_encoder().encodes(obj)
|
|
145
146
|
|
|
146
147
|
|
|
147
148
|
def dump(obj: Any, file: BinaryIO):
|
|
148
149
|
"""
|
|
149
|
-
Pickle an object into a buffer using a ``
|
|
150
|
+
Pickle an object into a buffer using a ``Encoder``.
|
|
150
151
|
|
|
151
152
|
:param obj: the object to pickle
|
|
152
153
|
:param file: the IO buffer
|
|
153
154
|
"""
|
|
154
|
-
return
|
|
155
|
+
return get_default_encoder().encode(obj, file)
|
|
155
156
|
|
|
156
157
|
|
|
157
158
|
def loads(data: bytes) -> Any:
|
|
158
159
|
"""
|
|
159
|
-
Unpickle am object from bytes using a ``
|
|
160
|
+
Unpickle am object from bytes using a ``Decoder``.
|
|
160
161
|
|
|
161
162
|
:param data: the pickled object
|
|
162
163
|
:return: the unpickled object
|
|
163
164
|
"""
|
|
164
|
-
return
|
|
165
|
+
return get_default_decoder().decodes(data)
|
|
165
166
|
|
|
166
167
|
|
|
167
168
|
def load(file: BinaryIO) -> Any:
|
|
168
169
|
"""
|
|
169
|
-
Unpickle am object from a buffer using a ``
|
|
170
|
+
Unpickle am object from a buffer using a ``Decoder``.
|
|
170
171
|
|
|
171
172
|
:param file: the buffer containing the pickled object
|
|
172
173
|
:return: the unpickled object
|
|
173
174
|
"""
|
|
174
|
-
return
|
|
175
|
+
return get_default_decoder().decode(file)
|
|
175
176
|
|
|
176
177
|
|
|
177
178
|
class _SuperclassMatchingTypeDict(MetaCatchingDict):
|
|
@@ -187,7 +188,7 @@ class _SuperclassMatchingTypeDict(MetaCatchingDict):
|
|
|
187
188
|
|
|
188
189
|
"""
|
|
189
190
|
|
|
190
|
-
def __init__(self, seq=None, match_subclasses_of: set[
|
|
191
|
+
def __init__(self, seq=None, match_subclasses_of: set[type] = None):
|
|
191
192
|
if seq is not None:
|
|
192
193
|
super().__init__(seq)
|
|
193
194
|
else:
|
|
@@ -212,8 +213,8 @@ class Pickler(dill.Pickler):
|
|
|
212
213
|
Custom dill pickler that considers dispatchers and subclass dispatchers registered via ``register``.
|
|
213
214
|
"""
|
|
214
215
|
|
|
215
|
-
match_subclasses_of: set[
|
|
216
|
-
dispatch_overwrite: dict[
|
|
216
|
+
match_subclasses_of: set[type] = set()
|
|
217
|
+
dispatch_overwrite: dict[type, Callable] = {}
|
|
217
218
|
|
|
218
219
|
def __init__(self, *args, **kwargs):
|
|
219
220
|
super().__init__(*args, **kwargs)
|
|
@@ -231,12 +232,12 @@ class PickleEncoder(Encoder):
|
|
|
231
232
|
extended with custom serializers.
|
|
232
233
|
"""
|
|
233
234
|
|
|
234
|
-
pickler_class:
|
|
235
|
+
pickler_class: type[dill.Pickler]
|
|
235
236
|
|
|
236
|
-
def __init__(self, pickler_class:
|
|
237
|
+
def __init__(self, pickler_class: type[dill.Pickler] = None):
|
|
237
238
|
self.pickler_class = pickler_class or Pickler
|
|
238
239
|
|
|
239
|
-
def encode(self, obj: Any, file: BinaryIO):
|
|
240
|
+
def encode(self, obj: Any, file: BinaryIO, py_type: type = None) -> Any:
|
|
240
241
|
return self.pickler_class(file).dump(obj)
|
|
241
242
|
|
|
242
243
|
|
|
@@ -246,15 +247,27 @@ class PickleDecoder(Decoder):
|
|
|
246
247
|
extended with custom serializers.
|
|
247
248
|
"""
|
|
248
249
|
|
|
249
|
-
unpickler_class:
|
|
250
|
+
unpickler_class: type[dill.Unpickler]
|
|
250
251
|
|
|
251
|
-
def __init__(self, unpickler_class:
|
|
252
|
+
def __init__(self, unpickler_class: type[dill.Unpickler] = None):
|
|
252
253
|
self.unpickler_class = unpickler_class or dill.Unpickler
|
|
253
254
|
|
|
254
|
-
def decode(self, file: BinaryIO) -> Any:
|
|
255
|
+
def decode(self, file: BinaryIO, py_type=None) -> Any:
|
|
255
256
|
return self.unpickler_class(file).load()
|
|
256
257
|
|
|
257
258
|
|
|
259
|
+
def get_default_encoder() -> Encoder:
|
|
260
|
+
from .codecs import get_default_encoder
|
|
261
|
+
|
|
262
|
+
return get_default_encoder()
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def get_default_decoder() -> Decoder:
|
|
266
|
+
from .codecs import get_default_decoder
|
|
267
|
+
|
|
268
|
+
return get_default_decoder()
|
|
269
|
+
|
|
270
|
+
|
|
258
271
|
class ObjectStateReducer(Generic[_T]):
|
|
259
272
|
"""
|
|
260
273
|
A generalization of the following pattern::
|
|
@@ -3,12 +3,13 @@ import importlib.util
|
|
|
3
3
|
import inspect
|
|
4
4
|
import pkgutil
|
|
5
5
|
import re
|
|
6
|
+
from re import Pattern
|
|
6
7
|
from types import FunctionType, ModuleType, NoneType, UnionType
|
|
7
|
-
from typing import
|
|
8
|
+
from typing import Union, get_args, get_origin
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
def _import_submodules(
|
|
11
|
-
package_name: str, module_regex:
|
|
12
|
+
package_name: str, module_regex: Pattern | None = None, recursive: bool = True
|
|
12
13
|
) -> dict[str, ModuleType]:
|
|
13
14
|
"""
|
|
14
15
|
Imports all submodules of the given package with the defined (optional) module_suffix.
|
|
@@ -29,7 +29,7 @@ def load_template_file(file_path: str | os.PathLike, *, path_ctx: str | os.PathL
|
|
|
29
29
|
elif not file_path_obj.is_absolute():
|
|
30
30
|
raise ValueError("Provided path must be absolute if no path_ctx is provided")
|
|
31
31
|
|
|
32
|
-
return load_file(file_path_obj.absolute())
|
|
32
|
+
return load_file(file_path_obj.absolute(), strict=True)
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
# TODO: TBH this utility really doesn't add anything, probably better to just remove it
|