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
localstack/services/s3/utils.py
CHANGED
|
@@ -7,9 +7,10 @@ import logging
|
|
|
7
7
|
import re
|
|
8
8
|
import time
|
|
9
9
|
import zlib
|
|
10
|
+
from collections.abc import Mapping
|
|
10
11
|
from enum import StrEnum
|
|
11
12
|
from secrets import token_bytes
|
|
12
|
-
from typing import Any,
|
|
13
|
+
from typing import Any, Literal, NamedTuple, Protocol
|
|
13
14
|
from urllib import parse as urlparser
|
|
14
15
|
from zoneinfo import ZoneInfo
|
|
15
16
|
|
|
@@ -50,6 +51,7 @@ from localstack.aws.api.s3 import (
|
|
|
50
51
|
SSEKMSKeyId,
|
|
51
52
|
TaggingHeader,
|
|
52
53
|
TagSet,
|
|
54
|
+
UploadPartCopyRequest,
|
|
53
55
|
UploadPartRequest,
|
|
54
56
|
)
|
|
55
57
|
from localstack.aws.api.s3 import Type as GranteeType
|
|
@@ -62,7 +64,6 @@ from localstack.services.s3.constants import (
|
|
|
62
64
|
AUTHENTICATED_USERS_ACL_GRANTEE,
|
|
63
65
|
CHECKSUM_ALGORITHMS,
|
|
64
66
|
LOG_DELIVERY_ACL_GRANTEE,
|
|
65
|
-
S3_VIRTUAL_HOST_FORWARDED_HEADER,
|
|
66
67
|
SIGNATURE_V2_PARAMS,
|
|
67
68
|
SIGNATURE_V4_PARAMS,
|
|
68
69
|
SYSTEM_METADATA_SETTABLE_HEADERS,
|
|
@@ -143,7 +144,7 @@ def get_owner_for_account_id(account_id: str):
|
|
|
143
144
|
|
|
144
145
|
def extract_bucket_key_version_id_from_copy_source(
|
|
145
146
|
copy_source: CopySource,
|
|
146
|
-
) -> tuple[BucketName, ObjectKey,
|
|
147
|
+
) -> tuple[BucketName, ObjectKey, ObjectVersionId | None]:
|
|
147
148
|
"""
|
|
148
149
|
Utility to parse bucket name, object key and optionally its versionId. It accepts the CopySource format:
|
|
149
150
|
- <bucket-name/<object-key>?versionId=<version-id>, used for example in CopySource for CopyObject
|
|
@@ -403,6 +404,45 @@ def parse_copy_source_range_header(copy_source_range: str, object_size: int) ->
|
|
|
403
404
|
)
|
|
404
405
|
|
|
405
406
|
|
|
407
|
+
def get_failed_upload_part_copy_source_preconditions(
|
|
408
|
+
request: UploadPartCopyRequest, last_modified: datetime.datetime, etag: ETag
|
|
409
|
+
) -> str | None:
|
|
410
|
+
"""
|
|
411
|
+
Utility which parses the conditions from a S3 UploadPartCopy request.
|
|
412
|
+
Note: The order in which these conditions are checked if used in conjunction matters
|
|
413
|
+
|
|
414
|
+
:param UploadPartCopyRequest request: The S3 UploadPartCopy request.
|
|
415
|
+
:param datetime last_modified: The time the source object was last modified.
|
|
416
|
+
:param ETag etag: The ETag of the source object.
|
|
417
|
+
|
|
418
|
+
:returns: The name of the failed precondition.
|
|
419
|
+
"""
|
|
420
|
+
if_match = request.get("CopySourceIfMatch")
|
|
421
|
+
if_none_match = request.get("CopySourceIfNoneMatch")
|
|
422
|
+
if_unmodified_since = request.get("CopySourceIfUnmodifiedSince")
|
|
423
|
+
if_modified_since = request.get("CopySourceIfModifiedSince")
|
|
424
|
+
|
|
425
|
+
if if_match:
|
|
426
|
+
if if_match.strip('"') != etag.strip('"'):
|
|
427
|
+
return "x-amz-copy-source-If-Match"
|
|
428
|
+
if if_modified_since and if_modified_since > last_modified:
|
|
429
|
+
return "x-amz-copy-source-If-Modified-Since"
|
|
430
|
+
# CopySourceIfMatch is unaffected by CopySourceIfUnmodifiedSince so return early
|
|
431
|
+
if if_unmodified_since:
|
|
432
|
+
return None
|
|
433
|
+
|
|
434
|
+
if if_unmodified_since and if_unmodified_since < last_modified:
|
|
435
|
+
return "x-amz-copy-source-If-Unmodified-Since"
|
|
436
|
+
|
|
437
|
+
if if_none_match and if_none_match.strip('"') == etag.strip('"'):
|
|
438
|
+
return "x-amz-copy-source-If-None-Match"
|
|
439
|
+
|
|
440
|
+
if if_modified_since and last_modified < if_modified_since < datetime.datetime.now(
|
|
441
|
+
tz=_gmt_zone_info
|
|
442
|
+
):
|
|
443
|
+
return "x-amz-copy-source-If-Modified-Since"
|
|
444
|
+
|
|
445
|
+
|
|
406
446
|
def get_full_default_bucket_location(bucket_name: BucketName) -> str:
|
|
407
447
|
host_definition = localstack_host()
|
|
408
448
|
if host_definition.host != constants.LOCALHOST_HOSTNAME:
|
|
@@ -482,7 +522,7 @@ def is_valid_canonical_id(canonical_id: str) -> bool:
|
|
|
482
522
|
return False
|
|
483
523
|
|
|
484
524
|
|
|
485
|
-
def uses_host_addressing(headers:
|
|
525
|
+
def uses_host_addressing(headers: Mapping[str, str]) -> str | None:
|
|
486
526
|
"""
|
|
487
527
|
Determines if the request is targeting S3 with virtual host addressing
|
|
488
528
|
:param headers: the request headers
|
|
@@ -511,18 +551,9 @@ def get_system_metadata_from_request(request: dict) -> Metadata:
|
|
|
511
551
|
return metadata
|
|
512
552
|
|
|
513
553
|
|
|
514
|
-
def forwarded_from_virtual_host_addressed_request(headers: dict[str, str]) -> bool:
|
|
515
|
-
"""
|
|
516
|
-
Determines if the request was forwarded from a v-host addressing style into a path one
|
|
517
|
-
"""
|
|
518
|
-
# we can assume that the host header we are receiving here is actually the header we originally received
|
|
519
|
-
# from the client (because the edge service is forwarding the request in memory)
|
|
520
|
-
return S3_VIRTUAL_HOST_FORWARDED_HEADER in headers
|
|
521
|
-
|
|
522
|
-
|
|
523
554
|
def extract_bucket_name_and_key_from_headers_and_path(
|
|
524
555
|
headers: dict[str, str], path: str
|
|
525
|
-
) -> tuple[
|
|
556
|
+
) -> tuple[str | None, str | None]:
|
|
526
557
|
"""
|
|
527
558
|
Extract the bucket name and the object key from a request headers and path. This works with both virtual host
|
|
528
559
|
and path style requests.
|
|
@@ -556,7 +587,7 @@ def normalize_bucket_name(bucket_name):
|
|
|
556
587
|
return bucket_name
|
|
557
588
|
|
|
558
589
|
|
|
559
|
-
def get_bucket_and_key_from_s3_uri(s3_uri: str) ->
|
|
590
|
+
def get_bucket_and_key_from_s3_uri(s3_uri: str) -> tuple[str, str]:
|
|
560
591
|
"""
|
|
561
592
|
Extracts the bucket name and key from s3 uri
|
|
562
593
|
"""
|
|
@@ -564,7 +595,7 @@ def get_bucket_and_key_from_s3_uri(s3_uri: str) -> Tuple[str, str]:
|
|
|
564
595
|
return output_bucket, output_key
|
|
565
596
|
|
|
566
597
|
|
|
567
|
-
def get_bucket_and_key_from_presign_url(presign_url: str) ->
|
|
598
|
+
def get_bucket_and_key_from_presign_url(presign_url: str) -> tuple[str, str]:
|
|
568
599
|
"""
|
|
569
600
|
Extracts the bucket name and key from s3 presign url
|
|
570
601
|
"""
|
|
@@ -574,22 +605,11 @@ def get_bucket_and_key_from_presign_url(presign_url: str) -> Tuple[str, str]:
|
|
|
574
605
|
return bucket, key
|
|
575
606
|
|
|
576
607
|
|
|
577
|
-
def _create_invalid_argument_exc(
|
|
578
|
-
message: Union[str, None], name: str, value: str, host_id: str = None
|
|
579
|
-
) -> InvalidArgument:
|
|
580
|
-
ex = InvalidArgument(message)
|
|
581
|
-
ex.ArgumentName = name
|
|
582
|
-
ex.ArgumentValue = value
|
|
583
|
-
if host_id:
|
|
584
|
-
ex.HostId = host_id
|
|
585
|
-
return ex
|
|
586
|
-
|
|
587
|
-
|
|
588
608
|
def capitalize_header_name_from_snake_case(header_name: str) -> str:
|
|
589
609
|
return "-".join([part.capitalize() for part in header_name.split("-")])
|
|
590
610
|
|
|
591
611
|
|
|
592
|
-
def get_kms_key_arn(kms_key: str, account_id: str, bucket_region: str) ->
|
|
612
|
+
def get_kms_key_arn(kms_key: str, account_id: str, bucket_region: str) -> str | None:
|
|
593
613
|
"""
|
|
594
614
|
In S3, the KMS key can be passed as a KeyId or a KeyArn. This method allows to always get the KeyArn from either.
|
|
595
615
|
It can also validate if the key is in the same region, and raise an exception.
|
|
@@ -762,7 +782,7 @@ def _match_lifecycle_filter(
|
|
|
762
782
|
|
|
763
783
|
def parse_expiration_header(
|
|
764
784
|
expiration_header: str,
|
|
765
|
-
) -> tuple[
|
|
785
|
+
) -> tuple[datetime.datetime | None, str | None]:
|
|
766
786
|
try:
|
|
767
787
|
header_values = dict(
|
|
768
788
|
(p.strip('"') for p in v.split("=")) for v in expiration_header.split('", ')
|
|
@@ -878,7 +898,7 @@ def get_retention_from_now(days: int = None, years: int = None) -> datetime.date
|
|
|
878
898
|
|
|
879
899
|
def get_failed_precondition_copy_source(
|
|
880
900
|
request: CopyObjectRequest, last_modified: datetime.datetime, etag: ETag
|
|
881
|
-
) ->
|
|
901
|
+
) -> str | None:
|
|
882
902
|
"""
|
|
883
903
|
Validate if the source object LastModified and ETag matches a precondition, and if it does, return the failed
|
|
884
904
|
precondition
|
|
@@ -1019,7 +1039,7 @@ def create_redirect_for_post_request(
|
|
|
1019
1039
|
return urlparser.urlunparse(newparts)
|
|
1020
1040
|
|
|
1021
1041
|
|
|
1022
|
-
def parse_post_object_tagging_xml(tagging: str) ->
|
|
1042
|
+
def parse_post_object_tagging_xml(tagging: str) -> dict | None:
|
|
1023
1043
|
try:
|
|
1024
1044
|
tag_set = {}
|
|
1025
1045
|
tags = xmltodict.parse(tagging)
|
|
@@ -38,7 +38,6 @@ from localstack.aws.api.s3 import Type as GranteeType
|
|
|
38
38
|
from localstack.services.s3 import constants as s3_constants
|
|
39
39
|
from localstack.services.s3.exceptions import InvalidRequest, MalformedACLError, MalformedXML
|
|
40
40
|
from localstack.services.s3.utils import (
|
|
41
|
-
_create_invalid_argument_exc,
|
|
42
41
|
get_class_attrs_from_spec_class,
|
|
43
42
|
get_permission_header_name,
|
|
44
43
|
is_bucket_name_valid,
|
|
@@ -87,8 +86,11 @@ def validate_canned_acl(canned_acl: str) -> None:
|
|
|
87
86
|
Validate the canned ACL value, or raise an Exception
|
|
88
87
|
"""
|
|
89
88
|
if canned_acl and canned_acl not in VALID_CANNED_ACLS:
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
raise InvalidArgument(
|
|
90
|
+
None,
|
|
91
|
+
ArgumentName="x-amz-acl",
|
|
92
|
+
ArgumentValue=canned_acl,
|
|
93
|
+
)
|
|
92
94
|
|
|
93
95
|
|
|
94
96
|
def parse_grants_in_headers(permission: Permission, grantees: str) -> Grants:
|
|
@@ -98,16 +100,18 @@ def parse_grants_in_headers(permission: Permission, grantees: str) -> Grants:
|
|
|
98
100
|
grantee_type, grantee_id = seralized_grantee.split("=")
|
|
99
101
|
grantee_id = grantee_id.strip('"')
|
|
100
102
|
if grantee_type not in ("uri", "id", "emailAddress"):
|
|
101
|
-
|
|
103
|
+
raise InvalidArgument(
|
|
102
104
|
"Argument format not recognized",
|
|
103
|
-
get_permission_header_name(permission),
|
|
104
|
-
seralized_grantee,
|
|
105
|
+
ArgumentName=get_permission_header_name(permission),
|
|
106
|
+
ArgumentValue=seralized_grantee,
|
|
105
107
|
)
|
|
106
|
-
raise ex
|
|
107
108
|
elif grantee_type == "uri":
|
|
108
109
|
if grantee_id not in s3_constants.VALID_ACL_PREDEFINED_GROUPS:
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
raise InvalidArgument(
|
|
111
|
+
"Invalid group uri",
|
|
112
|
+
ArgumentName="uri",
|
|
113
|
+
ArgumentValue=grantee_id,
|
|
114
|
+
)
|
|
111
115
|
grantee = Grantee(
|
|
112
116
|
Type=GranteeType.Group,
|
|
113
117
|
URI=grantee_id,
|
|
@@ -115,8 +119,11 @@ def parse_grants_in_headers(permission: Permission, grantees: str) -> Grants:
|
|
|
115
119
|
|
|
116
120
|
elif grantee_type == "id":
|
|
117
121
|
if not is_valid_canonical_id(grantee_id):
|
|
118
|
-
|
|
119
|
-
|
|
122
|
+
raise InvalidArgument(
|
|
123
|
+
"Invalid id",
|
|
124
|
+
ArgumentName="id",
|
|
125
|
+
ArgumentValue=grantee_id,
|
|
126
|
+
)
|
|
120
127
|
grantee = Grantee(
|
|
121
128
|
Type=GranteeType.CanonicalUser,
|
|
122
129
|
ID=grantee_id,
|
|
@@ -141,8 +148,11 @@ def validate_acl_acp(acp: AccessControlPolicy) -> None:
|
|
|
141
148
|
)
|
|
142
149
|
|
|
143
150
|
if not is_valid_canonical_id(owner_id := acp["Owner"].get("ID", "")):
|
|
144
|
-
|
|
145
|
-
|
|
151
|
+
raise InvalidArgument(
|
|
152
|
+
"Invalid id",
|
|
153
|
+
ArgumentName="CanonicalUser/ID",
|
|
154
|
+
ArgumentValue=owner_id,
|
|
155
|
+
)
|
|
146
156
|
|
|
147
157
|
for grant in acp["Grants"]:
|
|
148
158
|
if grant.get("Permission") not in s3_constants.VALID_GRANTEE_PERMISSIONS:
|
|
@@ -165,18 +175,24 @@ def validate_acl_acp(acp: AccessControlPolicy) -> None:
|
|
|
165
175
|
and (grant_uri := grantee.get("URI", ""))
|
|
166
176
|
not in s3_constants.VALID_ACL_PREDEFINED_GROUPS
|
|
167
177
|
):
|
|
168
|
-
|
|
169
|
-
|
|
178
|
+
raise InvalidArgument(
|
|
179
|
+
"Invalid group uri",
|
|
180
|
+
ArgumentName="Group/URI",
|
|
181
|
+
ArgumentValue=grant_uri,
|
|
182
|
+
)
|
|
170
183
|
|
|
171
184
|
elif grant_type == GranteeType.AmazonCustomerByEmail:
|
|
172
185
|
# TODO: add validation here
|
|
173
186
|
continue
|
|
174
187
|
|
|
175
188
|
elif grant_type == GranteeType.CanonicalUser and not is_valid_canonical_id(
|
|
176
|
-
|
|
189
|
+
grantee_id := grantee.get("ID", "")
|
|
177
190
|
):
|
|
178
|
-
|
|
179
|
-
|
|
191
|
+
raise InvalidArgument(
|
|
192
|
+
"Invalid id",
|
|
193
|
+
ArgumentName="CanonicalUser/ID",
|
|
194
|
+
ArgumentValue=grantee_id,
|
|
195
|
+
)
|
|
180
196
|
|
|
181
197
|
|
|
182
198
|
def validate_lifecycle_configuration(lifecycle_conf: BucketLifecycleConfiguration) -> None:
|
|
@@ -242,12 +258,12 @@ def validate_website_configuration(website_config: WebsiteConfiguration) -> None
|
|
|
242
258
|
"""
|
|
243
259
|
if redirect_all_req := website_config.get("RedirectAllRequestsTo", {}):
|
|
244
260
|
if len(website_config) > 1:
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
261
|
+
raise InvalidArgument(
|
|
262
|
+
"RedirectAllRequestsTo cannot be provided in conjunction with other Routing Rules.",
|
|
263
|
+
ArgumentName="RedirectAllRequestsTo",
|
|
264
|
+
ArgumentValue="not null",
|
|
249
265
|
)
|
|
250
|
-
|
|
266
|
+
|
|
251
267
|
if "HostName" not in redirect_all_req:
|
|
252
268
|
raise MalformedXML()
|
|
253
269
|
|
|
@@ -261,20 +277,18 @@ def validate_website_configuration(website_config: WebsiteConfiguration) -> None
|
|
|
261
277
|
# required
|
|
262
278
|
# https://docs.aws.amazon.com/AmazonS3/latest/API/API_IndexDocument.html
|
|
263
279
|
if not (index_configuration := website_config.get("IndexDocument")):
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
280
|
+
raise InvalidArgument(
|
|
281
|
+
"A value for IndexDocument Suffix must be provided if RedirectAllRequestsTo is empty",
|
|
282
|
+
ArgumentName="IndexDocument",
|
|
283
|
+
ArgumentValue="null",
|
|
268
284
|
)
|
|
269
|
-
raise ex
|
|
270
285
|
|
|
271
286
|
if not (index_suffix := index_configuration.get("Suffix")) or "/" in index_suffix:
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
287
|
+
raise InvalidArgument(
|
|
288
|
+
"The IndexDocument Suffix is not well formed",
|
|
289
|
+
ArgumentName="IndexDocument",
|
|
290
|
+
ArgumentValue=index_suffix or None,
|
|
276
291
|
)
|
|
277
|
-
raise ex
|
|
278
292
|
|
|
279
293
|
if "ErrorDocument" in website_config and not website_config.get("ErrorDocument", {}).get("Key"):
|
|
280
294
|
raise MalformedXML()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import re
|
|
3
|
+
from collections.abc import Callable
|
|
3
4
|
from functools import wraps
|
|
4
|
-
from typing import Callable, Dict, Optional, Union
|
|
5
5
|
from urllib.parse import urlparse
|
|
6
6
|
|
|
7
7
|
from werkzeug.datastructures import Headers
|
|
@@ -32,8 +32,8 @@ class NoSuchKeyFromErrorDocument(NoSuchKey):
|
|
|
32
32
|
code: str = "NoSuchKey"
|
|
33
33
|
sender_fault: bool = False
|
|
34
34
|
status_code: int = 404
|
|
35
|
-
Key:
|
|
36
|
-
ErrorDocumentKey:
|
|
35
|
+
Key: ObjectKey | None
|
|
36
|
+
ErrorDocumentKey: ObjectKey | None
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
class S3WebsiteHostingHandler:
|
|
@@ -93,8 +93,10 @@ class S3WebsiteHostingHandler:
|
|
|
93
93
|
return Response(response_body, status=e.response["ResponseMetadata"]["HTTPStatusCode"])
|
|
94
94
|
|
|
95
95
|
except Exception:
|
|
96
|
-
LOG.
|
|
97
|
-
"Exception encountered while trying to serve s3-website at %s",
|
|
96
|
+
LOG.error(
|
|
97
|
+
"Exception encountered while trying to serve s3-website at %s",
|
|
98
|
+
request.url,
|
|
99
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
98
100
|
)
|
|
99
101
|
return Response(_create_500_error_string(), status=500)
|
|
100
102
|
|
|
@@ -223,7 +225,7 @@ class S3WebsiteHostingHandler:
|
|
|
223
225
|
)
|
|
224
226
|
|
|
225
227
|
@staticmethod
|
|
226
|
-
def _get_response_headers_from_object(get_object_response: GetObjectOutput) ->
|
|
228
|
+
def _get_response_headers_from_object(get_object_response: GetObjectOutput) -> dict[str, str]:
|
|
227
229
|
"""
|
|
228
230
|
Only return some headers from the S3 Object
|
|
229
231
|
:param get_object_response: the response from S3.GetObject
|
|
@@ -248,7 +250,7 @@ class S3WebsiteHostingHandler:
|
|
|
248
250
|
@staticmethod
|
|
249
251
|
def _find_matching_rule(
|
|
250
252
|
routing_rules: RoutingRules, object_key: ObjectKey, error_code: int = None
|
|
251
|
-
) ->
|
|
253
|
+
) -> RoutingRule | None:
|
|
252
254
|
"""
|
|
253
255
|
Iterate over the routing rules set in the configuration, and return the first that match the key name and/or the
|
|
254
256
|
error code (in the 4XX range).
|
|
@@ -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,110 +14,110 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class SchedulerScheduleProperties(TypedDict):
|
|
17
|
-
FlexibleTimeWindow:
|
|
18
|
-
ScheduleExpression:
|
|
19
|
-
Target:
|
|
20
|
-
Arn:
|
|
21
|
-
Description:
|
|
22
|
-
EndDate:
|
|
23
|
-
GroupName:
|
|
24
|
-
KmsKeyArn:
|
|
25
|
-
Name:
|
|
26
|
-
ScheduleExpressionTimezone:
|
|
27
|
-
StartDate:
|
|
28
|
-
State:
|
|
17
|
+
FlexibleTimeWindow: FlexibleTimeWindow | None
|
|
18
|
+
ScheduleExpression: str | None
|
|
19
|
+
Target: Target | None
|
|
20
|
+
Arn: str | None
|
|
21
|
+
Description: str | None
|
|
22
|
+
EndDate: str | None
|
|
23
|
+
GroupName: str | None
|
|
24
|
+
KmsKeyArn: str | None
|
|
25
|
+
Name: str | None
|
|
26
|
+
ScheduleExpressionTimezone: str | None
|
|
27
|
+
StartDate: str | None
|
|
28
|
+
State: str | None
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class FlexibleTimeWindow(TypedDict):
|
|
32
|
-
Mode:
|
|
33
|
-
MaximumWindowInMinutes:
|
|
32
|
+
Mode: str | None
|
|
33
|
+
MaximumWindowInMinutes: float | None
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class DeadLetterConfig(TypedDict):
|
|
37
|
-
Arn:
|
|
37
|
+
Arn: str | None
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
class RetryPolicy(TypedDict):
|
|
41
|
-
MaximumEventAgeInSeconds:
|
|
42
|
-
MaximumRetryAttempts:
|
|
41
|
+
MaximumEventAgeInSeconds: float | None
|
|
42
|
+
MaximumRetryAttempts: float | None
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
class AwsVpcConfiguration(TypedDict):
|
|
46
|
-
Subnets:
|
|
47
|
-
AssignPublicIp:
|
|
48
|
-
SecurityGroups:
|
|
46
|
+
Subnets: list[str] | None
|
|
47
|
+
AssignPublicIp: str | None
|
|
48
|
+
SecurityGroups: list[str] | None
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
class NetworkConfiguration(TypedDict):
|
|
52
|
-
AwsvpcConfiguration:
|
|
52
|
+
AwsvpcConfiguration: AwsVpcConfiguration | None
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
class CapacityProviderStrategyItem(TypedDict):
|
|
56
|
-
CapacityProvider:
|
|
57
|
-
Base:
|
|
58
|
-
Weight:
|
|
56
|
+
CapacityProvider: str | None
|
|
57
|
+
Base: float | None
|
|
58
|
+
Weight: float | None
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
class PlacementConstraint(TypedDict):
|
|
62
|
-
Expression:
|
|
63
|
-
Type:
|
|
62
|
+
Expression: str | None
|
|
63
|
+
Type: str | None
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
class PlacementStrategy(TypedDict):
|
|
67
|
-
Field:
|
|
68
|
-
Type:
|
|
67
|
+
Field: str | None
|
|
68
|
+
Type: str | None
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
class EcsParameters(TypedDict):
|
|
72
|
-
TaskDefinitionArn:
|
|
73
|
-
CapacityProviderStrategy:
|
|
74
|
-
EnableECSManagedTags:
|
|
75
|
-
EnableExecuteCommand:
|
|
76
|
-
Group:
|
|
77
|
-
LaunchType:
|
|
78
|
-
NetworkConfiguration:
|
|
79
|
-
PlacementConstraints:
|
|
80
|
-
PlacementStrategy:
|
|
81
|
-
PlatformVersion:
|
|
82
|
-
PropagateTags:
|
|
83
|
-
ReferenceId:
|
|
84
|
-
Tags:
|
|
85
|
-
TaskCount:
|
|
72
|
+
TaskDefinitionArn: str | None
|
|
73
|
+
CapacityProviderStrategy: list[CapacityProviderStrategyItem] | None
|
|
74
|
+
EnableECSManagedTags: bool | None
|
|
75
|
+
EnableExecuteCommand: bool | None
|
|
76
|
+
Group: str | None
|
|
77
|
+
LaunchType: str | None
|
|
78
|
+
NetworkConfiguration: NetworkConfiguration | None
|
|
79
|
+
PlacementConstraints: list[PlacementConstraint] | None
|
|
80
|
+
PlacementStrategy: list[PlacementStrategy] | None
|
|
81
|
+
PlatformVersion: str | None
|
|
82
|
+
PropagateTags: str | None
|
|
83
|
+
ReferenceId: str | None
|
|
84
|
+
Tags: list[dict] | None
|
|
85
|
+
TaskCount: float | None
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
class EventBridgeParameters(TypedDict):
|
|
89
|
-
DetailType:
|
|
90
|
-
Source:
|
|
89
|
+
DetailType: str | None
|
|
90
|
+
Source: str | None
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
class KinesisParameters(TypedDict):
|
|
94
|
-
PartitionKey:
|
|
94
|
+
PartitionKey: str | None
|
|
95
95
|
|
|
96
96
|
|
|
97
97
|
class SageMakerPipelineParameter(TypedDict):
|
|
98
|
-
Name:
|
|
99
|
-
Value:
|
|
98
|
+
Name: str | None
|
|
99
|
+
Value: str | None
|
|
100
100
|
|
|
101
101
|
|
|
102
102
|
class SageMakerPipelineParameters(TypedDict):
|
|
103
|
-
PipelineParameterList:
|
|
103
|
+
PipelineParameterList: list[SageMakerPipelineParameter] | None
|
|
104
104
|
|
|
105
105
|
|
|
106
106
|
class SqsParameters(TypedDict):
|
|
107
|
-
MessageGroupId:
|
|
107
|
+
MessageGroupId: str | None
|
|
108
108
|
|
|
109
109
|
|
|
110
110
|
class Target(TypedDict):
|
|
111
|
-
Arn:
|
|
112
|
-
RoleArn:
|
|
113
|
-
DeadLetterConfig:
|
|
114
|
-
EcsParameters:
|
|
115
|
-
EventBridgeParameters:
|
|
116
|
-
Input:
|
|
117
|
-
KinesisParameters:
|
|
118
|
-
RetryPolicy:
|
|
119
|
-
SageMakerPipelineParameters:
|
|
120
|
-
SqsParameters:
|
|
111
|
+
Arn: str | None
|
|
112
|
+
RoleArn: str | None
|
|
113
|
+
DeadLetterConfig: DeadLetterConfig | None
|
|
114
|
+
EcsParameters: EcsParameters | None
|
|
115
|
+
EventBridgeParameters: EventBridgeParameters | None
|
|
116
|
+
Input: str | None
|
|
117
|
+
KinesisParameters: KinesisParameters | None
|
|
118
|
+
RetryPolicy: RetryPolicy | None
|
|
119
|
+
SageMakerPipelineParameters: SageMakerPipelineParameters | None
|
|
120
|
+
SqsParameters: SqsParameters | None
|
|
121
121
|
|
|
122
122
|
|
|
123
123
|
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 SchedulerScheduleProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::Scheduler::Schedule"
|
|
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.scheduler.resource_providers.aws_scheduler_schedule import (
|
|
@@ -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,17 +14,17 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class SchedulerScheduleGroupProperties(TypedDict):
|
|
17
|
-
Arn:
|
|
18
|
-
CreationDate:
|
|
19
|
-
LastModificationDate:
|
|
20
|
-
Name:
|
|
21
|
-
State:
|
|
22
|
-
Tags:
|
|
17
|
+
Arn: str | None
|
|
18
|
+
CreationDate: str | None
|
|
19
|
+
LastModificationDate: str | None
|
|
20
|
+
Name: str | None
|
|
21
|
+
State: str | None
|
|
22
|
+
Tags: list[Tag] | None
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class Tag(TypedDict):
|
|
26
|
-
Key:
|
|
27
|
-
Value:
|
|
26
|
+
Key: str | None
|
|
27
|
+
Value: str | None
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
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 SchedulerScheduleGroupProviderPlugin(CloudFormationResourceProviderPlugin)
|
|
|
10
8
|
name = "AWS::Scheduler::ScheduleGroup"
|
|
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.scheduler.resource_providers.aws_scheduler_schedulegroup import (
|