localstack-core 4.6.1.dev60__py3-none-any.whl → 4.10.1.dev12__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (672) hide show
  1. localstack/aws/api/apigateway/__init__.py +87 -110
  2. localstack/aws/api/cloudformation/__init__.py +18 -4
  3. localstack/aws/api/cloudwatch/__init__.py +41 -1
  4. localstack/aws/api/config/__init__.py +4 -0
  5. localstack/aws/api/core.py +8 -5
  6. localstack/aws/api/dynamodb/__init__.py +30 -0
  7. localstack/aws/api/ec2/__init__.py +1545 -66
  8. localstack/aws/api/events/__init__.py +12 -16
  9. localstack/aws/api/iam/__init__.py +7 -0
  10. localstack/aws/api/kinesis/__init__.py +19 -0
  11. localstack/aws/api/kms/__init__.py +6 -0
  12. localstack/aws/api/lambda_/__init__.py +36 -23
  13. localstack/aws/api/logs/__init__.py +20 -8
  14. localstack/aws/api/opensearch/__init__.py +16 -0
  15. localstack/aws/api/pipes/__init__.py +24 -32
  16. localstack/aws/api/redshift/__init__.py +9 -3
  17. localstack/aws/api/route53/__init__.py +5 -0
  18. localstack/aws/api/s3/__init__.py +12 -0
  19. localstack/aws/api/s3control/__init__.py +56 -0
  20. localstack/aws/api/scheduler/__init__.py +14 -16
  21. localstack/aws/api/ssm/__init__.py +2 -0
  22. localstack/aws/api/stepfunctions/__init__.py +88 -114
  23. localstack/aws/api/support/__init__.py +8 -9
  24. localstack/aws/api/transcribe/__init__.py +17 -0
  25. localstack/aws/chain.py +2 -2
  26. localstack/aws/client.py +14 -11
  27. localstack/aws/connect.py +42 -41
  28. localstack/aws/forwarder.py +57 -9
  29. localstack/aws/gateway.py +1 -3
  30. localstack/aws/handlers/analytics.py +2 -3
  31. localstack/aws/handlers/cors.py +4 -5
  32. localstack/aws/handlers/internal_requests.py +6 -1
  33. localstack/aws/handlers/logging.py +13 -4
  34. localstack/aws/handlers/metric_handler.py +44 -5
  35. localstack/aws/handlers/service.py +48 -28
  36. localstack/aws/mocking.py +18 -27
  37. localstack/aws/patches.py +2 -2
  38. localstack/aws/protocol/op_router.py +11 -10
  39. localstack/aws/protocol/parser.py +475 -49
  40. localstack/aws/protocol/serializer.py +723 -106
  41. localstack/aws/protocol/service_router.py +133 -33
  42. localstack/aws/protocol/validate.py +6 -6
  43. localstack/aws/scaffold.py +9 -10
  44. localstack/aws/serving/edge.py +5 -6
  45. localstack/aws/serving/hypercorn.py +2 -2
  46. localstack/aws/serving/twisted.py +1 -2
  47. localstack/aws/serving/werkzeug.py +2 -2
  48. localstack/aws/skeleton.py +12 -11
  49. localstack/aws/spec-patches.json +58 -0
  50. localstack/aws/spec.py +66 -46
  51. localstack/cli/exceptions.py +1 -1
  52. localstack/cli/localstack.py +11 -11
  53. localstack/cli/lpm.py +4 -5
  54. localstack/cli/plugins.py +1 -1
  55. localstack/cli/profiles.py +1 -2
  56. localstack/config.py +44 -30
  57. localstack/constants.py +4 -29
  58. localstack/deprecations.py +5 -5
  59. localstack/dev/kubernetes/__main__.py +130 -7
  60. localstack/dev/run/__main__.py +5 -5
  61. localstack/dev/run/configurators.py +1 -4
  62. localstack/dev/run/paths.py +6 -6
  63. localstack/dns/models.py +2 -1
  64. localstack/dns/plugins.py +5 -1
  65. localstack/dns/server.py +16 -6
  66. localstack/http/dispatcher.py +1 -2
  67. localstack/http/response.py +2 -2
  68. localstack/http/router.py +1 -1
  69. localstack/http/trace.py +2 -1
  70. localstack/logging/format.py +6 -6
  71. localstack/packages/api.py +13 -12
  72. localstack/packages/core.py +4 -4
  73. localstack/packages/debugpy.py +1 -3
  74. localstack/packages/ffmpeg.py +1 -2
  75. localstack/packages/java.py +38 -12
  76. localstack/packages/plugins.py +0 -8
  77. localstack/runtime/analytics.py +3 -0
  78. localstack/runtime/hooks.py +1 -1
  79. localstack/runtime/init.py +8 -9
  80. localstack/runtime/main.py +5 -5
  81. localstack/runtime/patches.py +2 -2
  82. localstack/runtime/shutdown.py +2 -1
  83. localstack/services/apigateway/exporter.py +1 -2
  84. localstack/services/apigateway/helpers.py +7 -10
  85. localstack/services/apigateway/legacy/context.py +21 -21
  86. localstack/services/apigateway/legacy/helpers.py +27 -28
  87. localstack/services/apigateway/legacy/integration.py +11 -10
  88. localstack/services/apigateway/legacy/invocations.py +6 -5
  89. localstack/services/apigateway/legacy/provider.py +148 -68
  90. localstack/services/apigateway/legacy/router_asf.py +2 -2
  91. localstack/services/apigateway/legacy/templates.py +6 -6
  92. localstack/services/apigateway/models.py +16 -16
  93. localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
  94. localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
  95. localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
  96. localstack/services/apigateway/next_gen/execute_api/handlers/method_request.py +7 -2
  97. localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
  98. localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +2 -3
  99. localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
  100. localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
  101. localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +9 -6
  102. localstack/services/apigateway/next_gen/execute_api/integrations/http.py +12 -12
  103. localstack/services/apigateway/next_gen/execute_api/router.py +31 -0
  104. localstack/services/apigateway/next_gen/execute_api/template_mapping.py +2 -2
  105. localstack/services/apigateway/next_gen/execute_api/test_invoke.py +114 -9
  106. localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
  107. localstack/services/apigateway/next_gen/provider.py +5 -0
  108. localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
  109. localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
  110. localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
  111. localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
  112. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
  113. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
  114. localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
  115. localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
  116. localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
  117. localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
  118. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
  119. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
  120. localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
  121. localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
  122. localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
  123. localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
  124. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
  125. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
  126. localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +6 -6
  127. localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
  128. localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
  129. localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
  130. localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
  131. localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
  132. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
  133. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
  134. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
  135. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
  136. localstack/services/cdk/resource_providers/cdk_metadata.py +4 -3
  137. localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
  138. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
  139. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
  140. localstack/services/cloudformation/api_utils.py +4 -8
  141. localstack/services/cloudformation/cfn_utils.py +2 -2
  142. localstack/services/cloudformation/deployment_utils.py +14 -12
  143. localstack/services/cloudformation/engine/changes.py +3 -3
  144. localstack/services/cloudformation/engine/entities.py +27 -17
  145. localstack/services/cloudformation/engine/parameters.py +4 -4
  146. localstack/services/cloudformation/engine/template_deployer.py +15 -14
  147. localstack/services/cloudformation/engine/template_utils.py +34 -12
  148. localstack/services/cloudformation/engine/transformers.py +11 -8
  149. localstack/services/cloudformation/engine/types.py +5 -4
  150. localstack/services/cloudformation/engine/v2/change_set_model.py +336 -39
  151. localstack/services/cloudformation/engine/v2/change_set_model_describer.py +96 -17
  152. localstack/services/cloudformation/engine/v2/change_set_model_executor.py +289 -136
  153. localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +315 -146
  154. localstack/services/cloudformation/engine/v2/change_set_model_transform.py +380 -105
  155. localstack/services/cloudformation/engine/v2/change_set_model_validator.py +183 -0
  156. localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +6 -0
  157. localstack/services/cloudformation/engine/v2/resolving.py +102 -0
  158. localstack/services/cloudformation/engine/yaml_parser.py +9 -2
  159. localstack/services/cloudformation/provider.py +11 -6
  160. localstack/services/cloudformation/provider_utils.py +34 -4
  161. localstack/services/cloudformation/resource_provider.py +31 -21
  162. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
  163. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
  164. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
  165. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
  166. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
  167. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
  168. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
  169. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
  170. localstack/services/cloudformation/resources.py +24149 -0
  171. localstack/services/cloudformation/scaffolding/__main__.py +13 -12
  172. localstack/services/cloudformation/scaffolding/propgen.py +2 -2
  173. localstack/services/cloudformation/service_models.py +2 -2
  174. localstack/services/cloudformation/stores.py +33 -22
  175. localstack/services/cloudformation/v2/entities.py +103 -88
  176. localstack/services/cloudformation/v2/provider.py +872 -131
  177. localstack/services/cloudformation/v2/types.py +38 -0
  178. localstack/services/cloudformation/v2/utils.py +4 -1
  179. localstack/services/cloudwatch/alarm_scheduler.py +11 -8
  180. localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
  181. localstack/services/cloudwatch/models.py +5 -7
  182. localstack/services/cloudwatch/provider.py +30 -25
  183. localstack/services/cloudwatch/provider_v2.py +27 -32
  184. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
  185. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
  186. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
  187. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
  188. localstack/services/dynamodb/packages.py +3 -3
  189. localstack/services/dynamodb/provider.py +159 -18
  190. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
  191. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
  192. localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
  193. localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
  194. localstack/services/dynamodb/server.py +2 -2
  195. localstack/services/dynamodb/utils.py +13 -14
  196. localstack/services/dynamodb/v2/provider.py +157 -18
  197. localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
  198. localstack/services/dynamodbstreams/models.py +1 -3
  199. localstack/services/ec2/patches.py +26 -5
  200. localstack/services/ec2/provider.py +3 -3
  201. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
  202. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
  203. localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
  204. localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
  205. localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
  206. localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
  207. localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
  208. localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
  209. localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
  210. localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
  211. localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
  212. localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
  213. localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
  214. localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
  215. localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
  216. localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
  217. localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
  218. localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
  219. localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
  220. localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
  221. localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
  222. localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
  223. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
  224. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
  225. localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
  226. localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
  227. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
  228. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
  229. localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
  230. localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
  231. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +29 -22
  232. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
  233. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
  234. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
  235. localstack/services/ecr/resource_providers/aws_ecr_repository.py +22 -19
  236. localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
  237. localstack/services/edge.py +6 -6
  238. localstack/services/es/provider.py +21 -21
  239. localstack/services/events/archive.py +2 -2
  240. localstack/services/events/connection.py +5 -5
  241. localstack/services/events/event_bus.py +9 -9
  242. localstack/services/events/event_rule_engine.py +31 -13
  243. localstack/services/events/models.py +29 -30
  244. localstack/services/events/provider.py +29 -26
  245. localstack/services/events/replay.py +3 -3
  246. localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
  247. localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
  248. localstack/services/events/resource_providers/aws_events_connection.py +27 -27
  249. localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
  250. localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
  251. localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
  252. localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
  253. localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
  254. localstack/services/events/resource_providers/aws_events_rule.py +82 -82
  255. localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
  256. localstack/services/events/rule.py +15 -15
  257. localstack/services/events/target.py +21 -13
  258. localstack/services/events/utils.py +7 -7
  259. localstack/services/events/v1/models.py +1 -3
  260. localstack/services/events/v1/provider.py +15 -15
  261. localstack/services/firehose/models.py +1 -3
  262. localstack/services/firehose/provider.py +25 -16
  263. localstack/services/iam/iam_patches.py +5 -6
  264. localstack/services/iam/provider.py +14 -119
  265. localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
  266. localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
  267. localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
  268. localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
  269. localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
  270. localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
  271. localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
  272. localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
  273. localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
  274. localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
  275. localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
  276. localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
  277. localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
  278. localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
  279. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
  280. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
  281. localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
  282. localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
  283. localstack/services/iam/resources/policy_simulator.py +133 -0
  284. localstack/services/kinesis/kinesis_mock_server.py +7 -8
  285. localstack/services/kinesis/models.py +17 -5
  286. localstack/services/kinesis/packages.py +3 -3
  287. localstack/services/kinesis/provider.py +86 -3
  288. localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
  289. localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
  290. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
  291. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
  292. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
  293. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
  294. localstack/services/kms/models.py +21 -18
  295. localstack/services/kms/provider.py +62 -26
  296. localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
  297. localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
  298. localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
  299. localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
  300. localstack/services/kms/utils.py +4 -3
  301. localstack/services/lambda_/api_utils.py +19 -16
  302. localstack/services/lambda_/custom_endpoints.py +2 -2
  303. localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +4 -7
  304. localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
  305. localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
  306. localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
  307. localstack/services/lambda_/hooks.py +6 -1
  308. localstack/services/lambda_/invocation/assignment.py +1 -2
  309. localstack/services/lambda_/invocation/docker_runtime_executor.py +7 -11
  310. localstack/services/lambda_/invocation/event_manager.py +1 -1
  311. localstack/services/lambda_/invocation/execution_environment.py +4 -4
  312. localstack/services/lambda_/invocation/executor_endpoint.py +8 -11
  313. localstack/services/lambda_/invocation/internal_sqs_queue.py +6 -10
  314. localstack/services/lambda_/invocation/lambda_models.py +33 -30
  315. localstack/services/lambda_/invocation/lambda_service.py +12 -5
  316. localstack/services/lambda_/invocation/logs.py +2 -3
  317. localstack/services/lambda_/invocation/runtime_executor.py +3 -3
  318. localstack/services/lambda_/invocation/version_manager.py +31 -8
  319. localstack/services/lambda_/ldm.py +14 -0
  320. localstack/services/lambda_/packages.py +3 -4
  321. localstack/services/lambda_/provider.py +9 -26
  322. localstack/services/lambda_/provider_utils.py +1 -1
  323. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
  324. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
  325. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
  326. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
  327. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
  328. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
  329. localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
  330. localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
  331. localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
  332. localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
  333. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
  334. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
  335. localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
  336. localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
  337. localstack/services/lambda_/resource_providers/aws_lambda_url.py +15 -15
  338. localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
  339. localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
  340. localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
  341. localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
  342. localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
  343. localstack/services/lambda_/runtimes.py +1 -3
  344. localstack/services/lambda_/urlrouter.py +14 -1
  345. localstack/services/logs/models.py +1 -3
  346. localstack/services/logs/provider.py +39 -22
  347. localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
  348. localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
  349. localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
  350. localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
  351. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
  352. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
  353. localstack/services/moto.py +5 -4
  354. localstack/services/opensearch/cluster.py +28 -20
  355. localstack/services/opensearch/cluster_manager.py +13 -14
  356. localstack/services/opensearch/models.py +1 -3
  357. localstack/services/opensearch/packages.py +27 -9
  358. localstack/services/opensearch/provider.py +15 -10
  359. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
  360. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
  361. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
  362. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
  363. localstack/services/opensearch/versions.py +57 -10
  364. localstack/services/plugins.py +37 -32
  365. localstack/services/providers.py +10 -2
  366. localstack/services/redshift/provider.py +0 -21
  367. localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
  368. localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
  369. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
  370. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
  371. localstack/services/route53/models.py +1 -3
  372. localstack/services/route53/provider.py +1 -2
  373. localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
  374. localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
  375. localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
  376. localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
  377. localstack/services/route53resolver/models.py +8 -10
  378. localstack/services/route53resolver/provider.py +12 -12
  379. localstack/services/s3/codec.py +2 -2
  380. localstack/services/s3/constants.py +5 -2
  381. localstack/services/s3/cors.py +8 -8
  382. localstack/services/s3/models.py +73 -73
  383. localstack/services/s3/notifications.py +74 -58
  384. localstack/services/s3/presigned_url.py +41 -59
  385. localstack/services/s3/provider.py +86 -29
  386. localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
  387. localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
  388. localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
  389. localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
  390. localstack/services/s3/storage/core.py +4 -3
  391. localstack/services/s3/storage/ephemeral.py +7 -6
  392. localstack/services/s3/utils.py +51 -31
  393. localstack/services/s3/validation.py +47 -33
  394. localstack/services/s3/website_hosting.py +9 -7
  395. localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
  396. localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
  397. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
  398. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
  399. localstack/services/secretsmanager/provider.py +10 -12
  400. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
  401. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
  402. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
  403. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
  404. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
  405. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
  406. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
  407. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
  408. localstack/services/ses/models.py +8 -1
  409. localstack/services/ses/provider.py +128 -55
  410. localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
  411. localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
  412. localstack/services/sns/constants.py +7 -1
  413. localstack/services/sns/executor.py +9 -2
  414. localstack/services/sns/models.py +25 -25
  415. localstack/services/sns/provider.py +9 -7
  416. localstack/services/sns/publisher.py +37 -23
  417. localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
  418. localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
  419. localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
  420. localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
  421. localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
  422. localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
  423. localstack/services/sns/v2/models.py +167 -0
  424. localstack/services/sns/v2/provider.py +867 -0
  425. localstack/services/sns/v2/utils.py +130 -0
  426. localstack/services/sqs/constants.py +2 -2
  427. localstack/services/sqs/developer_api.py +205 -0
  428. localstack/services/sqs/models.py +71 -36
  429. localstack/services/sqs/provider.py +56 -332
  430. localstack/services/sqs/query_api.py +8 -5
  431. localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
  432. localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
  433. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +7 -5
  434. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
  435. localstack/services/sqs/utils.py +123 -4
  436. localstack/services/ssm/provider.py +3 -4
  437. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
  438. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
  439. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
  440. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
  441. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
  442. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
  443. localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
  444. localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
  445. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
  446. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
  447. localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
  448. localstack/services/stepfunctions/asl/component/common/assign/assign_decl.py +1 -1
  449. localstack/services/stepfunctions/asl/component/common/assign/assign_decl_binding.py +1 -1
  450. localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_array.py +1 -1
  451. localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_object.py +1 -1
  452. localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
  453. localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
  454. localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
  455. localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
  456. localstack/services/stepfunctions/asl/component/common/error_name/states_error_name_type.py +1 -1
  457. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
  458. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_array.py +1 -1
  459. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_object.py +1 -1
  460. localstack/services/stepfunctions/asl/component/common/path/input_path.py +4 -4
  461. localstack/services/stepfunctions/asl/component/common/path/output_path.py +4 -4
  462. localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
  463. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadarr/payload_arr.py +1 -1
  464. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
  465. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadtmpl/payload_tmpl.py +1 -1
  466. localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
  467. localstack/services/stepfunctions/asl/component/common/string/string_expression.py +3 -3
  468. localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
  469. localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
  470. localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +4 -4
  471. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/array/array_partition.py +1 -1
  472. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/generic/string_format.py +1 -1
  473. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_array.py +1 -1
  474. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_format.py +1 -1
  475. localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +3 -3
  476. localstack/services/stepfunctions/asl/component/intrinsic/member.py +1 -1
  477. localstack/services/stepfunctions/asl/component/program/program.py +9 -9
  478. localstack/services/stepfunctions/asl/component/program/states.py +1 -1
  479. localstack/services/stepfunctions/asl/component/state/state.py +10 -11
  480. localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
  481. localstack/services/stepfunctions/asl/component/state/state_choice/comparison/comparison.py +5 -11
  482. localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
  483. localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +3 -5
  484. localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +9 -9
  485. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +7 -7
  486. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
  487. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
  488. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_output_transformer/resource_output_transformer_csv.py +2 -2
  489. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
  490. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
  491. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
  492. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
  493. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
  494. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
  495. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
  496. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
  497. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
  498. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
  499. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
  500. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
  501. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
  502. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +12 -13
  503. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
  504. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +7 -7
  505. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +2 -3
  506. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +7 -7
  507. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
  508. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
  509. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +18 -18
  510. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_aws_sdk.py +1 -1
  511. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +8 -7
  512. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
  513. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
  514. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
  515. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
  516. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
  517. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
  518. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
  519. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
  520. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
  521. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +5 -5
  522. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
  523. localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +3 -5
  524. localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +5 -7
  525. localstack/services/stepfunctions/asl/component/state/state_succeed/state_succeed.py +1 -1
  526. localstack/services/stepfunctions/asl/component/state/state_wait/state_wait.py +1 -1
  527. localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
  528. localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
  529. localstack/services/stepfunctions/asl/eval/environment.py +22 -24
  530. localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
  531. localstack/services/stepfunctions/asl/eval/event/event_manager.py +10 -10
  532. localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
  533. localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
  534. localstack/services/stepfunctions/asl/eval/states.py +12 -12
  535. localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
  536. localstack/services/stepfunctions/asl/eval/variable_store.py +6 -6
  537. localstack/services/stepfunctions/asl/jsonata/jsonata.py +7 -6
  538. localstack/services/stepfunctions/asl/parse/asl_parser.py +1 -1
  539. localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +2 -3
  540. localstack/services/stepfunctions/asl/parse/preprocessor.py +44 -44
  541. localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
  542. localstack/services/stepfunctions/asl/static_analyser/intrinsic/variable_names_intrinsic_static_analyser.py +1 -1
  543. localstack/services/stepfunctions/asl/static_analyser/variable_references_static_analyser.py +2 -2
  544. localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
  545. localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
  546. localstack/services/stepfunctions/backend/activity.py +4 -4
  547. localstack/services/stepfunctions/backend/alias.py +8 -8
  548. localstack/services/stepfunctions/backend/execution.py +29 -30
  549. localstack/services/stepfunctions/backend/execution_worker.py +7 -7
  550. localstack/services/stepfunctions/backend/state_machine.py +28 -28
  551. localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
  552. localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
  553. localstack/services/stepfunctions/mocking/mock_config.py +9 -9
  554. localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
  555. localstack/services/stepfunctions/packages.py +14 -5
  556. localstack/services/stepfunctions/provider.py +34 -44
  557. localstack/services/stepfunctions/quotas.py +2 -3
  558. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
  559. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
  560. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
  561. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
  562. localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
  563. localstack/services/stores.py +8 -8
  564. localstack/services/transcribe/packages.py +1 -3
  565. localstack/services/transcribe/provider.py +8 -3
  566. localstack/state/codecs.py +61 -0
  567. localstack/state/core.py +11 -5
  568. localstack/state/inspect.py +4 -4
  569. localstack/state/pickle.py +36 -23
  570. localstack/testing/aws/asf_utils.py +3 -2
  571. localstack/testing/aws/cloudformation_utils.py +1 -1
  572. localstack/testing/aws/lambda_utils.py +15 -14
  573. localstack/testing/aws/util.py +3 -2
  574. localstack/testing/pytest/cloudformation/fixtures.py +68 -18
  575. localstack/testing/pytest/container.py +5 -5
  576. localstack/testing/pytest/filters.py +1 -3
  577. localstack/testing/pytest/fixtures.py +188 -49
  578. localstack/testing/pytest/in_memory_localstack.py +1 -3
  579. localstack/testing/pytest/marking.py +42 -15
  580. localstack/testing/pytest/path_filter.py +1 -1
  581. localstack/testing/pytest/stepfunctions/fixtures.py +4 -4
  582. localstack/testing/pytest/stepfunctions/utils.py +11 -10
  583. localstack/testing/pytest/util.py +1 -1
  584. localstack/testing/pytest/validation_tracking.py +3 -4
  585. localstack/testing/scenario/provisioning.py +11 -10
  586. localstack/testing/snapshots/transformer_utility.py +8 -3
  587. localstack/testing/testselection/matching.py +2 -2
  588. localstack/testing/testselection/opt_out.py +1 -1
  589. localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
  590. localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
  591. localstack/testing/testselection/testselection.py +2 -2
  592. localstack/utils/analytics/cli.py +2 -3
  593. localstack/utils/analytics/client.py +5 -5
  594. localstack/utils/analytics/events.py +2 -2
  595. localstack/utils/analytics/metadata.py +6 -4
  596. localstack/utils/analytics/metrics/counter.py +11 -18
  597. localstack/utils/analytics/metrics/registry.py +2 -2
  598. localstack/utils/analytics/publisher.py +4 -5
  599. localstack/utils/analytics/service_providers.py +19 -0
  600. localstack/utils/analytics/service_request_aggregator.py +4 -4
  601. localstack/utils/archives.py +12 -12
  602. localstack/utils/asyncio.py +2 -2
  603. localstack/utils/aws/arns.py +26 -31
  604. localstack/utils/aws/aws_responses.py +21 -28
  605. localstack/utils/aws/aws_stack.py +7 -12
  606. localstack/utils/aws/dead_letter_queue.py +4 -9
  607. localstack/utils/aws/message_forwarding.py +8 -11
  608. localstack/utils/aws/request_context.py +5 -6
  609. localstack/utils/aws/resources.py +1 -1
  610. localstack/utils/aws/templating.py +4 -4
  611. localstack/utils/batch_policy.py +4 -4
  612. localstack/utils/bootstrap.py +37 -30
  613. localstack/utils/catalog/catalog.py +139 -0
  614. localstack/utils/catalog/catalog_loader.py +119 -0
  615. localstack/utils/catalog/common.py +58 -0
  616. localstack/utils/catalog/plugins.py +28 -0
  617. localstack/utils/cloudwatch/cloudwatch_util.py +5 -5
  618. localstack/utils/collections.py +33 -27
  619. localstack/utils/config_listener.py +2 -2
  620. localstack/utils/container_networking.py +5 -6
  621. localstack/utils/container_utils/container_client.py +156 -160
  622. localstack/utils/container_utils/docker_cmd_client.py +97 -81
  623. localstack/utils/container_utils/docker_sdk_client.py +75 -72
  624. localstack/utils/crypto.py +12 -13
  625. localstack/utils/diagnose.py +11 -12
  626. localstack/utils/docker_utils.py +11 -7
  627. localstack/utils/files.py +34 -15
  628. localstack/utils/functions.py +5 -4
  629. localstack/utils/http.py +14 -14
  630. localstack/utils/iputils.py +2 -1
  631. localstack/utils/json.py +21 -7
  632. localstack/utils/kinesis/kinesis_connector.py +2 -1
  633. localstack/utils/net.py +25 -17
  634. localstack/utils/no_exit_argument_parser.py +2 -2
  635. localstack/utils/numbers.py +9 -2
  636. localstack/utils/objects.py +15 -14
  637. localstack/utils/patch.py +14 -7
  638. localstack/utils/platform.py +2 -2
  639. localstack/utils/run.py +15 -14
  640. localstack/utils/scheduler.py +13 -12
  641. localstack/utils/server/tcp_proxy.py +2 -2
  642. localstack/utils/serving.py +3 -4
  643. localstack/utils/strings.py +15 -16
  644. localstack/utils/sync.py +126 -1
  645. localstack/utils/tagging.py +10 -8
  646. localstack/utils/testutil.py +17 -17
  647. localstack/utils/threads.py +3 -3
  648. localstack/utils/time.py +12 -4
  649. localstack/utils/urls.py +1 -3
  650. localstack/utils/xml.py +1 -1
  651. localstack/utils/xray/traceid.py +1 -1
  652. localstack/version.py +16 -3
  653. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/METADATA +18 -13
  654. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/RECORD +663 -655
  655. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/entry_points.txt +8 -4
  656. localstack_core-4.10.1.dev12.dist-info/plux.json +1 -0
  657. localstack/packages/terraform.py +0 -47
  658. localstack/services/cloudformation/deploy.html +0 -144
  659. localstack/services/cloudformation/deploy_ui.py +0 -47
  660. localstack/services/cloudformation/plugins.py +0 -12
  661. localstack/services/lambda_/lambda_debug_mode/ldm.py +0 -375
  662. localstack/services/lambda_/lambda_debug_mode/ldm_config_file.py +0 -178
  663. localstack/services/lambda_/lambda_debug_mode/ldm_types.py +0 -11
  664. localstack/services/lambda_/lambda_debug_mode/ldm_utils.py +0 -43
  665. localstack_core-4.6.1.dev60.dist-info/plux.json +0 -1
  666. /localstack/{services/lambda_/lambda_debug_mode/__init__.py → testing/pytest/cloudformation/transformers.py} +0 -0
  667. {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack +0 -0
  668. {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack-supervisor +0 -0
  669. {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack.bat +0 -0
  670. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/WHEEL +0 -0
  671. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/licenses/LICENSE.txt +0 -0
  672. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/top_level.txt +0 -0
@@ -2,10 +2,9 @@ from __future__ import annotations
2
2
 
3
3
  import abc
4
4
  import datetime
5
- import json
6
5
  import logging
7
6
  from abc import ABC
8
- from typing import Final, Optional, Union
7
+ from typing import Any, Final
9
8
 
10
9
  from localstack.aws.api.stepfunctions import (
11
10
  ExecutionFailedEventDetails,
@@ -74,27 +73,27 @@ class CommonStateField(EvalComponent, ABC):
74
73
  continue_with: ContinueWith
75
74
 
76
75
  # Holds a human-readable description of the state.
77
- comment: Optional[Comment]
76
+ comment: Comment | None
78
77
 
79
78
  # A path that selects a portion of the state's input to be passed to the state's state_task for processing.
80
79
  # If omitted, it has the value $ which designates the entire input.
81
- input_path: Optional[InputPath]
80
+ input_path: InputPath | None
82
81
 
83
82
  # A path that selects a portion of the state's output to be passed to the next state.
84
83
  # If omitted, it has the value $ which designates the entire output.
85
- output_path: Optional[OutputPath]
84
+ output_path: OutputPath | None
86
85
 
87
- assign_decl: Optional[AssignDecl]
86
+ assign_decl: AssignDecl | None
88
87
 
89
- output: Optional[Output]
88
+ output: Output | None
90
89
 
91
90
  state_entered_event_type: Final[HistoryEventType]
92
- state_exited_event_type: Final[Optional[HistoryEventType]]
91
+ state_exited_event_type: Final[HistoryEventType | None]
93
92
 
94
93
  def __init__(
95
94
  self,
96
95
  state_entered_event_type: HistoryEventType,
97
- state_exited_event_type: Optional[HistoryEventType],
96
+ state_exited_event_type: HistoryEventType | None,
98
97
  ):
99
98
  self.state_entered_event_type = state_entered_event_type
100
99
  self.state_exited_event_type = state_exited_event_type
@@ -163,7 +162,7 @@ class CommonStateField(EvalComponent, ABC):
163
162
  event_details["assignedVariablesDetails"] = {"truncated": False} # noqa
164
163
  return event_details
165
164
 
166
- def _verify_size_quota(self, env: Environment, value: Union[str, json]) -> None:
165
+ def _verify_size_quota(self, env: Environment, value: str | Any) -> None:
167
166
  is_within: bool = is_within_size_quota(value)
168
167
  if is_within:
169
168
  return
@@ -215,7 +214,7 @@ class CommonStateField(EvalComponent, ABC):
215
214
  ),
216
215
  )
217
216
  env.states.context_object.context_object_data["State"] = StateData(
218
- EnteredTime=datetime.datetime.now(tz=datetime.timezone.utc).isoformat(), Name=self.name
217
+ EnteredTime=datetime.datetime.now(tz=datetime.UTC).isoformat(), Name=self.name
219
218
  )
220
219
 
221
220
  self._eval_state_input(env=env)
@@ -1,4 +1,4 @@
1
- from typing import Final, Optional
1
+ from typing import Final
2
2
 
3
3
  from localstack.services.stepfunctions.asl.component.common.assign.assign_decl import AssignDecl
4
4
  from localstack.services.stepfunctions.asl.component.common.comment import Comment
@@ -12,19 +12,19 @@ from localstack.services.stepfunctions.asl.eval.environment import Environment
12
12
 
13
13
 
14
14
  class ChoiceRule(EvalComponent):
15
- comparison: Final[Optional[Comparison]]
16
- next_stmt: Final[Optional[Next]]
17
- comment: Final[Optional[Comment]]
18
- assign: Final[Optional[AssignDecl]]
19
- output: Final[Optional[Output]]
15
+ comparison: Final[Comparison | None]
16
+ next_stmt: Final[Next | None]
17
+ comment: Final[Comment | None]
18
+ assign: Final[AssignDecl | None]
19
+ output: Final[Output | None]
20
20
 
21
21
  def __init__(
22
22
  self,
23
- comparison: Optional[Comparison],
24
- next_stmt: Optional[Next],
25
- comment: Optional[Comment],
26
- assign: Optional[AssignDecl],
27
- output: Optional[Output],
23
+ comparison: Comparison | None,
24
+ next_stmt: Next | None,
25
+ comment: Comment | None,
26
+ assign: AssignDecl | None,
27
+ output: Output | None,
28
28
  ):
29
29
  self.comparison = comparison
30
30
  self.next_stmt = next_stmt
@@ -72,7 +72,7 @@ class ComparisonCompositeSingle(ComparisonComposite, abc.ABC):
72
72
  rule: Final[ChoiceRule]
73
73
 
74
74
  def __init__(self, operator: ComparisonComposite.ChoiceOp, rule: ChoiceRule):
75
- super(ComparisonCompositeSingle, self).__init__(operator=operator)
75
+ super().__init__(operator=operator)
76
76
  self.rule = rule
77
77
 
78
78
 
@@ -80,15 +80,13 @@ class ComparisonCompositeMulti(ComparisonComposite, abc.ABC):
80
80
  rules: Final[list[ChoiceRule]]
81
81
 
82
82
  def __init__(self, operator: ComparisonComposite.ChoiceOp, rules: list[ChoiceRule]):
83
- super(ComparisonCompositeMulti, self).__init__(operator=operator)
83
+ super().__init__(operator=operator)
84
84
  self.rules = rules
85
85
 
86
86
 
87
87
  class ComparisonCompositeNot(ComparisonCompositeSingle):
88
88
  def __init__(self, rule: ChoiceRule):
89
- super(ComparisonCompositeNot, self).__init__(
90
- operator=ComparisonComposite.ChoiceOp.Not, rule=rule
91
- )
89
+ super().__init__(operator=ComparisonComposite.ChoiceOp.Not, rule=rule)
92
90
 
93
91
  def _eval_body(self, env: Environment) -> None:
94
92
  self.rule.eval(env)
@@ -99,9 +97,7 @@ class ComparisonCompositeNot(ComparisonCompositeSingle):
99
97
 
100
98
  class ComparisonCompositeAnd(ComparisonCompositeMulti):
101
99
  def __init__(self, rules: list[ChoiceRule]):
102
- super(ComparisonCompositeAnd, self).__init__(
103
- operator=ComparisonComposite.ChoiceOp.And, rules=rules
104
- )
100
+ super().__init__(operator=ComparisonComposite.ChoiceOp.And, rules=rules)
105
101
 
106
102
  def _eval_body(self, env: Environment) -> None:
107
103
  res = True
@@ -116,9 +112,7 @@ class ComparisonCompositeAnd(ComparisonCompositeMulti):
116
112
 
117
113
  class ComparisonCompositeOr(ComparisonCompositeMulti):
118
114
  def __init__(self, rules: list[ChoiceRule]):
119
- super(ComparisonCompositeOr, self).__init__(
120
- operator=ComparisonComposite.ChoiceOp.Or, rules=rules
121
- )
115
+ super().__init__(operator=ComparisonComposite.ChoiceOp.Or, rules=rules)
122
116
 
123
117
  def _eval_body(self, env: Environment) -> None:
124
118
  res = False
@@ -1,6 +1,6 @@
1
1
  import datetime
2
2
  import logging
3
- from typing import Any, Final, Optional
3
+ from typing import Any, Final
4
4
 
5
5
  from localstack.services.stepfunctions.asl.component.state.state_choice.comparison.comparison_operator_type import (
6
6
  ComparisonOperatorType,
@@ -88,7 +88,7 @@ class IsTimestamp(Operator):
88
88
  return str(ComparisonOperatorType.IsTimestamp)
89
89
 
90
90
  @staticmethod
91
- def string_to_timestamp(string: str) -> Optional[datetime.datetime]:
91
+ def string_to_timestamp(string: str) -> datetime.datetime | None:
92
92
  try:
93
93
  return datetime.datetime.strptime(string, IsTimestamp.TIMESTAMP_FORMAT)
94
94
  except Exception:
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from localstack.aws.api.stepfunctions import HistoryEventType
4
2
  from localstack.services.stepfunctions.asl.component.common.flow.end import End
5
3
  from localstack.services.stepfunctions.asl.component.common.flow.next import Next
@@ -16,10 +14,10 @@ from localstack.services.stepfunctions.asl.eval.environment import Environment
16
14
 
17
15
  class StateChoice(CommonStateField):
18
16
  choices_decl: ChoicesDecl
19
- default_state: Optional[DefaultDecl]
17
+ default_state: DefaultDecl | None
20
18
 
21
19
  def __init__(self):
22
- super(StateChoice, self).__init__(
20
+ super().__init__(
23
21
  state_entered_event_type=HistoryEventType.ChoiceStateEntered,
24
22
  state_exited_event_type=HistoryEventType.ChoiceStateExited,
25
23
  )
@@ -27,7 +25,7 @@ class StateChoice(CommonStateField):
27
25
  self._next_state_name = None
28
26
 
29
27
  def from_state_props(self, state_props: StateProps) -> None:
30
- super(StateChoice, self).from_state_props(state_props)
28
+ super().from_state_props(state_props)
31
29
  self.choices_decl = state_props.get(ChoicesDecl)
32
30
  self.default_state = state_props.get(DefaultDecl)
33
31
 
@@ -3,7 +3,7 @@ import copy
3
3
  import logging
4
4
  import threading
5
5
  from threading import Thread
6
- from typing import Any, Optional
6
+ from typing import Any
7
7
 
8
8
  from localstack.aws.api.stepfunctions import HistoryEventType, TaskFailedEventDetails
9
9
  from localstack.services.stepfunctions.asl.component.common.catch.catch_decl import CatchDecl
@@ -44,7 +44,7 @@ class ExecutionState(CommonStateField, abc.ABC):
44
44
  def __init__(
45
45
  self,
46
46
  state_entered_event_type: HistoryEventType,
47
- state_exited_event_type: Optional[HistoryEventType],
47
+ state_exited_event_type: HistoryEventType | None,
48
48
  ):
49
49
  super().__init__(
50
50
  state_entered_event_type=state_entered_event_type,
@@ -54,20 +54,20 @@ class ExecutionState(CommonStateField, abc.ABC):
54
54
  # Specifies where (in the input) to place the results of executing the state_task that's specified in Resource.
55
55
  # The input is then filtered as specified by the OutputPath field (if present) before being used as the
56
56
  # state's output.
57
- self.result_path: Optional[ResultPath] = None
57
+ self.result_path: ResultPath | None = None
58
58
 
59
59
  # ResultSelector (Optional)
60
60
  # Pass a collection of key value pairs, where the values are static or selected from the result.
61
- self.result_selector: Optional[ResultSelector] = None
61
+ self.result_selector: ResultSelector | None = None
62
62
 
63
63
  # Retry (Optional)
64
64
  # An array of objects, called Retriers, that define a retry policy if the state encounters runtime errors.
65
- self.retry: Optional[RetryDecl] = None
65
+ self.retry: RetryDecl | None = None
66
66
 
67
67
  # Catch (Optional)
68
68
  # An array of objects, called Catchers, that define a fallback state. This state is executed if the state
69
69
  # encounters runtime errors and its retry policy is exhausted or isn't defined.
70
- self.catch: Optional[CatchDecl] = None
70
+ self.catch: CatchDecl | None = None
71
71
 
72
72
  # TimeoutSeconds (Optional)
73
73
  # If the state_task runs longer than the specified seconds, this state fails with a States.Timeout error name.
@@ -93,7 +93,7 @@ class ExecutionState(CommonStateField, abc.ABC):
93
93
  # HeartbeatSecondsPath. When resolved, the reference path must select fields whose values are positive integers.
94
94
  # A Task state cannot include both HeartbeatSeconds and HeartbeatSecondsPath
95
95
  # HeartbeatSeconds and HeartbeatSecondsPath fields are encoded by the Heartbeat type.
96
- self.heartbeat: Optional[Heartbeat] = None
96
+ self.heartbeat: Heartbeat | None = None
97
97
 
98
98
  def from_state_props(self, state_props: StateProps) -> None:
99
99
  super().from_state_props(state_props=state_props)
@@ -170,8 +170,8 @@ class ExecutionState(CommonStateField, abc.ABC):
170
170
  frame: Environment = env.open_frame()
171
171
  frame.states.reset(input_value=env.states.get_input())
172
172
  frame.stack = copy.deepcopy(env.stack)
173
- execution_outputs: list[Any] = list()
174
- execution_exceptions: list[Optional[Exception]] = [None]
173
+ execution_outputs: list[Any] = []
174
+ execution_exceptions: list[Exception | None] = [None]
175
175
  terminated_event = threading.Event()
176
176
 
177
177
  def _exec_and_notify():
@@ -1,5 +1,5 @@
1
1
  import copy
2
- from typing import Final, Optional
2
+ from typing import Final
3
3
 
4
4
  from localstack.services.stepfunctions.asl.component.common.parargs import Parargs
5
5
  from localstack.services.stepfunctions.asl.component.eval_component import EvalComponent
@@ -26,15 +26,15 @@ from localstack.services.stepfunctions.asl.eval.environment import Environment
26
26
 
27
27
  class ItemReader(EvalComponent):
28
28
  resource_eval: Final[ResourceEval]
29
- parargs: Final[Optional[Parargs]]
30
- reader_config: Final[Optional[ReaderConfig]]
31
- resource_output_transformer: Optional[ResourceOutputTransformer]
29
+ parargs: Final[Parargs | None]
30
+ reader_config: Final[ReaderConfig | None]
31
+ resource_output_transformer: ResourceOutputTransformer | None
32
32
 
33
33
  def __init__(
34
34
  self,
35
35
  resource: Resource,
36
- parargs: Optional[Parargs],
37
- reader_config: Optional[ReaderConfig],
36
+ parargs: Parargs | None,
37
+ reader_config: ReaderConfig | None,
38
38
  ):
39
39
  self.resource_eval = resource_eval_for(resource=resource)
40
40
  self.parargs = parargs
@@ -65,7 +65,7 @@ class ItemReader(EvalComponent):
65
65
  if self.parargs:
66
66
  self.parargs.eval(env=env)
67
67
  else:
68
- env.stack.append(dict())
68
+ env.stack.append({})
69
69
 
70
70
  self.resource_eval.eval_resource(env=env)
71
71
 
@@ -1,4 +1,4 @@
1
- from typing import Final, Optional, TypedDict
1
+ from typing import Final, TypedDict
2
2
 
3
3
  from localstack.services.stepfunctions.asl.component.eval_component import EvalComponent
4
4
  from localstack.services.stepfunctions.asl.component.state.state_execution.state_map.item_reader.reader_config.csv_header_location import (
@@ -34,7 +34,7 @@ MaxItemsValueOutput = int
34
34
  class ReaderConfigOutput(TypedDict):
35
35
  InputType: InputTypeOutput
36
36
  CSVHeaderLocation: CSVHeaderLocationOutput
37
- CSVHeaders: Optional[CSVHeadersOutput]
37
+ CSVHeaders: CSVHeadersOutput | None
38
38
  MaxItemsValue: MaxItemsValueOutput
39
39
 
40
40
 
@@ -42,14 +42,14 @@ class ReaderConfig(EvalComponent):
42
42
  input_type: Final[InputType]
43
43
  max_items_decl: Final[MaxItemsDecl]
44
44
  csv_header_location: Final[CSVHeaderLocation]
45
- csv_headers: Optional[CSVHeaders]
45
+ csv_headers: CSVHeaders | None
46
46
 
47
47
  def __init__(
48
48
  self,
49
49
  input_type: InputType,
50
50
  csv_header_location: CSVHeaderLocation,
51
- csv_headers: Optional[CSVHeaders],
52
- max_items_decl: Optional[MaxItemsDecl],
51
+ csv_headers: CSVHeaders | None,
52
+ max_items_decl: MaxItemsDecl | None,
53
53
  ):
54
54
  self.input_type = input_type
55
55
  self.max_items_decl = max_items_decl or MaxItemsInt()
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Callable, Final
3
+ from collections.abc import Callable
4
+ from typing import Final
4
5
 
5
6
  from localstack.services.stepfunctions.asl.component.state.state_execution.state_map.item_reader.resource_eval.resource_eval import (
6
7
  ResourceEval,
@@ -59,9 +59,9 @@ class ResourceOutputTransformerCSV(ResourceOutputTransformer):
59
59
  )
60
60
  raise FailureEventException(failure_event=failure_event)
61
61
 
62
- transformed_outputs = list()
62
+ transformed_outputs = []
63
63
  for row in csv_reader_slice:
64
- transformed_output = dict()
64
+ transformed_output = {}
65
65
  for i, header in enumerate(headers):
66
66
  transformed_output[header] = row[i] if i < len(row) else ""
67
67
  transformed_outputs.append(
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import abc
4
4
  import json
5
- from typing import Any, Final, Optional
5
+ from typing import Any, Final
6
6
 
7
7
  from localstack.aws.api.stepfunctions import (
8
8
  HistoryEventType,
@@ -50,8 +50,8 @@ from localstack.services.stepfunctions.asl.eval.event.event_manager import (
50
50
 
51
51
 
52
52
  class DistributedIterationComponentEvalInput(InlineIterationComponentEvalInput):
53
- item_reader: Final[Optional[ItemReader]]
54
- label: Final[Optional[str]]
53
+ item_reader: Final[ItemReader | None]
54
+ label: Final[str | None]
55
55
  map_run_record: Final[MapRunRecord]
56
56
 
57
57
  def __init__(
@@ -59,12 +59,12 @@ class DistributedIterationComponentEvalInput(InlineIterationComponentEvalInput):
59
59
  state_name: str,
60
60
  max_concurrency: int,
61
61
  input_items: list[json],
62
- parameters: Optional[Parameters],
63
- item_selector: Optional[ItemSelector],
64
- item_reader: Optional[ItemReader],
62
+ parameters: Parameters | None,
63
+ item_selector: ItemSelector | None,
64
+ item_reader: ItemReader | None,
65
65
  tolerated_failure_count: int,
66
66
  tolerated_failure_percentage: float,
67
- label: Optional[str],
67
+ label: str | None,
68
68
  map_run_record: MapRunRecord,
69
69
  ):
70
70
  super().__init__(
@@ -118,7 +118,7 @@ class DistributedIterationComponent(InlineIterationComponent, abc.ABC):
118
118
 
119
119
  job_pool.await_jobs()
120
120
 
121
- worker_exception: Optional[Exception] = job_pool.get_worker_exception()
121
+ worker_exception: Exception | None = job_pool.get_worker_exception()
122
122
  if worker_exception is not None:
123
123
  raise worker_exception
124
124
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import abc
4
4
  import json
5
5
  import threading
6
- from typing import Any, Final, Optional
6
+ from typing import Any, Final
7
7
 
8
8
  from localstack.services.stepfunctions.asl.component.common.comment import Comment
9
9
  from localstack.services.stepfunctions.asl.component.common.flow.start_at import StartAt
@@ -38,16 +38,16 @@ class InlineIterationComponentEvalInput:
38
38
  state_name: Final[str]
39
39
  max_concurrency: Final[int]
40
40
  input_items: Final[list[json]]
41
- parameters: Final[Optional[Parameters]]
42
- item_selector: Final[Optional[ItemSelector]]
41
+ parameters: Final[Parameters | None]
42
+ item_selector: Final[ItemSelector | None]
43
43
 
44
44
  def __init__(
45
45
  self,
46
46
  state_name: str,
47
47
  max_concurrency: int,
48
48
  input_items: list[json],
49
- parameters: Optional[Parameters],
50
- item_selector: Optional[ItemSelector],
49
+ parameters: Parameters | None,
50
+ item_selector: ItemSelector | None,
51
51
  ):
52
52
  self.state_name = state_name
53
53
  self.max_concurrency = max_concurrency
@@ -65,7 +65,7 @@ class InlineIterationComponent(IterationComponent, abc.ABC):
65
65
  start_at: StartAt,
66
66
  states: States,
67
67
  processor_config: ProcessorConfig,
68
- comment: Optional[Comment],
68
+ comment: Comment | None,
69
69
  ):
70
70
  super().__init__(
71
71
  query_language=query_language, start_at=start_at, states=states, comment=comment
@@ -105,7 +105,7 @@ class InlineIterationComponent(IterationComponent, abc.ABC):
105
105
 
106
106
  job_pool.await_jobs()
107
107
 
108
- worker_exception: Optional[Exception] = job_pool.get_worker_exception()
108
+ worker_exception: Exception | None = job_pool.get_worker_exception()
109
109
  if worker_exception is not None:
110
110
  raise worker_exception
111
111
 
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Final, Optional
2
+ from typing import Final
3
3
 
4
4
  from localstack.services.stepfunctions.asl.component.common.error_name.failure_event import (
5
5
  FailureEventException,
@@ -44,8 +44,8 @@ class DistributedItemProcessorWorker(InlineItemProcessorWorker):
44
44
  job_pool: JobPool,
45
45
  env: Environment,
46
46
  item_reader: ItemReader,
47
- parameters: Optional[Parameters],
48
- item_selector: Optional[ItemSelector],
47
+ parameters: Parameters | None,
48
+ item_selector: ItemSelector | None,
49
49
  map_run_record: MapRunRecord,
50
50
  ):
51
51
  super().__init__(
@@ -124,7 +124,7 @@ class DistributedItemProcessorWorker(InlineItemProcessorWorker):
124
124
  self._map_run_record.item_counter.running.offset(-1)
125
125
  job.job_output = job_output
126
126
 
127
- def _eval_pool(self, job: Optional[Job], worker_frame: Environment) -> None:
127
+ def _eval_pool(self, job: Job | None, worker_frame: Environment) -> None:
128
128
  if job is None:
129
129
  self._env.delete_frame(worker_frame)
130
130
  return
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Final, Optional
2
+ from typing import Final
3
3
 
4
4
  from localstack.services.stepfunctions.asl.component.common.parargs import Parameters
5
5
  from localstack.services.stepfunctions.asl.component.state.state_execution.state_map.item_selector import (
@@ -17,16 +17,16 @@ LOG = logging.getLogger(__name__)
17
17
 
18
18
 
19
19
  class InlineItemProcessorWorker(IterationWorker):
20
- _parameters: Final[Optional[Parameters]]
21
- _item_selector: Final[Optional[ItemSelector]]
20
+ _parameters: Final[Parameters | None]
21
+ _item_selector: Final[ItemSelector | None]
22
22
 
23
23
  def __init__(
24
24
  self,
25
25
  work_name: str,
26
26
  job_pool: JobPool,
27
27
  env: Environment,
28
- item_selector: Optional[ItemSelector],
29
- parameters: Optional[Parameters],
28
+ item_selector: ItemSelector | None,
29
+ parameters: Parameters | None,
30
30
  ):
31
31
  super().__init__(work_name=work_name, job_pool=job_pool, env=env)
32
32
  self._item_selector = item_selector
@@ -2,7 +2,7 @@ import abc
2
2
  import datetime
3
3
  import threading
4
4
  from collections import OrderedDict
5
- from typing import Final, Optional
5
+ from typing import Final
6
6
 
7
7
  from localstack.aws.api.stepfunctions import (
8
8
  Arn,
@@ -98,7 +98,7 @@ class MapRunRecord:
98
98
  item_counter: Final[ItemCounter]
99
99
  start_date: Timestamp
100
100
  status: MapRunStatus
101
- stop_date: Optional[Timestamp]
101
+ stop_date: Timestamp | None
102
102
  # TODO: add support for failure toleration fields.
103
103
  tolerated_failure_count: int
104
104
  tolerated_failure_percentage: float
@@ -110,7 +110,7 @@ class MapRunRecord:
110
110
  max_concurrency: int,
111
111
  tolerated_failure_count: int,
112
112
  tolerated_failure_percentage: float,
113
- label: Optional[str],
113
+ label: str | None,
114
114
  ):
115
115
  self.update_event = threading.Event()
116
116
  (
@@ -123,7 +123,7 @@ class MapRunRecord:
123
123
  self.max_concurrency = max_concurrency
124
124
  self.execution_counter = ExecutionCounter()
125
125
  self.item_counter = ItemCounter()
126
- self.start_date = datetime.datetime.now(tz=datetime.timezone.utc)
126
+ self.start_date = datetime.datetime.now(tz=datetime.UTC)
127
127
  self.status = MapRunStatus.RUNNING
128
128
  self.stop_date = None
129
129
  self.tolerated_failure_count = tolerated_failure_count
@@ -131,7 +131,7 @@ class MapRunRecord:
131
131
 
132
132
  @staticmethod
133
133
  def _generate_map_run_arns(
134
- state_machine_arn: Arn, label: Optional[str]
134
+ state_machine_arn: Arn, label: str | None
135
135
  ) -> tuple[LongArn, LongArn]:
136
136
  # Generate a new MapRunArn given the StateMachineArn, such that:
137
137
  # inp: arn:aws:states:<region>:111111111111:stateMachine:<ArnPart_0idx>
@@ -144,7 +144,7 @@ class MapRunRecord:
144
144
 
145
145
  def set_stop(self, status: MapRunStatus):
146
146
  self.status = status
147
- self.stop_date = datetime.datetime.now(tz=datetime.timezone.utc)
147
+ self.stop_date = datetime.datetime.now(tz=datetime.UTC)
148
148
 
149
149
  def describe(self) -> DescribeMapRunOutput:
150
150
  describe_output = DescribeMapRunOutput(
@@ -176,9 +176,9 @@ class MapRunRecord:
176
176
 
177
177
  def update(
178
178
  self,
179
- max_concurrency: Optional[int],
180
- tolerated_failure_count: Optional[int],
181
- tolerated_failure_percentage: Optional[float],
179
+ max_concurrency: int | None,
180
+ tolerated_failure_count: int | None,
181
+ tolerated_failure_percentage: float | None,
182
182
  ) -> None:
183
183
  if max_concurrency is not None:
184
184
  self.max_concurrency = max_concurrency
@@ -198,7 +198,7 @@ class MapRunRecordPoolManager:
198
198
  def add(self, map_run_record: MapRunRecord) -> None:
199
199
  self._pool[map_run_record.map_run_arn] = map_run_record
200
200
 
201
- def get(self, map_run_arn: LongArn) -> Optional[MapRunRecord]:
201
+ def get(self, map_run_arn: LongArn) -> MapRunRecord | None:
202
202
  return self._pool.get(map_run_arn)
203
203
 
204
204
  def get_all(self) -> list[MapRunRecord]:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import abc
4
- from typing import Final, Optional
4
+ from typing import Final
5
5
 
6
6
  from localstack.services.stepfunctions.asl.component.common.comment import Comment
7
7
  from localstack.services.stepfunctions.asl.component.common.flow.start_at import StartAt
@@ -18,14 +18,14 @@ class IterationComponent(EvalComponent, abc.ABC):
18
18
  _query_language: Final[QueryLanguage]
19
19
  _start_at: Final[StartAt]
20
20
  _states: Final[States]
21
- _comment: Final[Optional[Comment]]
21
+ _comment: Final[Comment | None]
22
22
 
23
23
  def __init__(
24
24
  self,
25
25
  query_language: QueryLanguage,
26
26
  start_at: StartAt,
27
27
  states: States,
28
- comment: Optional[Comment],
28
+ comment: Comment | None,
29
29
  ):
30
30
  self._query_language = query_language
31
31
  self._start_at = start_at
@@ -1,4 +1,4 @@
1
- from typing import Final, Optional
1
+ from typing import Final
2
2
 
3
3
  from localstack.services.stepfunctions.asl.component.common.comment import Comment
4
4
  from localstack.services.stepfunctions.asl.component.common.flow.start_at import StartAt
@@ -11,7 +11,7 @@ from localstack.services.stepfunctions.asl.component.state.state_execution.state
11
11
 
12
12
 
13
13
  class IterationDecl(Component):
14
- comment: Final[Optional[Comment]]
14
+ comment: Final[Comment | None]
15
15
  query_language: Final[QueryLanguage]
16
16
  start_at: Final[StartAt]
17
17
  states: Final[States]
@@ -19,7 +19,7 @@ class IterationDecl(Component):
19
19
 
20
20
  def __init__(
21
21
  self,
22
- comment: Optional[Comment],
22
+ comment: Comment | None,
23
23
  query_language: QueryLanguage,
24
24
  start_at: StartAt,
25
25
  states: States,
@@ -1,6 +1,6 @@
1
1
  import abc
2
2
  import logging
3
- from typing import Final, Optional
3
+ from typing import Final
4
4
 
5
5
  from localstack.aws.api.stepfunctions import HistoryEventType, MapIterationEventDetails
6
6
  from localstack.services.stepfunctions.asl.component.common.error_name.custom_error_name import (
@@ -169,7 +169,7 @@ class IterationWorker(abc.ABC):
169
169
  finally:
170
170
  job.job_output = job_output
171
171
 
172
- def _eval_pool(self, job: Optional[Job], worker_frame: Environment) -> None:
172
+ def _eval_pool(self, job: Job | None, worker_frame: Environment) -> None:
173
173
  # Note: the frame has to be closed before the job, to ensure the owner environment is correctly updated
174
174
  # before the evaluation continues; map states await for job termination not workers termination.
175
175
  if job is None: