localstack-core 4.6.1.dev74__py3-none-any.whl → 4.10.1.dev7__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.
Potentially problematic release.
This version of localstack-core might be problematic. Click here for more details.
- 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 +1524 -64
- 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 +13 -0
- 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 +40 -31
- localstack/constants.py +4 -29
- localstack/deprecations.py +5 -5
- localstack/dev/kubernetes/__main__.py +85 -5
- 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 +286 -139
- 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 +161 -31
- 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 +8 -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 +31 -22
- localstack/services/cloudformation/v2/entities.py +65 -92
- localstack/services/cloudformation/v2/provider.py +553 -128
- 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 +49 -8
- 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 +48 -7
- 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 +17 -11
- 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 +4 -4
- 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 +4 -4
- 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 +22 -60
- 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 -55
- 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 +11 -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.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/METADATA +18 -14
- {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/RECORD +663 -656
- {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/entry_points.txt +8 -4
- localstack_core-4.10.1.dev7.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.dev74.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.dev74.data → localstack_core-4.10.1.dev7.data}/scripts/localstack +0 -0
- {localstack_core-4.6.1.dev74.data → localstack_core-4.10.1.dev7.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.6.1.dev74.data → localstack_core-4.10.1.dev7.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/WHEEL +0 -0
- {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.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,14 +29,12 @@ 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
|
-
import jsonpickle
|
|
36
36
|
from dill._dill import MetaCatchingDict
|
|
37
37
|
|
|
38
|
-
from localstack import config
|
|
39
|
-
|
|
40
38
|
from .core import Decoder, Encoder
|
|
41
39
|
|
|
42
40
|
_T = TypeVar("_T")
|
|
@@ -45,7 +43,7 @@ PythonPickler = Any
|
|
|
45
43
|
"""Type placeholder for pickle._Pickler (which has for instance the save_reduce method)"""
|
|
46
44
|
|
|
47
45
|
|
|
48
|
-
def register(cls:
|
|
46
|
+
def register(cls: type = None, subclasses: bool = False):
|
|
49
47
|
"""
|
|
50
48
|
Decorator to register a custom type or type tree into the dill pickling dispatcher table.
|
|
51
49
|
|
|
@@ -63,14 +61,14 @@ def register(cls: Type = None, subclasses: bool = False):
|
|
|
63
61
|
elif callable(fn):
|
|
64
62
|
add_dispatch_entry(cls, fn, subclasses=subclasses)
|
|
65
63
|
else:
|
|
66
|
-
raise ValueError("cannot register
|
|
64
|
+
raise ValueError(f"cannot register {fn}")
|
|
67
65
|
|
|
68
66
|
return fn
|
|
69
67
|
|
|
70
68
|
return _wrapper
|
|
71
69
|
|
|
72
70
|
|
|
73
|
-
def reducer(cls:
|
|
71
|
+
def reducer(cls: type, restore: Callable = None, subclasses: bool = False):
|
|
74
72
|
"""
|
|
75
73
|
Convenience decorator to simplify the following pattern::
|
|
76
74
|
|
|
@@ -118,14 +116,14 @@ def reducer(cls: Type, restore: Callable = None, subclasses: bool = False):
|
|
|
118
116
|
|
|
119
117
|
|
|
120
118
|
def add_dispatch_entry(
|
|
121
|
-
cls:
|
|
119
|
+
cls: type, fn: Callable[[PythonPickler, Any], None], subclasses: bool = False
|
|
122
120
|
):
|
|
123
121
|
Pickler.dispatch_overwrite[cls] = fn
|
|
124
122
|
if subclasses:
|
|
125
123
|
Pickler.match_subclasses_of.add(cls)
|
|
126
124
|
|
|
127
125
|
|
|
128
|
-
def remove_dispatch_entry(cls:
|
|
126
|
+
def remove_dispatch_entry(cls: type):
|
|
129
127
|
try:
|
|
130
128
|
del Pickler.dispatch_overwrite[cls]
|
|
131
129
|
except KeyError:
|
|
@@ -190,7 +188,7 @@ class _SuperclassMatchingTypeDict(MetaCatchingDict):
|
|
|
190
188
|
|
|
191
189
|
"""
|
|
192
190
|
|
|
193
|
-
def __init__(self, seq=None, match_subclasses_of: set[
|
|
191
|
+
def __init__(self, seq=None, match_subclasses_of: set[type] = None):
|
|
194
192
|
if seq is not None:
|
|
195
193
|
super().__init__(seq)
|
|
196
194
|
else:
|
|
@@ -215,8 +213,8 @@ class Pickler(dill.Pickler):
|
|
|
215
213
|
Custom dill pickler that considers dispatchers and subclass dispatchers registered via ``register``.
|
|
216
214
|
"""
|
|
217
215
|
|
|
218
|
-
match_subclasses_of: set[
|
|
219
|
-
dispatch_overwrite: dict[
|
|
216
|
+
match_subclasses_of: set[type] = set()
|
|
217
|
+
dispatch_overwrite: dict[type, Callable] = {}
|
|
220
218
|
|
|
221
219
|
def __init__(self, *args, **kwargs):
|
|
222
220
|
super().__init__(*args, **kwargs)
|
|
@@ -234,12 +232,12 @@ class PickleEncoder(Encoder):
|
|
|
234
232
|
extended with custom serializers.
|
|
235
233
|
"""
|
|
236
234
|
|
|
237
|
-
pickler_class:
|
|
235
|
+
pickler_class: type[dill.Pickler]
|
|
238
236
|
|
|
239
|
-
def __init__(self, pickler_class:
|
|
237
|
+
def __init__(self, pickler_class: type[dill.Pickler] = None):
|
|
240
238
|
self.pickler_class = pickler_class or Pickler
|
|
241
239
|
|
|
242
|
-
def encode(self, obj: Any, file: BinaryIO):
|
|
240
|
+
def encode(self, obj: Any, file: BinaryIO, py_type: type = None) -> Any:
|
|
243
241
|
return self.pickler_class(file).dump(obj)
|
|
244
242
|
|
|
245
243
|
|
|
@@ -249,61 +247,25 @@ class PickleDecoder(Decoder):
|
|
|
249
247
|
extended with custom serializers.
|
|
250
248
|
"""
|
|
251
249
|
|
|
252
|
-
unpickler_class:
|
|
250
|
+
unpickler_class: type[dill.Unpickler]
|
|
253
251
|
|
|
254
|
-
def __init__(self, unpickler_class:
|
|
252
|
+
def __init__(self, unpickler_class: type[dill.Unpickler] = None):
|
|
255
253
|
self.unpickler_class = unpickler_class or dill.Unpickler
|
|
256
254
|
|
|
257
|
-
def decode(self, file: BinaryIO) -> Any:
|
|
255
|
+
def decode(self, file: BinaryIO, py_type=None) -> Any:
|
|
258
256
|
return self.unpickler_class(file).load()
|
|
259
257
|
|
|
260
258
|
|
|
261
|
-
class JsonEncoder(Encoder):
|
|
262
|
-
"""
|
|
263
|
-
An Encoder that uses ``jsonpickle`` under the hood.
|
|
264
|
-
"""
|
|
265
|
-
|
|
266
|
-
def __init__(self, pickler_class: Type[jsonpickle.Pickler] = None):
|
|
267
|
-
self.pickler_class = pickler_class or jsonpickle.Pickler()
|
|
268
|
-
|
|
269
|
-
def encode(self, obj: Any, file: IO[bytes]):
|
|
270
|
-
json_str = jsonpickle.encode(obj, context=self.pickler_class)
|
|
271
|
-
file.write(json_str.encode("utf-8"))
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
class JsonDecoder(Decoder):
|
|
275
|
-
"""
|
|
276
|
-
A Decoder that uses ``jsonpickle`` under the hood.
|
|
277
|
-
"""
|
|
278
|
-
|
|
279
|
-
unpickler_class: Type[jsonpickle.Unpickler]
|
|
280
|
-
|
|
281
|
-
def __init__(self, unpickler_class: Type[jsonpickle.Unpickler] = None):
|
|
282
|
-
self.unpickler_class = unpickler_class or jsonpickle.Unpickler()
|
|
283
|
-
|
|
284
|
-
def decode(self, file: IO[bytes]) -> Any:
|
|
285
|
-
json_str = file.read().decode("utf-8")
|
|
286
|
-
return jsonpickle.decode(json_str, context=self.unpickler_class)
|
|
287
|
-
|
|
288
|
-
|
|
289
259
|
def get_default_encoder() -> Encoder:
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
case "dill":
|
|
294
|
-
return PickleEncoder()
|
|
295
|
-
case _:
|
|
296
|
-
return PickleEncoder()
|
|
260
|
+
from .codecs import get_default_encoder
|
|
261
|
+
|
|
262
|
+
return get_default_encoder()
|
|
297
263
|
|
|
298
264
|
|
|
299
265
|
def get_default_decoder() -> Decoder:
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
case "dill":
|
|
304
|
-
return PickleDecoder()
|
|
305
|
-
case _:
|
|
306
|
-
return PickleDecoder()
|
|
266
|
+
from .codecs import get_default_decoder
|
|
267
|
+
|
|
268
|
+
return get_default_decoder()
|
|
307
269
|
|
|
308
270
|
|
|
309
271
|
class ObjectStateReducer(Generic[_T]):
|
|
@@ -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
|