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
@@ -4,7 +4,7 @@ import abc
4
4
  import datetime
5
5
  import json
6
6
  from collections import OrderedDict
7
- from typing import Final, Optional
7
+ from typing import Final
8
8
 
9
9
  from localstack.aws.api.stepfunctions import (
10
10
  Arn,
@@ -37,15 +37,15 @@ from localstack.utils.strings import long_uid
37
37
  class StateMachineInstance:
38
38
  name: Name
39
39
  arn: Arn
40
- revision_id: Optional[RevisionId]
40
+ revision_id: RevisionId | None
41
41
  definition: Definition
42
42
  role_arn: Arn
43
43
  create_date: datetime.datetime
44
44
  sm_type: StateMachineType
45
45
  logging_config: LoggingConfiguration
46
- cloud_watch_logging_configuration: Optional[CloudWatchLoggingConfiguration]
47
- tags: Optional[TagList]
48
- tracing_config: Optional[TracingConfiguration]
46
+ cloud_watch_logging_configuration: CloudWatchLoggingConfiguration | None
47
+ tags: TagList | None
48
+ tracing_config: TracingConfiguration | None
49
49
 
50
50
  def __init__(
51
51
  self,
@@ -54,18 +54,18 @@ class StateMachineInstance:
54
54
  definition: Definition,
55
55
  role_arn: Arn,
56
56
  logging_config: LoggingConfiguration,
57
- cloud_watch_logging_configuration: Optional[CloudWatchLoggingConfiguration] = None,
58
- create_date: Optional[datetime.datetime] = None,
59
- sm_type: Optional[StateMachineType] = None,
60
- tags: Optional[TagList] = None,
61
- tracing_config: Optional[TracingConfiguration] = None,
57
+ cloud_watch_logging_configuration: CloudWatchLoggingConfiguration | None = None,
58
+ create_date: datetime.datetime | None = None,
59
+ sm_type: StateMachineType | None = None,
60
+ tags: TagList | None = None,
61
+ tracing_config: TracingConfiguration | None = None,
62
62
  ):
63
63
  self.name = name
64
64
  self.arn = arn
65
65
  self.revision_id = None
66
66
  self.definition = definition
67
67
  self.role_arn = role_arn
68
- self.create_date = create_date or datetime.datetime.now(tz=datetime.timezone.utc)
68
+ self.create_date = create_date or datetime.datetime.now(tz=datetime.UTC)
69
69
  self.sm_type = sm_type or StateMachineType.STANDARD
70
70
  self.logging_config = logging_config
71
71
  self.cloud_watch_logging_configuration = cloud_watch_logging_configuration
@@ -106,7 +106,7 @@ class TestStateMachine(StateMachineInstance):
106
106
  arn: Arn,
107
107
  definition: Definition,
108
108
  role_arn: Arn,
109
- create_date: Optional[datetime.datetime] = None,
109
+ create_date: datetime.datetime | None = None,
110
110
  ):
111
111
  super().__init__(
112
112
  name,
@@ -125,7 +125,7 @@ class TestStateMachine(StateMachineInstance):
125
125
 
126
126
 
127
127
  class TagManager:
128
- _tags: Final[dict[str, Optional[str]]]
128
+ _tags: Final[dict[str, str | None]]
129
129
 
130
130
  def __init__(self):
131
131
  self._tags = OrderedDict()
@@ -154,7 +154,7 @@ class TagManager:
154
154
  self._tags.pop(key, None)
155
155
 
156
156
  def to_tag_list(self) -> TagList:
157
- tag_list = list()
157
+ tag_list = []
158
158
  for key, value in self._tags.items():
159
159
  tag_list.append(Tag(key=key, value=value))
160
160
  return tag_list
@@ -173,11 +173,11 @@ class StateMachineRevision(StateMachineInstance):
173
173
  definition: Definition,
174
174
  role_arn: Arn,
175
175
  logging_config: LoggingConfiguration,
176
- cloud_watch_logging_configuration: Optional[CloudWatchLoggingConfiguration],
177
- create_date: Optional[datetime.datetime] = None,
178
- sm_type: Optional[StateMachineType] = None,
179
- tags: Optional[TagList] = None,
180
- tracing_config: Optional[TracingConfiguration] = None,
176
+ cloud_watch_logging_configuration: CloudWatchLoggingConfiguration | None,
177
+ create_date: datetime.datetime | None = None,
178
+ sm_type: StateMachineType | None = None,
179
+ tags: TagList | None = None,
180
+ tracing_config: TracingConfiguration | None = None,
181
181
  ):
