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.
Files changed (545) hide show
  1. localstack/aws/api/apigateway/__init__.py +87 -110
  2. localstack/aws/api/core.py +2 -3
  3. localstack/aws/api/events/__init__.py +12 -16
  4. localstack/aws/api/logs/__init__.py +5 -8
  5. localstack/aws/api/pipes/__init__.py +24 -32
  6. localstack/aws/api/scheduler/__init__.py +14 -16
  7. localstack/aws/api/stepfunctions/__init__.py +88 -114
  8. localstack/aws/api/support/__init__.py +8 -9
  9. localstack/aws/chain.py +2 -2
  10. localstack/aws/client.py +7 -9
  11. localstack/aws/connect.py +40 -39
  12. localstack/aws/forwarder.py +5 -4
  13. localstack/aws/gateway.py +1 -3
  14. localstack/aws/handlers/analytics.py +1 -2
  15. localstack/aws/handlers/cors.py +4 -5
  16. localstack/aws/handlers/logging.py +1 -2
  17. localstack/aws/handlers/metric_handler.py +3 -4
  18. localstack/aws/handlers/service.py +5 -5
  19. localstack/aws/mocking.py +15 -24
  20. localstack/aws/protocol/op_router.py +11 -10
  21. localstack/aws/protocol/parser.py +16 -17
  22. localstack/aws/protocol/serializer.py +37 -40
  23. localstack/aws/protocol/service_router.py +13 -13
  24. localstack/aws/protocol/validate.py +5 -5
  25. localstack/aws/scaffold.py +8 -9
  26. localstack/aws/serving/edge.py +5 -6
  27. localstack/aws/serving/hypercorn.py +2 -2
  28. localstack/aws/serving/twisted.py +1 -2
  29. localstack/aws/serving/werkzeug.py +2 -2
  30. localstack/aws/skeleton.py +7 -8
  31. localstack/aws/spec.py +29 -30
  32. localstack/cli/localstack.py +6 -6
  33. localstack/cli/lpm.py +2 -2
  34. localstack/config.py +14 -15
  35. localstack/deprecations.py +5 -5
  36. localstack/dev/run/__main__.py +4 -4
  37. localstack/dev/run/paths.py +5 -5
  38. localstack/dns/models.py +2 -1
  39. localstack/dns/server.py +3 -2
  40. localstack/http/dispatcher.py +1 -2
  41. localstack/http/response.py +2 -2
  42. localstack/http/router.py +1 -1
  43. localstack/http/trace.py +2 -1
  44. localstack/logging/format.py +3 -3
  45. localstack/packages/api.py +5 -5
  46. localstack/packages/core.py +3 -3
  47. localstack/packages/debugpy.py +1 -3
  48. localstack/packages/ffmpeg.py +1 -2
  49. localstack/packages/java.py +1 -2
  50. localstack/packages/terraform.py +1 -2
  51. localstack/runtime/init.py +6 -7
  52. localstack/runtime/shutdown.py +2 -1
  53. localstack/services/apigateway/exporter.py +1 -2
  54. localstack/services/apigateway/helpers.py +6 -6
  55. localstack/services/apigateway/legacy/context.py +21 -21
  56. localstack/services/apigateway/legacy/helpers.py +20 -20
  57. localstack/services/apigateway/legacy/integration.py +7 -7
  58. localstack/services/apigateway/legacy/router_asf.py +2 -2
  59. localstack/services/apigateway/legacy/templates.py +5 -5
  60. localstack/services/apigateway/models.py +16 -16
  61. localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
  62. localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
  63. localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
  64. localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
  65. localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +1 -1
  66. localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
  67. localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
  68. localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +6 -6
  69. localstack/services/apigateway/next_gen/execute_api/integrations/http.py +9 -9
  70. localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
  71. localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
  72. localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
  73. localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
  74. localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
  75. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
  76. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
  77. localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
  78. localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
  79. localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
  80. localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
  81. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
  82. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
  83. localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
  84. localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
  85. localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
  86. localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
  87. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
  88. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
  89. localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +5 -5
  90. localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
  91. localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
  92. localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
  93. localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
  94. localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
  95. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
  96. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
  97. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
  98. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
  99. localstack/services/cdk/resource_providers/cdk_metadata.py +2 -2
  100. localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
  101. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
  102. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
  103. localstack/services/cloudformation/cfn_utils.py +1 -1
  104. localstack/services/cloudformation/deployment_utils.py +2 -2
  105. localstack/services/cloudformation/engine/changes.py +3 -3
  106. localstack/services/cloudformation/engine/entities.py +12 -12
  107. localstack/services/cloudformation/engine/parameters.py +3 -3
  108. localstack/services/cloudformation/engine/template_deployer.py +9 -10
  109. localstack/services/cloudformation/engine/transformers.py +5 -4
  110. localstack/services/cloudformation/engine/types.py +5 -4
  111. localstack/services/cloudformation/engine/v2/change_set_model.py +31 -9
  112. localstack/services/cloudformation/engine/v2/change_set_model_describer.py +6 -6
  113. localstack/services/cloudformation/engine/v2/change_set_model_executor.py +62 -80
  114. localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +15 -14
  115. localstack/services/cloudformation/engine/v2/change_set_model_transform.py +5 -5
  116. localstack/services/cloudformation/provider_utils.py +2 -2
  117. localstack/services/cloudformation/resource_provider.py +10 -9
  118. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
  119. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
  120. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
  121. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
  122. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
  123. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
  124. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
  125. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
  126. localstack/services/cloudformation/scaffolding/__main__.py +8 -7
  127. localstack/services/cloudformation/scaffolding/propgen.py +2 -2
  128. localstack/services/cloudformation/stores.py +2 -3
  129. localstack/services/cloudformation/v2/entities.py +57 -36
  130. localstack/services/cloudformation/v2/provider.py +155 -29
  131. localstack/services/cloudwatch/alarm_scheduler.py +7 -7
  132. localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
  133. localstack/services/cloudwatch/models.py +5 -7
  134. localstack/services/cloudwatch/provider.py +12 -12
  135. localstack/services/cloudwatch/provider_v2.py +2 -4
  136. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
  137. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
  138. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
  139. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
  140. localstack/services/dynamodb/packages.py +1 -2
  141. localstack/services/dynamodb/provider.py +7 -8
  142. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
  143. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
  144. localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
  145. localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
  146. localstack/services/dynamodb/utils.py +13 -14
  147. localstack/services/dynamodb/v2/provider.py +6 -7
  148. localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
  149. localstack/services/dynamodbstreams/models.py +1 -3
  150. localstack/services/ec2/patches.py +4 -5
  151. localstack/services/ec2/provider.py +3 -3
  152. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
  153. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
  154. localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
  155. localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
  156. localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
  157. localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
  158. localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
  159. localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
  160. localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
  161. localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
  162. localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
  163. localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
  164. localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
  165. localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
  166. localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
  167. localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
  168. localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
  169. localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
  170. localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
  171. localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
  172. localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
  173. localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
  174. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
  175. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
  176. localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
  177. localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
  178. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
  179. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
  180. localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
  181. localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
  182. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +13 -13
  183. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
  184. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
  185. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
  186. localstack/services/ecr/resource_providers/aws_ecr_repository.py +17 -17
  187. localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
  188. localstack/services/edge.py +5 -5
  189. localstack/services/es/provider.py +19 -19
  190. localstack/services/events/archive.py +2 -2
  191. localstack/services/events/connection.py +5 -5
  192. localstack/services/events/event_bus.py +9 -9
  193. localstack/services/events/models.py +25 -25
  194. localstack/services/events/provider.py +12 -12
  195. localstack/services/events/replay.py +3 -3
  196. localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
  197. localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
  198. localstack/services/events/resource_providers/aws_events_connection.py +27 -27
  199. localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
  200. localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
  201. localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
  202. localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
  203. localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
  204. localstack/services/events/resource_providers/aws_events_rule.py +82 -82
  205. localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
  206. localstack/services/events/rule.py +15 -15
  207. localstack/services/events/target.py +5 -5
  208. localstack/services/events/utils.py +7 -7
  209. localstack/services/events/v1/models.py +1 -3
  210. localstack/services/events/v1/provider.py +10 -10
  211. localstack/services/firehose/models.py +1 -3
  212. localstack/services/firehose/provider.py +11 -12
  213. localstack/services/iam/iam_patches.py +5 -6
  214. localstack/services/iam/provider.py +4 -4
  215. localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
  216. localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
  217. localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
  218. localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
  219. localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
  220. localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
  221. localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
  222. localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
  223. localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
  224. localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
  225. localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
  226. localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
  227. localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
  228. localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
  229. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
  230. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
  231. localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
  232. localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
  233. localstack/services/kinesis/kinesis_mock_server.py +7 -8
  234. localstack/services/kinesis/models.py +2 -3
  235. localstack/services/kinesis/packages.py +3 -3
  236. localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
  237. localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
  238. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
  239. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
  240. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
  241. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
  242. localstack/services/kms/models.py +14 -17
  243. localstack/services/kms/provider.py +2 -3
  244. localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
  245. localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
  246. localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
  247. localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
  248. localstack/services/kms/utils.py +3 -2
  249. localstack/services/lambda_/api_utils.py +12 -12
  250. localstack/services/lambda_/custom_endpoints.py +2 -2
  251. localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +1 -1
  252. localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
  253. localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
  254. localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
  255. localstack/services/lambda_/invocation/assignment.py +1 -2
  256. localstack/services/lambda_/invocation/docker_runtime_executor.py +5 -4
  257. localstack/services/lambda_/invocation/execution_environment.py +4 -4
  258. localstack/services/lambda_/invocation/executor_endpoint.py +5 -5
  259. localstack/services/lambda_/invocation/internal_sqs_queue.py +1 -1
  260. localstack/services/lambda_/invocation/lambda_models.py +23 -23
  261. localstack/services/lambda_/invocation/lambda_service.py +4 -4
  262. localstack/services/lambda_/invocation/logs.py +2 -3
  263. localstack/services/lambda_/invocation/runtime_executor.py +3 -3
  264. localstack/services/lambda_/ldm.py +2 -3
  265. localstack/services/lambda_/packages.py +2 -3
  266. localstack/services/lambda_/provider.py +3 -3
  267. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
  268. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
  269. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
  270. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
  271. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
  272. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
  273. localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
  274. localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
  275. localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
  276. localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
  277. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
  278. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
  279. localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
  280. localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
  281. localstack/services/lambda_/resource_providers/aws_lambda_url.py +14 -14
  282. localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
  283. localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
  284. localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
  285. localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
  286. localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
  287. localstack/services/lambda_/runtimes.py +1 -3
  288. localstack/services/logs/models.py +1 -3
  289. localstack/services/logs/provider.py +3 -3
  290. localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
  291. localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
  292. localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
  293. localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
  294. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
  295. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
  296. localstack/services/moto.py +3 -3
  297. localstack/services/opensearch/cluster.py +13 -13
  298. localstack/services/opensearch/cluster_manager.py +13 -14
  299. localstack/services/opensearch/models.py +1 -3
  300. localstack/services/opensearch/packages.py +1 -2
  301. localstack/services/opensearch/provider.py +7 -8
  302. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
  303. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
  304. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
  305. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
  306. localstack/services/opensearch/versions.py +1 -3
  307. localstack/services/plugins.py +26 -25
  308. localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
  309. localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
  310. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
  311. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
  312. localstack/services/route53/models.py +1 -3
  313. localstack/services/route53/provider.py +1 -2
  314. localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
  315. localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
  316. localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
  317. localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
  318. localstack/services/route53resolver/models.py +8 -10
  319. localstack/services/route53resolver/provider.py +12 -12
  320. localstack/services/s3/codec.py +2 -2
  321. localstack/services/s3/cors.py +4 -4
  322. localstack/services/s3/models.py +72 -72
  323. localstack/services/s3/notifications.py +19 -19
  324. localstack/services/s3/presigned_url.py +6 -5
  325. localstack/services/s3/provider.py +13 -14
  326. localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
  327. localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
  328. localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
  329. localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
  330. localstack/services/s3/storage/core.py +4 -3
  331. localstack/services/s3/storage/ephemeral.py +7 -6
  332. localstack/services/s3/utils.py +11 -11
  333. localstack/services/s3/validation.py +1 -1
  334. localstack/services/s3/website_hosting.py +5 -5
  335. localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
  336. localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
  337. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
  338. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
  339. localstack/services/secretsmanager/provider.py +9 -11
  340. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
  341. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
  342. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
  343. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
  344. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
  345. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
  346. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
  347. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
  348. localstack/services/ses/provider.py +8 -8
  349. localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
  350. localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
  351. localstack/services/sns/models.py +25 -25
  352. localstack/services/sns/provider.py +1 -2
  353. localstack/services/sns/publisher.py +6 -7
  354. localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
  355. localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
  356. localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
  357. localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
  358. localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
  359. localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
  360. localstack/services/sqs/models.py +21 -22
  361. localstack/services/sqs/provider.py +19 -18
  362. localstack/services/sqs/query_api.py +2 -3
  363. localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
  364. localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
  365. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +4 -4
  366. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
  367. localstack/services/sqs/utils.py +3 -3
  368. localstack/services/ssm/provider.py +2 -3
  369. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
  370. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
  371. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
  372. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
  373. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
  374. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
  375. localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
  376. localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
  377. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
  378. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
  379. localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
  380. localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
  381. localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
  382. localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
  383. localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
  384. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
  385. localstack/services/stepfunctions/asl/component/common/path/input_path.py +3 -3
  386. localstack/services/stepfunctions/asl/component/common/path/output_path.py +3 -3
  387. localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
  388. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
  389. localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
  390. localstack/services/stepfunctions/asl/component/common/string/string_expression.py +2 -2
  391. localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
  392. localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
  393. localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +3 -3
  394. localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +2 -2
  395. localstack/services/stepfunctions/asl/component/program/program.py +8 -8
  396. localstack/services/stepfunctions/asl/component/state/state.py +10 -11
  397. localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
  398. localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
  399. localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +1 -3
  400. localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +8 -8
  401. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +6 -6
  402. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
  403. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
  404. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
  405. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
  406. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
  407. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
  408. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
  409. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
  410. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
  411. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
  412. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
  413. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
  414. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
  415. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
  416. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
  417. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +10 -11
  418. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
  419. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +4 -4
  420. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +1 -2
  421. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +6 -6
  422. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
  423. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
  424. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +15 -15
  425. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +5 -4
  426. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
  427. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
  428. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
  429. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
  430. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
  431. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
  432. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
  433. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
  434. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
  435. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +2 -2
  436. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
  437. localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +2 -4
  438. localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +3 -5
  439. localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
  440. localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
  441. localstack/services/stepfunctions/asl/eval/environment.py +15 -17
  442. localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
  443. localstack/services/stepfunctions/asl/eval/event/event_manager.py +9 -9
  444. localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
  445. localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
  446. localstack/services/stepfunctions/asl/eval/states.py +11 -11
  447. localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
  448. localstack/services/stepfunctions/asl/eval/variable_store.py +3 -3
  449. localstack/services/stepfunctions/asl/jsonata/jsonata.py +5 -4
  450. localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +1 -2
  451. localstack/services/stepfunctions/asl/parse/preprocessor.py +30 -30
  452. localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
  453. localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
  454. localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
  455. localstack/services/stepfunctions/backend/activity.py +4 -4
  456. localstack/services/stepfunctions/backend/alias.py +6 -6
  457. localstack/services/stepfunctions/backend/execution.py +25 -27
  458. localstack/services/stepfunctions/backend/execution_worker.py +7 -7
  459. localstack/services/stepfunctions/backend/state_machine.py +26 -26
  460. localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
  461. localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
  462. localstack/services/stepfunctions/mocking/mock_config.py +5 -5
  463. localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
  464. localstack/services/stepfunctions/provider.py +27 -37
  465. localstack/services/stepfunctions/quotas.py +2 -3
  466. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
  467. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
  468. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
  469. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
  470. localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
  471. localstack/services/stores.py +7 -7
  472. localstack/services/transcribe/packages.py +1 -3
  473. localstack/services/transcribe/provider.py +2 -2
  474. localstack/state/inspect.py +4 -4
  475. localstack/state/pickle.py +16 -15
  476. localstack/testing/aws/asf_utils.py +3 -2
  477. localstack/testing/aws/lambda_utils.py +15 -14
  478. localstack/testing/aws/util.py +3 -2
  479. localstack/testing/pytest/cloudformation/fixtures.py +13 -3
  480. localstack/testing/pytest/container.py +5 -4
  481. localstack/testing/pytest/filters.py +1 -3
  482. localstack/testing/pytest/fixtures.py +11 -11
  483. localstack/testing/pytest/marking.py +6 -6
  484. localstack/testing/pytest/path_filter.py +1 -1
  485. localstack/testing/pytest/stepfunctions/utils.py +1 -1
  486. localstack/testing/pytest/validation_tracking.py +3 -3
  487. localstack/testing/scenario/provisioning.py +11 -10
  488. localstack/testing/snapshots/transformer_utility.py +2 -2
  489. localstack/testing/testselection/matching.py +2 -2
  490. localstack/testing/testselection/opt_out.py +1 -1
  491. localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
  492. localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
  493. localstack/testing/testselection/testselection.py +2 -2
  494. localstack/utils/analytics/cli.py +2 -3
  495. localstack/utils/analytics/client.py +5 -5
  496. localstack/utils/analytics/events.py +2 -2
  497. localstack/utils/analytics/metrics/registry.py +1 -1
  498. localstack/utils/analytics/publisher.py +4 -4
  499. localstack/utils/analytics/service_request_aggregator.py +3 -3
  500. localstack/utils/aws/arns.py +2 -2
  501. localstack/utils/aws/aws_responses.py +14 -21
  502. localstack/utils/aws/aws_stack.py +7 -11
  503. localstack/utils/aws/dead_letter_queue.py +3 -4
  504. localstack/utils/aws/message_forwarding.py +9 -11
  505. localstack/utils/aws/request_context.py +4 -4
  506. localstack/utils/aws/templating.py +3 -3
  507. localstack/utils/batch_policy.py +2 -2
  508. localstack/utils/bootstrap.py +19 -20
  509. localstack/utils/collections.py +16 -23
  510. localstack/utils/config_listener.py +2 -2
  511. localstack/utils/container_networking.py +3 -3
  512. localstack/utils/container_utils/container_client.py +72 -75
  513. localstack/utils/container_utils/docker_cmd_client.py +33 -33
  514. localstack/utils/container_utils/docker_sdk_client.py +35 -35
  515. localstack/utils/crypto.py +2 -3
  516. localstack/utils/diagnose.py +11 -11
  517. localstack/utils/docker_utils.py +4 -4
  518. localstack/utils/files.py +1 -2
  519. localstack/utils/functions.py +2 -2
  520. localstack/utils/http.py +6 -6
  521. localstack/utils/iputils.py +2 -1
  522. localstack/utils/json.py +1 -1
  523. localstack/utils/net.py +10 -9
  524. localstack/utils/objects.py +10 -10
  525. localstack/utils/patch.py +5 -5
  526. localstack/utils/platform.py +2 -2
  527. localstack/utils/run.py +7 -7
  528. localstack/utils/scheduler.py +3 -2
  529. localstack/utils/strings.py +2 -2
  530. localstack/utils/tagging.py +3 -3
  531. localstack/utils/testutil.py +9 -9
  532. localstack/utils/threads.py +2 -2
  533. localstack/utils/xml.py +1 -1
  534. localstack/version.py +2 -2
  535. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/METADATA +1 -1
  536. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/RECORD +544 -544
  537. localstack_core-4.7.1.dev24.dist-info/plux.json +1 -0
  538. localstack_core-4.7.1.dev22.dist-info/plux.json +0 -1
  539. {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack +0 -0
  540. {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack-supervisor +0 -0
  541. {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack.bat +0 -0
  542. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/WHEEL +0 -0
  543. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/entry_points.txt +0 -0
  544. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/licenses/LICENSE.txt +0 -0
  545. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,7 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  from pathlib import Path
5
- from typing import Optional, TypedDict
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: Optional[str]
18
- TargetId: Optional[str]
19
- TargetType: Optional[str]
20
- Id: Optional[str]
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: Optional[Type[ResourceProvider]] = None
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, timezone
8
- from typing import TYPE_CHECKING, Any, Dict, List, Optional
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: Dict[MessageId, Dict[str, Any]] = {}
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) -> List[str]:
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) -> Optional[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: Optional[MessageTagList]
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=timezone.utc)
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=timezone.utc)
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 Optional, TypedDict
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: Optional[str]
18
- ConfigurationSetAttributes: Optional[ConfigurationSetAttributes]
19
- DkimAttributes: Optional[DkimAttributes]
20
- DkimDNSTokenName1: Optional[str]
21
- DkimDNSTokenName2: Optional[str]
22
- DkimDNSTokenName3: Optional[str]
23
- DkimDNSTokenValue1: Optional[str]
24
- DkimDNSTokenValue2: Optional[str]
25
- DkimDNSTokenValue3: Optional[str]
26
- DkimSigningAttributes: Optional[DkimSigningAttributes]
27
- FeedbackAttributes: Optional[FeedbackAttributes]
28
- MailFromAttributes: Optional[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: Optional[str]
32
+ ConfigurationSetName: str | None
33
33
 
34
34
 
35
35
  class DkimSigningAttributes(TypedDict):
36
- DomainSigningPrivateKey: Optional[str]
37
- DomainSigningSelector: Optional[str]
38
- NextSigningKeyLength: Optional[str]
36
+ DomainSigningPrivateKey: str | None
37
+ DomainSigningSelector: str | None
38
+ NextSigningKeyLength: str | None
39
39
 
40
40
 
41
41
  class DkimAttributes(TypedDict):
42
- SigningEnabled: Optional[bool]
42
+ SigningEnabled: bool | None
43
43
 
44
44
 
45
45
  class MailFromAttributes(TypedDict):
46
- BehaviorOnMxFailure: Optional[str]
47
- MailFromDomain: Optional[str]
46
+ BehaviorOnMxFailure: str | None
47
+ MailFromDomain: str | None
48
48
 
49
49
 
50
50
  class FeedbackAttributes(TypedDict):
51
- EmailForwardingEnabled: Optional[bool]
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: Optional[Type[ResourceProvider]] = None
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 Dict, List, Literal, Optional, TypedDict, Union
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: Union[
84
- str, Dict
85
- ] # can be Dict if after being JSON decoded for validation if structure is `json`
86
- message_attributes: Optional[MessageAttributeMap] = None
87
- message_structure: Optional[str] = None
88
- subject: Optional[str] = None
89
- message_deduplication_id: Optional[str] = None
90
- message_group_id: Optional[str] = None
91
- token: Optional[str] = None
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: Optional[bool] = False
94
- sequencer_number: Optional[str] = None
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: Optional[str]
144
- SubscriptionPrincipal: Optional[str]
145
- FilterPolicy: Optional[str]
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: Optional[str]
150
- DeliveryPolicy: Optional[str]
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: Dict[str, List[str]] = LocalAttribute(default=dict)
155
+ topic_subscriptions: dict[str, list[str]] = LocalAttribute(default=dict)
156
156
 
157
157
  # maps subscription ARN to SnsSubscription
158
- subscriptions: Dict[str, SnsSubscription] = LocalAttribute(default=dict)
158
+ subscriptions: dict[str, SnsSubscription] = LocalAttribute(default=dict)
159
159
 
160
160
  # maps confirmation token to subscription ARN
161
- subscription_tokens: Dict[str, str] = LocalAttribute(default=dict)
161
+ subscription_tokens: dict[str, str] = LocalAttribute(default=dict)
162
162
 
163
163
  # maps topic ARN to list of tags
164
- sns_tags: Dict[str, List[Dict]] = LocalAttribute(default=dict)
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: Dict[str, List[Dict]] = LocalAttribute(default=dict)
167
+ platform_endpoint_messages: dict[str, list[dict]] = LocalAttribute(default=dict)
168
168
 
169
169
  # list of sent SMS messages
170
- sms_messages: List[Dict] = LocalAttribute(default=list)
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: Dict[subscriptionARN, Dict] = LocalAttribute(default=dict)
173
+ subscription_filter_policy: dict[subscriptionARN, dict] = LocalAttribute(default=dict)
174
174
 
175
- def get_topic_subscriptions(self, topic_arn: str) -> List[SnsSubscription]:
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: List[Dict[str, str]], validated_keys: List[str]):
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: List[SnsMessage]
63
+ messages: list[SnsMessage]
65
64
  store: SnsStore
66
- request_headers: Dict[str, str]
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) -> Union[str, Dict]:
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) -> Tuple[Dict, Dict]:
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: Dict[str, str], endpoint_attributes: Dict[str, str]
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
- ) -> Dict[str, Dict[str, str]]:
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 Optional, TypedDict
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: Optional[str]
22
- TopicArn: Optional[str]
23
- DeliveryPolicy: Optional[dict]
24
- Endpoint: Optional[str]
25
- FilterPolicy: Optional[dict]
26
- FilterPolicyScope: Optional[str]
27
- Id: Optional[str]
28
- RawMessageDelivery: Optional[bool]
29
- RedrivePolicy: Optional[dict]
30
- Region: Optional[str]
31
- ReplayPolicy: Optional[dict]
32
- SubscriptionRoleArn: Optional[str]
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: Optional[Type[ResourceProvider]] = None
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 Optional, TypedDict
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: Optional[bool]
20
- DataProtectionPolicy: Optional[dict]
21
- DisplayName: Optional[str]
22
- FifoTopic: Optional[bool]
23
- KmsMasterKeyId: Optional[str]
24
- SignatureVersion: Optional[str]
25
- Subscription: Optional[list[Subscription]]
26
- Tags: Optional[list[Tag]]
27
- TopicArn: Optional[str]
28
- TopicName: Optional[str]
29
- TracingConfig: Optional[str]
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: Optional[str]
34
- Protocol: Optional[str]
33
+ Endpoint: str | None
34
+ Protocol: str | None
35
35
 
