localstack-core 4.7.1.dev22__py3-none-any.whl → 4.7.1.dev24__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/core.py +2 -3
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/logs/__init__.py +5 -8
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +7 -9
- localstack/aws/connect.py +40 -39
- localstack/aws/forwarder.py +5 -4
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +1 -2
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/logging.py +1 -2
- localstack/aws/handlers/metric_handler.py +3 -4
- localstack/aws/handlers/service.py +5 -5
- localstack/aws/mocking.py +15 -24
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +16 -17
- localstack/aws/protocol/serializer.py +37 -40
- localstack/aws/protocol/service_router.py +13 -13
- localstack/aws/protocol/validate.py +5 -5
- localstack/aws/scaffold.py +8 -9
- 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 +7 -8
- localstack/aws/spec.py +29 -30
- localstack/cli/localstack.py +6 -6
- localstack/cli/lpm.py +2 -2
- localstack/config.py +14 -15
- localstack/deprecations.py +5 -5
- localstack/dev/run/__main__.py +4 -4
- localstack/dev/run/paths.py +5 -5
- localstack/dns/models.py +2 -1
- localstack/dns/server.py +3 -2
- 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 +3 -3
- localstack/packages/api.py +5 -5
- localstack/packages/core.py +3 -3
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +1 -2
- localstack/packages/terraform.py +1 -2
- localstack/runtime/init.py +6 -7
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +6 -6
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +20 -20
- localstack/services/apigateway/legacy/integration.py +7 -7
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +5 -5
- 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/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +1 -1
- 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 +6 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +9 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- 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 +5 -5
- 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 +2 -2
- 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/cfn_utils.py +1 -1
- localstack/services/cloudformation/deployment_utils.py +2 -2
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +12 -12
- localstack/services/cloudformation/engine/parameters.py +3 -3
- localstack/services/cloudformation/engine/template_deployer.py +9 -10
- localstack/services/cloudformation/engine/transformers.py +5 -4
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +31 -9
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +6 -6
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +62 -80
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +15 -14
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +5 -5
- localstack/services/cloudformation/provider_utils.py +2 -2
- localstack/services/cloudformation/resource_provider.py +10 -9
- 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/scaffolding/__main__.py +8 -7
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/stores.py +2 -3
- localstack/services/cloudformation/v2/entities.py +57 -36
- localstack/services/cloudformation/v2/provider.py +155 -29
- localstack/services/cloudwatch/alarm_scheduler.py +7 -7
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +12 -12
- localstack/services/cloudwatch/provider_v2.py +2 -4
- 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 +1 -2
- localstack/services/dynamodb/provider.py +7 -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/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +6 -7
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +4 -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 +13 -13
- 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 +17 -17
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +5 -5
- localstack/services/es/provider.py +19 -19
- 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/models.py +25 -25
- localstack/services/events/provider.py +12 -12
- 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 +5 -5
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +10 -10
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +11 -12
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +4 -4
- 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/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +2 -3
- localstack/services/kinesis/packages.py +3 -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 +14 -17
- localstack/services/kms/provider.py +2 -3
- 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 +3 -2
- localstack/services/lambda_/api_utils.py +12 -12
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +1 -1
- 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_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +5 -4
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +5 -5
- localstack/services/lambda_/invocation/internal_sqs_queue.py +1 -1
- localstack/services/lambda_/invocation/lambda_models.py +23 -23
- localstack/services/lambda_/invocation/lambda_service.py +4 -4
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/ldm.py +2 -3
- localstack/services/lambda_/packages.py +2 -3
- localstack/services/lambda_/provider.py +3 -3
- 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 +14 -14
- 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/logs/models.py +1 -3
- localstack/services/logs/provider.py +3 -3
- 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 +3 -3
- localstack/services/opensearch/cluster.py +13 -13
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +1 -2
- localstack/services/opensearch/provider.py +7 -8
- 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 +1 -3
- localstack/services/plugins.py +26 -25
- 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/cors.py +4 -4
- localstack/services/s3/models.py +72 -72
- localstack/services/s3/notifications.py +19 -19
- localstack/services/s3/presigned_url.py +6 -5
- localstack/services/s3/provider.py +13 -14
- 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 +11 -11
- localstack/services/s3/validation.py +1 -1
- localstack/services/s3/website_hosting.py +5 -5
- 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 +9 -11
- 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/provider.py +8 -8
- 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/models.py +25 -25
- localstack/services/sns/provider.py +1 -2
- localstack/services/sns/publisher.py +6 -7
- 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/sqs/models.py +21 -22
- localstack/services/sqs/provider.py +19 -18
- localstack/services/sqs/query_api.py +2 -3
- 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 +3 -3
- localstack/services/ssm/provider.py +2 -3
- 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/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/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +2 -2
- 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 +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +2 -2
- localstack/services/stepfunctions/asl/component/program/program.py +8 -8
- 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/operator/implementations/is_operator.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +1 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +6 -6
- 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/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 +10 -11
- 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 +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +6 -6
- 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 +15 -15
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +5 -4
- 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 +2 -2
- 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 +2 -4
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +3 -5
- 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 +15 -17
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +9 -9
- 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 +11 -11
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +3 -3
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +5 -4
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +1 -2
- localstack/services/stepfunctions/asl/parse/preprocessor.py +30 -30
- localstack/services/stepfunctions/asl/parse/typed_props.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 +6 -6
- localstack/services/stepfunctions/backend/execution.py +25 -27
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +26 -26
- 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 +5 -5
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/provider.py +27 -37
- 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 +7 -7
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +2 -2
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +16 -15
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +13 -3
- localstack/testing/pytest/container.py +5 -4
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +11 -11
- localstack/testing/pytest/marking.py +6 -6
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/utils.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -3
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +2 -2
- 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/metrics/registry.py +1 -1
- localstack/utils/analytics/publisher.py +4 -4
- localstack/utils/analytics/service_request_aggregator.py +3 -3
- localstack/utils/aws/arns.py +2 -2
- localstack/utils/aws/aws_responses.py +14 -21
- localstack/utils/aws/aws_stack.py +7 -11
- localstack/utils/aws/dead_letter_queue.py +3 -4
- localstack/utils/aws/message_forwarding.py +9 -11
- localstack/utils/aws/request_context.py +4 -4
- localstack/utils/aws/templating.py +3 -3
- localstack/utils/batch_policy.py +2 -2
- localstack/utils/bootstrap.py +19 -20
- localstack/utils/collections.py +16 -23
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +3 -3
- localstack/utils/container_utils/container_client.py +72 -75
- localstack/utils/container_utils/docker_cmd_client.py +33 -33
- localstack/utils/container_utils/docker_sdk_client.py +35 -35
- localstack/utils/crypto.py +2 -3
- localstack/utils/diagnose.py +11 -11
- localstack/utils/docker_utils.py +4 -4
- localstack/utils/files.py +1 -2
- localstack/utils/functions.py +2 -2
- localstack/utils/http.py +6 -6
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +1 -1
- localstack/utils/net.py +10 -9
- localstack/utils/objects.py +10 -10
- localstack/utils/patch.py +5 -5
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +7 -7
- localstack/utils/scheduler.py +3 -2
- localstack/utils/strings.py +2 -2
- localstack/utils/tagging.py +3 -3
- localstack/utils/testutil.py +9 -9
- localstack/utils/threads.py +2 -2
- localstack/utils/xml.py +1 -1
- localstack/version.py +2 -2
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/METADATA +1 -1
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/RECORD +544 -544
- localstack_core-4.7.1.dev24.dist-info/plux.json +1 -0
- localstack_core-4.7.1.dev22.dist-info/plux.json +0 -1
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/WHEEL +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/top_level.txt +0 -0
localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py
CHANGED
|
@@ -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,10 +14,10 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class SecretsManagerSecretTargetAttachmentProperties(TypedDict):
|
|
17
|
-
SecretId:
|
|
18
|
-
TargetId:
|
|
19
|
-
TargetType:
|
|
20
|
-
Id:
|
|
17
|
+
SecretId: str | None
|
|
18
|
+
TargetId: str | None
|
|
19
|
+
TargetType: str | None
|
|
20
|
+
Id: str | None
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
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 SecretsManagerSecretTargetAttachmentProviderPlugin(CloudFormationResourceP
|
|
|
10
8
|
name = "AWS::SecretsManager::SecretTargetAttachment"
|
|
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.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment import (
|
|
@@ -4,8 +4,8 @@ import logging
|
|
|
4
4
|
import os
|
|
5
5
|
import re
|
|
6
6
|
from collections import defaultdict
|
|
7
|
-
from datetime import date, datetime, time
|
|
8
|
-
from typing import TYPE_CHECKING, Any
|
|
7
|
+
from datetime import UTC, date, datetime, time
|
|
8
|
+
from typing import TYPE_CHECKING, Any
|
|
9
9
|
|
|
10
10
|
from botocore.exceptions import ClientError
|
|
11
11
|
from moto.ses import ses_backends
|
|
@@ -73,7 +73,7 @@ LOGGER = logging.getLogger(__name__)
|
|
|
73
73
|
|
|
74
74
|
# Keep record of all sent emails
|
|
75
75
|
# These can be retrieved via a service endpoint
|
|
76
|
-
EMAILS:
|
|
76
|
+
EMAILS: dict[MessageId, dict[str, Any]] = {}
|
|
77
77
|
|
|
78
78
|
# Endpoint to access all the sent emails
|
|
79
79
|
# (relative to LocalStack internal HTTP resources base endpoint)
|
|
@@ -116,7 +116,7 @@ def save_for_retrospection(sent_email: SentEmail):
|
|
|
116
116
|
LOGGER.debug("Email saved at: %s", path)
|
|
117
117
|
|
|
118
118
|
|
|
119
|
-
def recipients_from_destination(destination: Destination) ->
|
|
119
|
+
def recipients_from_destination(destination: Destination) -> list[str]:
|
|
120
120
|
"""Get list of recipient email addresses from a Destination object."""
|
|
121
121
|
return (
|
|
122
122
|
destination.get("ToAddresses", [])
|
|
@@ -188,7 +188,7 @@ class SesProvider(SesApi, ServiceLifecycleHook):
|
|
|
188
188
|
# Helpers
|
|
189
189
|
#
|
|
190
190
|
|
|
191
|
-
def get_source_from_raw(self, raw_data: str) ->
|
|
191
|
+
def get_source_from_raw(self, raw_data: str) -> str | None:
|
|
192
192
|
"""Given a raw representation of email, return the source/from field."""
|
|
193
193
|
entities = raw_data.split("\n")
|
|
194
194
|
for entity in entities:
|
|
@@ -570,7 +570,7 @@ class SNSPayload:
|
|
|
570
570
|
message_id: str
|
|
571
571
|
sender_email: Address
|
|
572
572
|
destination_addresses: AddressList
|
|
573
|
-
tags:
|
|
573
|
+
tags: MessageTagList | None
|
|
574
574
|
|
|
575
575
|
|
|
576
576
|
class SNSEmitter:
|
|
@@ -600,7 +600,7 @@ class SNSEmitter:
|
|
|
600
600
|
def emit_send_event(
|
|
601
601
|
self, payload: SNSPayload, sns_topic_arn: str, emit_source_arn: bool = True
|
|
602
602
|
):
|
|
603
|
-
now = datetime.now(tz=
|
|
603
|
+
now = datetime.now(tz=UTC)
|
|
604
604
|
|
|
605
605
|
tags = defaultdict(list)
|
|
606
606
|
for every in payload.tags or []:
|
|
@@ -635,7 +635,7 @@ class SNSEmitter:
|
|
|
635
635
|
LOGGER.exception("sending SNS message")
|
|
636
636
|
|
|
637
637
|
def emit_delivery_event(self, payload: SNSPayload, sns_topic_arn: str):
|
|
638
|
-
now = datetime.now(tz=
|
|
638
|
+
now = datetime.now(tz=UTC)
|
|
639
639
|
|
|
640
640
|
tags = defaultdict(list)
|
|
641
641
|
for every in payload.tags or []:
|
|
@@ -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,41 +14,41 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class SESEmailIdentityProperties(TypedDict):
|
|
17
|
-
EmailIdentity:
|
|
18
|
-
ConfigurationSetAttributes:
|
|
19
|
-
DkimAttributes:
|
|
20
|
-
DkimDNSTokenName1:
|
|
21
|
-
DkimDNSTokenName2:
|
|
22
|
-
DkimDNSTokenName3:
|
|
23
|
-
DkimDNSTokenValue1:
|
|
24
|
-
DkimDNSTokenValue2:
|
|
25
|
-
DkimDNSTokenValue3:
|
|
26
|
-
DkimSigningAttributes:
|
|
27
|
-
FeedbackAttributes:
|
|
28
|
-
MailFromAttributes:
|
|
17
|
+
EmailIdentity: str | None
|
|
18
|
+
ConfigurationSetAttributes: ConfigurationSetAttributes | None
|
|
19
|
+
DkimAttributes: DkimAttributes | None
|
|
20
|
+
DkimDNSTokenName1: str | None
|
|
21
|
+
DkimDNSTokenName2: str | None
|
|
22
|
+
DkimDNSTokenName3: str | None
|
|
23
|
+
DkimDNSTokenValue1: str | None
|
|
24
|
+
DkimDNSTokenValue2: str | None
|
|
25
|
+
DkimDNSTokenValue3: str | None
|
|
26
|
+
DkimSigningAttributes: DkimSigningAttributes | None
|
|
27
|
+
FeedbackAttributes: FeedbackAttributes | None
|
|
28
|
+
MailFromAttributes: MailFromAttributes | None
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class ConfigurationSetAttributes(TypedDict):
|
|
32
|
-
ConfigurationSetName:
|
|
32
|
+
ConfigurationSetName: str | None
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class DkimSigningAttributes(TypedDict):
|
|
36
|
-
DomainSigningPrivateKey:
|
|
37
|
-
DomainSigningSelector:
|
|
38
|
-
NextSigningKeyLength:
|
|
36
|
+
DomainSigningPrivateKey: str | None
|
|
37
|
+
DomainSigningSelector: str | None
|
|
38
|
+
NextSigningKeyLength: str | None
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class DkimAttributes(TypedDict):
|
|
42
|
-
SigningEnabled:
|
|
42
|
+
SigningEnabled: bool | None
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
class MailFromAttributes(TypedDict):
|
|
46
|
-
BehaviorOnMxFailure:
|
|
47
|
-
MailFromDomain:
|
|
46
|
+
BehaviorOnMxFailure: str | None
|
|
47
|
+
MailFromDomain: str | None
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
class FeedbackAttributes(TypedDict):
|
|
51
|
-
EmailForwardingEnabled:
|
|
51
|
+
EmailForwardingEnabled: bool | None
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
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 SESEmailIdentityProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::SES::EmailIdentity"
|
|
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.ses.resource_providers.aws_ses_emailidentity import (
|
|
@@ -2,7 +2,7 @@ import itertools
|
|
|
2
2
|
import time
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
4
|
from enum import StrEnum
|
|
5
|
-
from typing import
|
|
5
|
+
from typing import Literal, TypedDict
|
|
6
6
|
|
|
7
7
|
from localstack.aws.api.sns import (
|
|
8
8
|
MessageAttributeMap,
|
|
@@ -80,18 +80,18 @@ class SnsMessageType(StrEnum):
|
|
|
80
80
|
@dataclass
|
|
81
81
|
class SnsMessage:
|
|
82
82
|
type: SnsMessageType
|
|
83
|
-
message:
|
|
84
|
-
str
|
|
85
|
-
|
|
86
|
-
message_attributes:
|
|
87
|
-
message_structure:
|
|
88
|
-
subject:
|
|
89
|
-
message_deduplication_id:
|
|
90
|
-
message_group_id:
|
|
91
|
-
token:
|
|
83
|
+
message: (
|
|
84
|
+
str | dict
|
|
85
|
+
) # can be Dict if after being JSON decoded for validation if structure is `json`
|
|
86
|
+
message_attributes: MessageAttributeMap | None = None
|
|
87
|
+
message_structure: str | None = None
|
|
88
|
+
subject: str | None = None
|
|
89
|
+
message_deduplication_id: str | None = None
|
|
90
|
+
message_group_id: str | None = None
|
|
91
|
+
token: str | None = None
|
|
92
92
|
message_id: str = field(default_factory=long_uid)
|
|
93
|
-
is_fifo:
|
|
94
|
-
sequencer_number:
|
|
93
|
+
is_fifo: bool | None = False
|
|
94
|
+
sequencer_number: str | None = None
|
|
95
95
|
|
|
96
96
|
def __post_init__(self):
|
|
97
97
|
if self.message_attributes is None:
|
|
@@ -140,39 +140,39 @@ class SnsSubscription(TypedDict, total=False):
|
|
|
140
140
|
Protocol: SnsProtocols
|
|
141
141
|
SubscriptionArn: subscriptionARN
|
|
142
142
|
PendingConfirmation: Literal["true", "false"]
|
|
143
|
-
Owner:
|
|
144
|
-
SubscriptionPrincipal:
|
|
145
|
-
FilterPolicy:
|
|
143
|
+
Owner: str | None
|
|
144
|
+
SubscriptionPrincipal: str | None
|
|
145
|
+
FilterPolicy: str | None
|
|
146
146
|
FilterPolicyScope: Literal["MessageAttributes", "MessageBody"]
|
|
147
147
|
RawMessageDelivery: Literal["true", "false"]
|
|
148
148
|
ConfirmationWasAuthenticated: Literal["true", "false"]
|
|
149
|
-
SubscriptionRoleArn:
|
|
150
|
-
DeliveryPolicy:
|
|
149
|
+
SubscriptionRoleArn: str | None
|
|
150
|
+
DeliveryPolicy: str | None
|
|
151
151
|
|
|
152
152
|
|
|
153
153
|
class SnsStore(BaseStore):
|
|
154
154
|
# maps topic ARN to subscriptions ARN
|
|
155
|
-
topic_subscriptions:
|
|
155
|
+
topic_subscriptions: dict[str, list[str]] = LocalAttribute(default=dict)
|
|
156
156
|
|
|
157
157
|
# maps subscription ARN to SnsSubscription
|
|
158
|
-
subscriptions:
|
|
158
|
+
subscriptions: dict[str, SnsSubscription] = LocalAttribute(default=dict)
|
|
159
159
|
|
|
160
160
|
# maps confirmation token to subscription ARN
|
|
161
|
-
subscription_tokens:
|
|
161
|
+
subscription_tokens: dict[str, str] = LocalAttribute(default=dict)
|
|
162
162
|
|
|
163
163
|
# maps topic ARN to list of tags
|
|
164
|
-
sns_tags:
|
|
164
|
+
sns_tags: dict[str, list[dict]] = LocalAttribute(default=dict)
|
|
165
165
|
|
|
166
166
|
# cache of topic ARN to platform endpoint messages (used primarily for testing)
|
|
167
|
-
platform_endpoint_messages:
|
|
167
|
+
platform_endpoint_messages: dict[str, list[dict]] = LocalAttribute(default=dict)
|
|
168
168
|
|
|
169
169
|
# list of sent SMS messages
|
|
170
|
-
sms_messages:
|
|
170
|
+
sms_messages: list[dict] = LocalAttribute(default=list)
|
|
171
171
|
|
|
172
172
|
# filter policy are stored as JSON string in subscriptions, store the decoded result Dict
|
|
173
|
-
subscription_filter_policy:
|
|
173
|
+
subscription_filter_policy: dict[subscriptionARN, dict] = LocalAttribute(default=dict)
|
|
174
174
|
|
|
175
|
-
def get_topic_subscriptions(self, topic_arn: str) ->
|
|
175
|
+
def get_topic_subscriptions(self, topic_arn: str) -> list[SnsSubscription]:
|
|
176
176
|
topic_subscriptions = self.topic_subscriptions.get(topic_arn, [])
|
|
177
177
|
subscriptions = [
|
|
178
178
|
subscription
|
|
@@ -3,7 +3,6 @@ import copy
|
|
|
3
3
|
import functools
|
|
4
4
|
import json
|
|
5
5
|
import logging
|
|
6
|
-
from typing import Dict, List
|
|
7
6
|
from uuid import uuid4
|
|
8
7
|
|
|
9
8
|
from botocore.utils import InvalidArnException
|
|
@@ -1130,7 +1129,7 @@ def register_sns_api_resource(router: Router):
|
|
|
1130
1129
|
router.add(SNSServiceSubscriptionTokenApiResource())
|
|
1131
1130
|
|
|
1132
1131
|
|
|
1133
|
-
def _format_messages(sent_messages:
|
|
1132
|
+
def _format_messages(sent_messages: list[dict[str, str]], validated_keys: list[str]):
|
|
1134
1133
|
"""
|
|
1135
1134
|
This method format the messages to be more readable and undo the format change that was needed for Moto
|
|
1136
1135
|
Should be removed once we refactor SNS.
|
|
@@ -9,7 +9,6 @@ import time
|
|
|
9
9
|
import traceback
|
|
10
10
|
from concurrent.futures import ThreadPoolExecutor
|
|
11
11
|
from dataclasses import dataclass, field
|
|
12
|
-
from typing import Dict, List, Tuple, Union
|
|
13
12
|
|
|
14
13
|
import requests
|
|
15
14
|
from cryptography.hazmat.primitives import hashes
|
|
@@ -61,9 +60,9 @@ class SnsPublishContext:
|
|
|
61
60
|
|
|
62
61
|
@dataclass
|
|
63
62
|
class SnsBatchPublishContext:
|
|
64
|
-
messages:
|
|
63
|
+
messages: list[SnsMessage]
|
|
65
64
|
store: SnsStore
|
|
66
|
-
request_headers:
|
|
65
|
+
request_headers: dict[str, str]
|
|
67
66
|
topic_attributes: dict[str, str] = field(default_factory=dict)
|
|
68
67
|
|
|
69
68
|
|
|
@@ -818,7 +817,7 @@ class ApplicationEndpointPublisher(EndpointPublisher):
|
|
|
818
817
|
# TODO: see about delivery log for individual endpoint message, need credentials for testing
|
|
819
818
|
# store_delivery_log(subscriber, context, success=True)
|
|
820
819
|
|
|
821
|
-
def prepare_message(self, message_context: SnsMessage, endpoint: str) ->
|
|
820
|
+
def prepare_message(self, message_context: SnsMessage, endpoint: str) -> str | dict:
|
|
822
821
|
platform_type = get_platform_type_from_endpoint_arn(endpoint)
|
|
823
822
|
return {
|
|
824
823
|
"TargetArn": endpoint,
|
|
@@ -862,7 +861,7 @@ def get_application_platform_arn_from_endpoint_arn(endpoint_arn: str) -> str:
|
|
|
862
861
|
return f"{base_arn}:app/{platform_type}/{app_name}"
|
|
863
862
|
|
|
864
863
|
|
|
865
|
-
def get_attributes_for_application_endpoint(endpoint_arn: str) ->
|
|
864
|
+
def get_attributes_for_application_endpoint(endpoint_arn: str) -> tuple[dict, dict]:
|
|
866
865
|
"""
|
|
867
866
|
Retrieve the attributes necessary to send a message directly to the platform (credentials and token)
|
|
868
867
|
:param endpoint_arn:
|
|
@@ -883,7 +882,7 @@ def get_attributes_for_application_endpoint(endpoint_arn: str) -> Tuple[Dict, Di
|
|
|
883
882
|
|
|
884
883
|
|
|
885
884
|
def send_message_to_gcm(
|
|
886
|
-
context: SnsPublishContext, app_attributes:
|
|
885
|
+
context: SnsPublishContext, app_attributes: dict[str, str], endpoint_attributes: dict[str, str]
|
|
887
886
|
) -> None:
|
|
888
887
|
"""
|
|
889
888
|
Send the message directly to GCM, with the credentials used when creating the PlatformApplication and the Endpoint
|
|
@@ -1014,7 +1013,7 @@ def create_sns_message_body(
|
|
|
1014
1013
|
|
|
1015
1014
|
def prepare_message_attributes(
|
|
1016
1015
|
message_attributes: MessageAttributeMap,
|
|
1017
|
-
) ->
|
|
1016
|
+
) -> dict[str, dict[str, str]]:
|
|
1018
1017
|
attributes = {}
|
|
1019
1018
|
if not message_attributes:
|
|
1020
1019
|
return attributes
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import json
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import TypedDict
|
|
7
7
|
|
|
8
8
|
import localstack.services.cloudformation.provider_utils as util
|
|
9
9
|
from localstack import config
|
|
@@ -18,18 +18,18 @@ from localstack.services.cloudformation.resource_provider import (
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class SNSSubscriptionProperties(TypedDict):
|
|
21
|
-
Protocol:
|
|
22
|
-
TopicArn:
|
|
23
|
-
DeliveryPolicy:
|
|
24
|
-
Endpoint:
|
|
25
|
-
FilterPolicy:
|
|
26
|
-
FilterPolicyScope:
|
|
27
|
-
Id:
|
|
28
|
-
RawMessageDelivery:
|
|
29
|
-
RedrivePolicy:
|
|
30
|
-
Region:
|
|
31
|
-
ReplayPolicy:
|
|
32
|
-
SubscriptionRoleArn:
|
|
21
|
+
Protocol: str | None
|
|
22
|
+
TopicArn: str | None
|
|
23
|
+
DeliveryPolicy: dict | None
|
|
24
|
+
Endpoint: str | None
|
|
25
|
+
FilterPolicy: dict | None
|
|
26
|
+
FilterPolicyScope: str | None
|
|
27
|
+
Id: str | None
|
|
28
|
+
RawMessageDelivery: bool | None
|
|
29
|
+
RedrivePolicy: dict | None
|
|
30
|
+
Region: str | None
|
|
31
|
+
ReplayPolicy: dict | None
|
|
32
|
+
SubscriptionRoleArn: str | None
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
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 SNSSubscriptionProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::SNS::Subscription"
|
|
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.sns.resource_providers.aws_sns_subscription import (
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import json
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import TypedDict
|
|
7
7
|
|
|
8
8
|
import localstack.services.cloudformation.provider_utils as util
|
|
9
9
|
from localstack.services.cloudformation.resource_provider import (
|
|
@@ -16,27 +16,27 @@ from localstack.utils.strings import canonicalize_bool_to_str, short_uid
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class SNSTopicProperties(TypedDict):
|
|
19
|
-
ContentBasedDeduplication:
|
|
20
|
-
DataProtectionPolicy:
|
|
21
|
-
DisplayName:
|
|
22
|
-
FifoTopic:
|
|
23
|
-
KmsMasterKeyId:
|
|
24
|
-
SignatureVersion:
|
|
25
|
-
Subscription:
|
|
26
|
-
Tags:
|
|
27
|
-
TopicArn:
|
|
28
|
-
TopicName:
|
|
29
|
-
TracingConfig:
|
|
19
|
+
ContentBasedDeduplication: bool | None
|
|
20
|
+
DataProtectionPolicy: dict | None
|
|
21
|
+
DisplayName: str | None
|
|
22
|
+
FifoTopic: bool | None
|
|
23
|
+
KmsMasterKeyId: str | None
|
|
24
|
+
SignatureVersion: str | None
|
|
25
|
+
Subscription: list[Subscription] | None
|
|
26
|
+
Tags: list[Tag] | None
|
|
27
|
+
TopicArn: str | None
|
|
28
|
+
TopicName: str | None
|
|
29
|
+
TracingConfig: str | None
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class Subscription(TypedDict):
|
|
33
|
-
Endpoint:
|
|
34
|
-
Protocol:
|
|
33
|
+
Endpoint: str | None
|
|
34
|
+
Protocol: str | None
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class Tag(TypedDict):
|
|
38
|
-
Key:
|
|
39
|
-
Value:
|
|
38
|
+
Key: str | None
|
|
39
|
+
Value: str | None
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
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 SNSTopicProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::SNS::Topic"
|
|
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.sns.resource_providers.aws_sns_topic import SNSTopicProvider
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import json
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import TypedDict
|
|
7
7
|
|
|
8
8
|
from botocore.exceptions import ClientError
|
|
9
9
|
|
|
@@ -18,9 +18,9 @@ from localstack.services.sns.models import create_default_sns_topic_policy
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class SNSTopicPolicyProperties(TypedDict):
|
|
21
|
-
PolicyDocument:
|
|
22
|
-
Topics:
|
|
23
|
-
Id:
|
|
21
|
+
PolicyDocument: dict | str | None
|
|
22
|
+
Topics: list[str] | None
|
|
23
|
+
Id: str | None
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
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 SNSTopicPolicyProviderPlugin(CloudFormationResourceProviderPlugin):
|
|
|
10
8
|
name = "AWS::SNS::TopicPolicy"
|
|
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.sns.resource_providers.aws_sns_topicpolicy import (
|
|
@@ -8,7 +8,6 @@ import threading
|
|
|
8
8
|
import time
|
|
9
9
|
from datetime import datetime
|
|
10
10
|
from queue import Empty
|
|
11
|
-
from typing import Dict, Optional, Set
|
|
12
11
|
|
|
13
12
|
from localstack import config
|
|
14
13
|
from localstack.aws.api import RequestContext
|
|
@@ -53,11 +52,11 @@ class SqsMessage:
|
|
|
53
52
|
created: float
|
|
54
53
|
visibility_timeout: int
|
|
55
54
|
receive_count: int
|
|
56
|
-
delay_seconds:
|
|
57
|
-
receipt_handles:
|
|
58
|
-
last_received:
|
|
59
|
-
first_received:
|
|
60
|
-
visibility_deadline:
|
|
55
|
+
delay_seconds: int | None
|
|
56
|
+
receipt_handles: set[str]
|
|
57
|
+
last_received: float | None
|
|
58
|
+
first_received: float | None
|
|
59
|
+
visibility_deadline: float | None
|
|
61
60
|
deleted: bool
|
|
62
61
|
priority: float
|
|
63
62
|
message_deduplication_id: str
|
|
@@ -104,15 +103,15 @@ class SqsMessage:
|
|
|
104
103
|
)
|
|
105
104
|
|
|
106
105
|
@property
|
|
107
|
-
def message_group_id(self) ->
|
|
106
|
+
def message_group_id(self) -> str | None:
|
|
108
107
|
return self.message["Attributes"].get(MessageSystemAttributeName.MessageGroupId)
|
|
109
108
|
|
|
110
109
|
@property
|
|
111
|
-
def message_deduplication_id(self) ->
|
|
110
|
+
def message_deduplication_id(self) -> str | None:
|
|
112
111
|
return self.message["Attributes"].get(MessageSystemAttributeName.MessageDeduplicationId)
|
|
113
112
|
|
|
114
113
|
@property
|
|
115
|
-
def dead_letter_queue_source_arn(self) ->
|
|
114
|
+
def dead_letter_queue_source_arn(self) -> str | None:
|
|
116
115
|
return self.message["Attributes"].get(MessageSystemAttributeName.DeadLetterQueueSourceArn)
|
|
117
116
|
|
|
118
117
|
@property
|
|
@@ -272,11 +271,11 @@ class SqsQueue:
|
|
|
272
271
|
tags: TagMap
|
|
273
272
|
|
|
274
273
|
purge_in_progress: bool
|
|
275
|
-
purge_timestamp:
|
|
274
|
+
purge_timestamp: float | None
|
|
276
275
|
|
|
277
|
-
delayed:
|
|
278
|
-
inflight:
|
|
279
|
-
receipts:
|
|
276
|
+
delayed: set[SqsMessage]
|
|
277
|
+
inflight: set[SqsMessage]
|
|
278
|
+
receipts: dict[str, SqsMessage]
|
|
280
279
|
|
|
281
280
|
def __init__(self, name: str, region: str, account_id: str, attributes=None, tags=None) -> None:
|
|
282
281
|
self.name = name
|
|
@@ -393,13 +392,13 @@ class SqsQueue:
|
|
|
393
392
|
)
|
|
394
393
|
|
|
395
394
|
@property
|
|
396
|
-
def redrive_policy(self) ->
|
|
395
|
+
def redrive_policy(self) -> dict | None:
|
|
397
396
|
if policy_document := self.attributes.get(QueueAttributeName.RedrivePolicy):
|
|
398
397
|
return json.loads(policy_document)
|
|
399
398
|
return None
|
|
400
399
|
|
|
401
400
|
@property
|
|
402
|
-
def max_receive_count(self) ->
|
|
401
|
+
def max_receive_count(self) -> int | None:
|
|
403
402
|
"""
|
|
404
403
|
Returns the maxReceiveCount attribute of the redrive policy. If no redrive policy is set, then it
|
|
405
404
|
returns None.
|
|
@@ -678,7 +677,7 @@ class SqsQueue:
|
|
|
678
677
|
if QueueAttributeName.All in attribute_names:
|
|
679
678
|
attribute_names = self.attributes.keys()
|
|
680
679
|
|
|
681
|
-
result:
|
|
680
|
+
result: dict[QueueAttributeName, str] = {}
|
|
682
681
|
|
|
683
682
|
for attr in attribute_names:
|
|
684
683
|
try:
|
|
@@ -740,7 +739,7 @@ class SqsQueue:
|
|
|
740
739
|
|
|
741
740
|
class StandardQueue(SqsQueue):
|
|
742
741
|
visible: InterruptiblePriorityQueue[SqsMessage]
|
|
743
|
-
inflight:
|
|
742
|
+
inflight: set[SqsMessage]
|
|
744
743
|
|
|
745
744
|
def __init__(self, name: str, region: str, account_id: str, attributes=None, tags=None) -> None:
|
|
746
745
|
super().__init__(name, region, account_id, attributes, tags)
|
|
@@ -955,7 +954,7 @@ class FifoQueue(SqsQueue):
|
|
|
955
954
|
TODO: raise exceptions when trying to remove a message with an expired receipt handle
|
|
956
955
|
"""
|
|
957
956
|
|
|
958
|
-
deduplication:
|
|
957
|
+
deduplication: dict[str, SqsMessage]
|
|
959
958
|
message_groups: dict[str, MessageGroup]
|
|
960
959
|
inflight_groups: set[MessageGroup]
|
|
961
960
|
message_group_queue: InterruptibleQueue
|
|
@@ -1152,7 +1151,7 @@ class FifoQueue(SqsQueue):
|
|
|
1152
1151
|
timeout = wait_time_seconds or 0
|
|
1153
1152
|
start = time.time()
|
|
1154
1153
|
|
|
1155
|
-
received_groups:
|
|
1154
|
+
received_groups: set[MessageGroup] = set()
|
|
1156
1155
|
|
|
1157
1156
|
# collect messages over potentially multiple groups
|
|
1158
1157
|
while True:
|
|
@@ -1308,11 +1307,11 @@ class FifoQueue(SqsQueue):
|
|
|
1308
1307
|
|
|
1309
1308
|
|
|
1310
1309
|
class SqsStore(BaseStore):
|
|
1311
|
-
queues:
|
|
1310
|
+
queues: dict[str, SqsQueue] = LocalAttribute(default=dict)
|
|
1312
1311
|
|
|
1313
|
-
deleted:
|
|
1312
|
+
deleted: dict[str, float] = LocalAttribute(default=dict)
|
|
1314
1313
|
|
|
1315
|
-
move_tasks:
|
|
1314
|
+
move_tasks: dict[str, MessageMoveTask] = LocalAttribute(default=dict)
|
|
1316
1315
|
"""Maps task IDs to their ``MoveMessageTask`` object. Task IDs can be found by decoding a task handle."""
|
|
1317
1316
|
|
|
1318
1317
|
def expire_deleted(self):
|