182
182
  super().__init__(
183
183
  name,
@@ -191,7 +191,7 @@ class StateMachineRevision(StateMachineInstance):
191
191
  tags,
192
192
  tracing_config,
193
193
  )
194
- self.versions = dict()
194
+ self.versions = {}
195
195
  self._version_number = 0
196
196
  self.tag_manager = TagManager()
197
197
  if tags:
@@ -200,10 +200,10 @@ class StateMachineRevision(StateMachineInstance):
200
200
 
201
201
  def create_revision(
202
202
  self,
203
- definition: Optional[str],
204
- role_arn: Optional[Arn],
205
- logging_configuration: Optional[LoggingConfiguration],
206
- ) -> Optional[RevisionId]:
203
+ definition: str | None,
204
+ role_arn: Arn | None,
205
+ logging_configuration: LoggingConfiguration | None,
206
+ ) -> RevisionId | None:
207
207
  update_definition = definition and json.loads(definition) != json.loads(self.definition)
208
208
  if update_definition:
209
209
  self.definition = definition
@@ -228,7 +228,7 @@ class StateMachineRevision(StateMachineInstance):
228
228
 
229
229
  return self.revision_id
230
230
 
231
- def create_version(self, description: Optional[str]) -> Optional[StateMachineVersion]:
231
+ def create_version(self, description: str | None) -> StateMachineVersion | None:
232
232
  if self.revision_id not in self.versions:
233
233
  self._version_number += 1