36
36
 
37
37
  class Tag(TypedDict):
38
- Key: Optional[str]
39
- Value: Optional[str]
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: Optional[Type[ResourceProvider]] = None
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 Optional, TypedDict
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: Optional[dict | str]
22
- Topics: Optional[list[str]]
23
- Id: Optional[str]
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: Optional[Type[ResourceProvider]] = None
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: Optional[int]
57
- receipt_handles: Set[str]
58
- last_received: Optional[float]
59
- first_received: Optional[float]
60
- visibility_deadline: Optional[float]
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) -> Optional[str]:
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) -> Optional[str]:
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) -> Optional[str]:
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: Optional[float]
274
+ purge_timestamp: float | None
276
275
 
277
- delayed: Set[SqsMessage]
278
- inflight: Set[SqsMessage]
279
- receipts: Dict[str, SqsMessage]
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) -> Optional[dict]:
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) -> Optional[int]:
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: Dict[QueueAttributeName, str] = {}
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: Set[SqsMessage]
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: Dict[str, SqsMessage]
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: Set[MessageGroup] = set()
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: Dict[str, SqsQueue] = LocalAttribute(default=dict)
1310
+ queues: dict[str, SqsQueue] = LocalAttribute(default=dict)
1312
1311
 
1313
- deleted: Dict[str, float] = LocalAttribute(default=dict)
1312
+ deleted: dict[str, float] = LocalAttribute(default=dict)
1314
1313
 
1315
- move_tasks: Dict[str, MessageMoveTask] = LocalAttribute(default=dict)
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):