234
234
  version = StateMachineVersion(
@@ -259,10 +259,10 @@ class StateMachineRevision(StateMachineInstance):
259
259
  class StateMachineVersion(StateMachineInstance):
260
260
  source_arn: Arn
261
261
  version: int
262
- description: Optional[str]
262
+ description: str | None
263
263
 
264
264
  def __init__(
265
- self, state_machine_revision: StateMachineRevision, version: int, description: Optional[str]
265
+ self, state_machine_revision: StateMachineRevision, version: int, description: str | None
266
266
  ):
267
267
  version_arn = f"{state_machine_revision.arn}:{version}"
268
268
  super().__init__(
@@ -270,7 +270,7 @@ class StateMachineVersion(StateMachineInstance):
270
270
  arn=version_arn,
271
271
  definition=state_machine_revision.definition,
272
272
  role_arn=state_machine_revision.role_arn,
273
- create_date=datetime.datetime.now(tz=datetime.timezone.utc),
273
+ create_date=datetime.datetime.now(tz=datetime.UTC),
274
274
  sm_type=state_machine_revision.sm_type,
275
275
  logging_config=state_machine_revision.logging_config,
276
276
  cloud_watch_logging_configuration=state_machine_revision.cloud_watch_logging_configuration,
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import threading
5
- from typing import Optional
6
5
 
7
6
  from localstack.aws.api.stepfunctions import (
8
7
  Arn,
@@ -37,8 +36,8 @@ LOG = logging.getLogger(__name__)
37
36
 
38
37
 
39
38
  class TestStateExecution(Execution):
40
- exec_worker: Optional[TestStateExecutionWorker]
41
- next_state: Optional[str]
39
+ exec_worker: TestStateExecutionWorker | None
40
+ next_state: str | None
42
41
 
43
42
  class TestCaseExecutionWorkerCommunication(BaseExecutionWorkerCommunication):
44
43
  _execution: TestStateExecution
@@ -62,7 +61,7 @@ class TestStateExecution(Execution):
62
61
  state_machine: StateMachineInstance,
63
62
  start_date: Timestamp,
64
63
  activity_store: dict[Arn, Activity],
65
- input_data: Optional[dict] = None,
64
+ input_data: dict | None = None,
66
65
  ):
67
66
  super().__init__(
68
67
  name=name,
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from localstack.services.stepfunctions.asl.component.eval_component import EvalComponent
4
2
  from localstack.services.stepfunctions.asl.eval.environment import Environment
5
3
  from localstack.services.stepfunctions.asl.eval.event.event_manager import (
@@ -18,7 +16,7 @@ from localstack.services.stepfunctions.backend.execution_worker import SyncExecu
18
16
 
19
17
 
20
18
  class TestStateExecutionWorker(SyncExecutionWorker):
21
- env: Optional[TestStateEnvironment]
19
+ env: TestStateEnvironment | None
22
20
 
23
21
  def _get_evaluation_entrypoint(self) -> EvalComponent:
24
22
  return TestStateAmazonStateLanguageParser.parse(
@@ -1,5 +1,5 @@
1
1
  import abc
2
- from typing import Any, Final, Optional
2
+ from typing import Any, Final
3
3
 
4
4
  from localstack.services.stepfunctions.mocking.mock_config_file import (
5
5
  RawMockConfig,
@@ -56,7 +56,7 @@ class StateMockedResponses:
56
56
  ):
57
57
  self.state_name = state_name
58
58
  self.mocked_response_name = mocked_response_name
59
- self.mocked_responses = list()
59
+ self.mocked_responses = []
60
60
  last_range_end: int = -1
61
61
  mocked_responses_sorted = sorted(mocked_responses, key=lambda mr: mr.range_start)
62
62
  for mocked_response in mocked_responses_sorted:
@@ -87,7 +87,7 @@ class MockTestCase:
87
87
  ):
88
88
  self.state_machine_name = state_machine_name
89
89
  self.test_case_name = test_case_name
90
- self.state_mocked_responses = dict()
90
+ self.state_mocked_responses = {}
91
91
  for state_mocked_response in state_mocked_responses_list:
92
92
  state_name = state_mocked_response.state_name
93
93
  if state_name in self.state_mocked_responses:
@@ -144,14 +144,14 @@ def _mocked_response_from_raw(
144
144
  def _mocked_responses_from_raw(
145
145
  mocked_response_name: str, raw_mock_config: RawMockConfig
146
146
  ) -> list[MockedResponse]:
147
- raw_response_models: Optional[dict[str, RawResponseModel]] = (
148
- raw_mock_config.MockedResponses.get(mocked_response_name)
147
+ raw_response_models: dict[str, RawResponseModel] | None = raw_mock_config.MockedResponses.get(
148
+ mocked_response_name
149
149
  )
150
150
  if not raw_response_models:
151
151
  raise RuntimeError(
152
152
  f"No definitions for mocked response '{mocked_response_name}' in the mock configuration file."
153
153
  )
154
- mocked_responses: list[MockedResponse] = list()
154
+ mocked_responses: list[MockedResponse] = []
155
155
  for raw_response_model_range, raw_response_model in raw_response_models.items():
156
156
  mocked_response: MockedResponse = _mocked_response_from_raw(
157
157
  raw_response_model_range=raw_response_model_range, raw_response_model=raw_response_model
@@ -187,7 +187,7 @@ def _mock_test_case_from_raw(
187
187
  f"No definitions for test case '{test_case_name}' and "
188
188
  f"state machine '{state_machine_name}' in the mock configuration file."
189
189
  )
190
- state_mocked_responses_list: list[StateMockedResponses] = list()
190
+ state_mocked_responses_list: list[StateMockedResponses] = []
191
191
  for state_name, mocked_response_name in test_case.root.items():
192
192
  state_mocked_responses = _state_mocked_responses_from_raw(
193
193
  state_name=state_name,
@@ -202,8 +202,8 @@ def _mock_test_case_from_raw(
202
202
  )
203
203
 
204
204
 
205
- def load_mock_test_case_for(state_machine_name: str, test_case_name: str) -> Optional[MockTestCase]:
206
- raw_mock_config: Optional[RawMockConfig] = _load_sfn_raw_mock_config()
205
+ def load_mock_test_case_for(state_machine_name: str, test_case_name: str) -> MockTestCase | None:
206
+ raw_mock_config: RawMockConfig | None = _load_sfn_raw_mock_config()
207
207
  if raw_mock_config is None:
208
208
  return None
209
209
  mock_test_case: MockTestCase = _mock_test_case_from_raw(
@@ -2,7 +2,7 @@ import logging
2
2
  import os
3
3
  from functools import lru_cache
4
4
  from json import JSONDecodeError
5
- from typing import Any, Dict, Final, Optional
5
+ from typing import Any, Final, Optional
6
6
 
7
7
  from pydantic import BaseModel, RootModel, ValidationError, model_validator
8
8
 
@@ -44,8 +44,8 @@ class RawResponseModel(BaseModel):
44
44
 
45
45
  model_config = {"frozen": True}
46
46
 
47
- Return: Optional[RawReturnResponse] = None
48
- Throw: Optional[RawThrowResponse] = None
47
+ Return: RawReturnResponse | None = None
48
+ Throw: RawThrowResponse | None = None
49
49
 
50
50
  @model_validator(mode="before")
51
51
  def validate_response(cls, data: dict) -> dict:
@@ -56,7 +56,7 @@ class RawResponseModel(BaseModel):
56
56
  return data
57
57
 
58
58
 
59
- class RawTestCase(RootModel[Dict[str, str]]):
59
+ class RawTestCase(RootModel[dict[str, str]]):
60
60
  """
61
61
  Represents an individual test case.
62
62
  The keys are state names (e.g., 'LambdaState', 'SQSState')
@@ -73,7 +73,7 @@ class RawStateMachine(BaseModel):
73
73
 
74
74
  model_config = {"frozen": True}
75
75
 
76
- TestCases: Dict[str, RawTestCase]
76
+ TestCases: dict[str, RawTestCase]
77
77
 
78
78
 
79
79
  class RawMockConfig(BaseModel):
@@ -86,8 +86,8 @@ class RawMockConfig(BaseModel):
86
86
 
87
87
  model_config = {"frozen": True}
88
88
 
89
- StateMachines: Dict[str, RawStateMachine]
90
- MockedResponses: Dict[str, Dict[str, RawResponseModel]]
89
+ StateMachines: dict[str, RawStateMachine]
90
+ MockedResponses: dict[str, dict[str, RawResponseModel]]
91
91
 
92
92
 
93
93
  @lru_cache(maxsize=1)
@@ -119,11 +119,11 @@ def _read_sfn_raw_mock_config(file_path: str, modified_epoch: int) -> Optional[R
119
119
  - Logging is used to capture warnings if file access or parsing fails.
120
120
  """
121
121
  try:
122
- with open(file_path, "r") as df:
122
+ with open(file_path) as df:
123
123
  mock_config_str = df.read()
124
124
  mock_config: RawMockConfig = RawMockConfig.model_validate_json(mock_config_str)
125
125
  return mock_config
126
- except (OSError, IOError) as file_error:
126
+ except OSError as file_error:
127
127
  LOG.error("Failed to open mock configuration file '%s'. Error: %s", file_path, file_error)
128
128
  return None
129
129
  except ValidationError as validation_error:
@@ -168,7 +168,7 @@ def _read_sfn_raw_mock_config(file_path: str, modified_epoch: int) -> Optional[R
168
168
  return None
169
169
 
170
170
 
171
- def _load_sfn_raw_mock_config() -> Optional[RawMockConfig]:
171
+ def _load_sfn_raw_mock_config() -> RawMockConfig | None:
172
172
  configuration_file_path = config.SFN_MOCK_CONFIG
173
173
  if not configuration_file_path:
174
174
  return None
@@ -1,6 +1,6 @@
1
- from localstack.packages import Package, PackageInstaller
1
+ from localstack.packages import InstallTarget, Package, PackageInstaller
2
2
  from localstack.packages.core import MavenPackageInstaller
3
- from localstack.packages.java import JavaInstallerMixin
3
+ from localstack.packages.java import JavaInstallerMixin, java_package
4
4
 
5
5
  JSONATA_DEFAULT_VERSION = "0.9.7"
6
6
  JACKSON_DEFAULT_VERSION = "2.16.2"
@@ -12,9 +12,6 @@ class JSONataPackage(Package):
12
12
  def __init__(self):
13
13
  super().__init__("JSONataLibs", JSONATA_DEFAULT_VERSION)
14
14
 
15
- # Match the dynamodb-local JRE version to reduce the LocalStack image size by sharing the same JRE version
16
- self.java_version = "21"
17
-
18
15
  def get_versions(self) -> list[str]:
19
16
  return list(JSONATA_JACKSON_VERSION_STORE.keys())
20
17
 
@@ -25,6 +22,10 @@ class JSONataPackage(Package):
25
22
  class JSONataPackageInstaller(JavaInstallerMixin, MavenPackageInstaller):
26
23
  def __init__(self, version: str):
27
24
  jackson_version = JSONATA_JACKSON_VERSION_STORE[version]
25
+
26
+ # Match the dynamodb-local JRE version to reduce the LocalStack image size by sharing the same JRE version
27
+ self.java_version = "21"
28
+
28
29
  super().__init__(
29
30
  f"pkg:maven/com.dashjoin/jsonata@{version}",
30
31
  # jackson-databind is imported in jsonata.py as "from com.fasterxml.jackson.databind import ObjectMapper"
@@ -35,5 +36,13 @@ class JSONataPackageInstaller(JavaInstallerMixin, MavenPackageInstaller):
35
36
  f"pkg:maven/com.fasterxml.jackson.core/jackson-databind@{jackson_version}",
36
37
  )
37
38
 
39
+ def _prepare_installation(self, target: InstallTarget) -> None:
40
+ # override to install correct java version
41
+ java_package.get_installer(self.java_version).install(target)
42
+
43
+ def get_java_home(self) -> str | None:
44
+ """Override to use the specific Java version"""
45
+ return java_package.get_installer(self.java_version).get_java_home()
46
+
38
47
 
39
48
  jpype_jsonata_package = JSONataPackage()
@@ -4,7 +4,7 @@ import json
4
4
  import logging
5
5
  import re
6
6
  import time
7
- from typing import Final, Optional
7
+ from typing import Final
8
8
 
9
9
  from localstack.aws.api import CommonServiceException, RequestContext
10
10
  from localstack.aws.api.stepfunctions import (
@@ -275,7 +275,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
275
275
  )
276
276
 
277
277
  def _get_execution(self, context: RequestContext, execution_arn: Arn) -> Execution:
278
- execution: Optional[Execution] = self.get_store(context).executions.get(execution_arn)
278
+ execution: Execution | None = self.get_store(context).executions.get(execution_arn)
279
279
  if not execution:
280
280
  raise ExecutionDoesNotExist(f"Execution Does Not Exist: '{execution_arn}'")
281
281
  return execution
@@ -283,7 +283,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
283
283
  def _get_executions(
284
284
  self,
285
285
  context: RequestContext,
286
- execution_status: Optional[ExecutionStatus] = None,
286
+ execution_status: ExecutionStatus | None = None,
287
287
  ):
288
288
  store = self.get_store(context)
289
289
  execution: list[Execution] = list(store.executions.values())
@@ -297,9 +297,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
297
297
  return execution
298
298
 
299
299
  def _get_activity(self, context: RequestContext, activity_arn: Arn) -> Activity:
300
- maybe_activity: Optional[Activity] = self.get_store(context).activities.get(
301
- activity_arn, None
302
- )
300
+ maybe_activity: Activity | None = self.get_store(context).activities.get(activity_arn, None)
303
301
  if maybe_activity is None:
304
302
  raise ActivityDoesNotExist(f"Activity Does Not Exist: '{activity_arn}'")
305
303
  return maybe_activity
@@ -312,7 +310,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
312
310
  state_machine_type: StateMachineType,
313
311
  logging_configuration: LoggingConfiguration,
314
312
  tracing_configuration: TracingConfiguration,
315
- ) -> Optional[StateMachineRevision]:
313
+ ) -> StateMachineRevision | None:
316
314
  # CreateStateMachine's idempotency check is based on the state machine name, definition, type,
317
315
  # LoggingConfiguration and TracingConfiguration.
318
316
  # If a following request has a different roleArn or tags, Step Functions will ignore these differences and
@@ -338,11 +336,11 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
338
336
 
339
337
  def _idempotent_start_execution(
340
338
  self,
341
- execution: Optional[Execution],
339
+ execution: Execution | None,
342
340
  state_machine: StateMachineInstance,
343
341
  name: Name,
344
342
  input_data: SensitiveData,
345
- ) -> Optional[Execution]:
343
+ ) -> Execution | None:
346
344
  # StartExecution is idempotent for STANDARD workflows. For a STANDARD workflow,
347
345
  # if you call StartExecution with the same name and input as a running execution,
348
346
  # the call succeeds and return the same response as the original request.
@@ -366,9 +364,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
366
364
  message=f"Execution Already Exists: '{execution.exec_arn}'",
367
365
  )
368
366
 
369
- def _revision_by_name(
370
- self, context: RequestContext, name: str
371
- ) -> Optional[StateMachineInstance]:
367
+ def _revision_by_name(self, context: RequestContext, name: str) -> StateMachineInstance | None:
372
368
  state_machines: list[StateMachineInstance] = list(
373
369
  self.get_store(context).state_machines.values()
374
370
  )
@@ -445,7 +441,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
445
441
 
446
442
  # CreateStateMachine is an idempotent API. Subsequent requests won't create a duplicate resource if it was
447
443
  # already created.
448
- idem_state_machine: Optional[StateMachineRevision] = self._idempotent_revision(
444
+ idem_state_machine: StateMachineRevision | None = self._idempotent_revision(
449
445
  context=context,
450
446
  name=state_machine_name,
451
447
  definition=state_machine_definition,
@@ -460,7 +456,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
460
456
  )
461
457
 
462
458
  # Assert this state machine name is unique.
463
- state_machine_with_name: Optional[StateMachineRevision] = self._revision_by_name(
459
+ state_machine_with_name: StateMachineRevision | None = self._revision_by_name(
464
460
  context=context, name=state_machine_name
465
461
  )
466
462
  if state_machine_with_name is not None:
@@ -690,9 +686,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
690
686
  self, context: RequestContext, state_machine_alias_arn: Arn, **kwargs
691
687
  ) -> DescribeStateMachineAliasOutput:
692
688
  self._validate_state_machine_alias_arn(state_machine_alias_arn=state_machine_alias_arn)
693
- alias: Optional[Alias] = self.get_store(context=context).aliases.get(
694
- state_machine_alias_arn
695
- )
689
+ alias: Alias | None = self.get_store(context=context).aliases.get(state_machine_alias_arn)
696
690
  if alias is None:
697
691
  # TODO: assemble the correct exception
698
692
  raise ValidationException()
@@ -778,9 +772,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
778
772
  return state_machine_arn.split("#")[0]
779
773
 
780
774
  @staticmethod
781
- def _get_mock_test_case(
782
- state_machine_arn: str, state_machine_name: str
783
- ) -> Optional[MockTestCase]:
775
+ def _get_mock_test_case(state_machine_arn: str, state_machine_name: str) -> MockTestCase | None:
784
776
  """Extract and load a mock test case from a state machine ARN if present."""
785
777
  parts = state_machine_arn.split("#")
786
778
  if len(parts) != 2:
@@ -813,9 +805,9 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
813
805
  base_arn = self._get_state_machine_arn(state_machine_arn)
814
806
  store = self.get_store(context=context)
815
807
 
816
- alias: Optional[Alias] = store.aliases.get(base_arn)
808
+ alias: Alias | None = store.aliases.get(base_arn)
817
809
  alias_sample_state_machine_version_arn = alias.sample() if alias is not None else None
818
- unsafe_state_machine: Optional[StateMachineInstance] = store.state_machines.get(
810
+ unsafe_state_machine: StateMachineInstance | None = store.state_machines.get(
819
811
  alias_sample_state_machine_version_arn or base_arn
820
812
  )
821
813
  if not unsafe_state_machine:
@@ -825,7 +817,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
825
817
  state_machine_clone = copy.deepcopy(unsafe_state_machine)
826
818
 
827
819
  if input is None:
828
- input_data = dict()
820
+ input_data = {}
829
821
  else:
830
822
  try:
831
823
  input_data = json.loads(input)
@@ -875,7 +867,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
875
867
  region_name=context.region,
876
868
  state_machine=state_machine_clone,
877
869
  state_machine_alias_arn=alias.state_machine_alias_arn if alias is not None else None,
878
- start_date=datetime.datetime.now(tz=datetime.timezone.utc),
870
+ start_date=datetime.datetime.now(tz=datetime.UTC),
879
871
  cloud_watch_logging_session=cloud_watch_logging_session,
880
872
  input_data=input_data,
881
873
  trace_header=trace_header,
@@ -901,7 +893,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
901
893
  self._validate_state_machine_arn(state_machine_arn)
902
894
 
903
895
  base_arn = self._get_state_machine_arn(state_machine_arn)
904
- unsafe_state_machine: Optional[StateMachineInstance] = self.get_store(
896
+ unsafe_state_machine: StateMachineInstance | None = self.get_store(
905
897
  context
906
898
  ).state_machines.get(base_arn)
907
899
  if not unsafe_state_machine:
@@ -914,7 +906,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
914
906
  state_machine_clone = copy.deepcopy(unsafe_state_machine)
915
907
 
916
908
  if input is None:
917
- input_data = dict()
909
+ input_data = {}
918
910
  else:
919
911
  try:
920
912
  input_data = json.loads(input)
@@ -950,7 +942,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
950
942
  account_id=context.account_id,
951
943
  region_name=context.region,
952
944
  state_machine=state_machine_clone,
953
- start_date=datetime.datetime.now(tz=datetime.timezone.utc),
945
+ start_date=datetime.datetime.now(tz=datetime.UTC),
954
946
  cloud_watch_logging_session=cloud_watch_logging_session,
955
947
  input_data=input_data,
956
948
  trace_header=trace_header,
@@ -980,7 +972,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
980
972
 
981
973
  @staticmethod
982
974
  def _list_execution_filter(
983
- ex: Execution, state_machine_arn: str, status_filter: Optional[str]
975
+ ex: Execution, state_machine_arn: str, status_filter: str | None
984
976
  ) -> bool:
985
977
  state_machine_reference_arn_set = {ex.state_machine_arn, ex.state_machine_version_arn}
986
978
  if state_machine_arn not in state_machine_reference_arn_set:
@@ -1105,7 +1097,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1105
1097
  if not isinstance(state_machine_revision, StateMachineRevision):
1106
1098
  raise InvalidArn(f"Invalid arn: {state_machine_arn}")
1107
1099
 
1108
- state_machine_aliases: StateMachineAliasList = list()
1100
+ state_machine_aliases: StateMachineAliasList = []
1109
1101
  valid_token_found = next_token is None
1110
1102
 
1111
1103
  for alias in state_machine_revision.aliases:
@@ -1149,7 +1141,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1149
1141
  if not isinstance(state_machine_revision, StateMachineRevision):
1150
1142
  raise InvalidArn(f"Invalid arn: {state_machine_arn}")
1151
1143
 
1152
- state_machine_version_items = list()
1144
+ state_machine_version_items = []
1153
1145
  for version_arn in state_machine_revision.versions.values():
1154
1146
  state_machine_version = state_machines[version_arn]
1155
1147
  if isinstance(state_machine_version, StateMachineVersion):
@@ -1245,7 +1237,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1245
1237
  if (
1246
1238
  state_machine_revision := state_machines.get(state_machine_version.source_arn)
1247
1239
  ) and isinstance(state_machine_revision, StateMachineRevision):
1248
- referencing_alias_names: list[str] = list()
1240
+ referencing_alias_names: list[str] = []
1249
1241
  for alias in state_machine_revision.aliases:
1250
1242
  if alias.is_router_for(state_machine_version_arn=state_machine_version_arn):
1251
1243
  referencing_alias_names.append(alias.name)
@@ -1275,7 +1267,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1275
1267
  if execution.sm_type != StateMachineType.STANDARD:
1276
1268
  self._raise_resource_type_not_in_context(resource_type=execution.sm_type)
1277
1269
 
1278
- stop_date = datetime.datetime.now(tz=datetime.timezone.utc)
1270
+ stop_date = datetime.datetime.now(tz=datetime.UTC)
1279
1271
  execution.stop(stop_date=stop_date, cause=cause, error=error)
1280
1272
  return StopExecutionOutput(stopDate=stop_date)
1281
1273
 
@@ -1328,9 +1320,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1328
1320
  target_revision_id = revision_id or state_machine.revision_id
1329
1321
  version_arn = state_machine.versions[target_revision_id]
1330
1322
 
1331
- update_output = UpdateStateMachineOutput(
1332
- updateDate=datetime.datetime.now(tz=datetime.timezone.utc)
1333
- )
1323
+ update_output = UpdateStateMachineOutput(updateDate=datetime.datetime.now(tz=datetime.UTC))
1334
1324
  if revision_id is not None:
1335
1325
  update_output["revisionId"] = revision_id
1336
1326
  if version_arn is not None:
@@ -1437,7 +1427,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1437
1427
  ) -> DescribeMapRunOutput:
1438
1428
  store = self.get_store(context)
1439
1429
  for execution in store.executions.values():
1440
- map_run_record: Optional[MapRunRecord] = (
1430
+ map_run_record: MapRunRecord | None = (
1441
1431
  execution.exec_worker.env.map_run_record_pool_manager.get(map_run_arn)
1442
1432
  )
1443
1433
  if map_run_record is not None:
@@ -1477,7 +1467,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1477
1467
  # TODO: investigate behaviour of empty requests.
1478
1468
  store = self.get_store(context)
1479
1469
  for execution in store.executions.values():
1480
- map_run_record: Optional[MapRunRecord] = (
1470
+ map_run_record: MapRunRecord | None = (
1481
1471
  execution.exec_worker.env.map_run_record_pool_manager.get(map_run_arn)
1482
1472
  )
1483
1473
  if map_run_record is not None:
@@ -1507,7 +1497,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1507
1497
  definition=definition, static_analysers=[TestStateStaticAnalyser()]
1508
1498
  )
1509
1499
 
1510
- name: Optional[Name] = f"TestState-{short_uid()}"
1500
+ name: Name | None = f"TestState-{short_uid()}"
1511
1501
  arn = stepfunctions_state_machine_arn(
1512
1502
  name=name, account_id=context.account_id, region_name=context.region
1513
1503
  )
@@ -1527,7 +1517,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1527
1517
  account_id=context.account_id,
1528
1518
  region_name=context.region,
1529
1519
  state_machine=state_machine,
1530
- start_date=datetime.datetime.now(tz=datetime.timezone.utc),
1520
+ start_date=datetime.datetime.now(tz=datetime.UTC),
1531
1521
  input_data=input_json,
1532
1522
  activity_store=self.get_store(context).activities,
1533
1523
  )
@@ -1591,7 +1581,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1591
1581
  self,
1592
1582
  context: RequestContext,
1593
1583
  task_token: TaskToken,
1594
- worker_name: Optional[Name],
1584
+ worker_name: Name | None,
1595
1585
  ) -> None:
1596
1586
  executions: list[Execution] = self._get_executions(context)
1597
1587
  for execution in executions:
@@ -1604,7 +1594,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1604
1594
  raise InvalidToken()
1605
1595
 
1606
1596
  @staticmethod
1607
- def _pull_activity_task(activity: Activity) -> Optional[ActivityTask]:
1597
+ def _pull_activity_task(activity: Activity) -> ActivityTask | None:
1608
1598
  seconds_left = 60
1609
1599
  while seconds_left > 0:
1610
1600
  try:
@@ -1624,7 +1614,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1624
1614
  self._validate_activity_arn(activity_arn)
1625
1615
 
1626
1616
  activity = self._get_activity(context=context, activity_arn=activity_arn)
1627
- maybe_task: Optional[ActivityTask] = self._pull_activity_task(activity=activity)
1617
+ maybe_task: ActivityTask | None = self._pull_activity_task(activity=activity)
1628
1618
  if maybe_task is not None:
1629
1619
  self._send_activity_task_started(
1630
1620
  context, maybe_task.task_token, worker_name=worker_name
@@ -1645,13 +1635,13 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
1645
1635
  state_machine_type: StateMachineType = request.get("type", StateMachineType.STANDARD)
1646
1636
  definition: str = request["definition"]
1647
1637
 
1648
- static_analysers = list()
1638
+ static_analysers = []
1649
1639
  if state_machine_type == StateMachineType.STANDARD:
1650
1640
  static_analysers.append(StaticAnalyser())
1651
1641
  else:
1652
1642
  static_analysers.append(ExpressStaticAnalyser())
1653
1643
 
1654
- diagnostics: ValidateStateMachineDefinitionDiagnosticList = list()
1644
+ diagnostics: ValidateStateMachineDefinitionDiagnosticList = []
1655
1645
  try:
1656
1646
  StepFunctionsProvider._validate_definition(
1657
1647
  definition=definition, static_analysers=static_analysers