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
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from localstack.services.stepfunctions.asl.component.common.error_name.failure_event import (
4
2
  FailureEventException,
5
3
  )
@@ -35,9 +33,9 @@ class DistributedIteratorWorker(InlineIteratorWorker):
35
33
  work_name: str,
36
34
  job_pool: JobPool,
37
35
  env: Environment,
38
- parameters: Optional[Parameters],
36
+ parameters: Parameters | None,
39
37
  map_run_record: MapRunRecord,
40
- item_selector: Optional[ItemSelector],
38
+ item_selector: ItemSelector | None,
41
39
  ):
42
40
  super().__init__(
43
41
  work_name=work_name,
@@ -99,7 +97,7 @@ class DistributedIteratorWorker(InlineIteratorWorker):
99
97
  self._map_run_record.item_counter.running.offset(-1)
100
98
  job.job_output = job_output
101
99
 
102
- def _eval_pool(self, job: Optional[Job], worker_frame: Environment) -> None:
100
+ def _eval_pool(self, job: Job | None, worker_frame: Environment) -> None:
103
101
  # Note: the frame has to be closed before the job, to ensure the owner environment is correctly updated
104
102
  # before the evaluation continues; map states await for job termination not workers termination.
105
103
  if job is None:
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import Optional
5
4
 
6
5
  from localstack.services.stepfunctions.asl.component.state.state_execution.state_map.iteration.inline_iteration_component import (
7
6
  InlineIterationComponent,
@@ -26,7 +25,7 @@ class InlineIteratorEvalInput(InlineIterationComponentEvalInput):
26
25
 
27
26
 
28
27
  class InlineIterator(InlineIterationComponent):
29
- _eval_input: Optional[InlineIteratorEvalInput]
28
+ _eval_input: InlineIteratorEvalInput | None
30
29
 
31
30
  def _create_worker(
32
31
  self, env: Environment, eval_input: InlineIteratorEvalInput, job_pool: JobPool
@@ -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 InlineIteratorWorker(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
@@ -1,7 +1,7 @@
1
1
  import copy
2
2
  import logging
3
3
  import threading
4
- from typing import Any, Final, Optional
4
+ from typing import Any, Final
5
5
 
6
6
  from localstack.services.stepfunctions.asl.component.program.program import Program
7
7
  from localstack.services.stepfunctions.asl.utils.encoding import to_json_str
@@ -12,10 +12,10 @@ LOG = logging.getLogger(__name__)
12
12
  class Job:
13
13
  job_index: Final[int]
14
14
  job_program: Final[Program]
15
- job_input: Final[Optional[Any]]
16
- job_output: Optional[Any]
15
+ job_input: Final[Any | None]
16
+ job_output: Any | None
17
17
 
18
- def __init__(self, job_index: int, job_program: Program, job_input: Optional[Any]):
18
+ def __init__(self, job_index: int, job_program: Program, job_input: Any | None):
19
19
  self.job_index = job_index
20
20
  self.job_program = job_program
21
21
  self.job_input = job_input
@@ -24,9 +24,9 @@ class Job:
24
24
 
25
25
  class JobClosed:
26
26
  job_index: Final[int]
27
- job_output: Optional[Any]
27
+ job_output: Any | None
28
28
 
29
- def __init__(self, job_index: int, job_output: Optional[Any]):
29
+ def __init__(self, job_index: int, job_output: Any | None):
30
30
  self.job_index = job_index
31
31
  self.job_output = job_output
32
32
 
@@ -37,7 +37,7 @@ class JobClosed:
37
37
  class JobPool:
38
38
  _mutex: Final[threading.Lock]
39
39
  _termination_event: Final[threading.Event]
40
- _worker_exception: Optional[Exception]
40
+ _worker_exception: Exception | None
41
41
 
42
42
  _jobs_number: Final[int]
43
43
  _open_jobs: Final[list[Job]]
@@ -56,7 +56,7 @@ class JobPool:
56
56
  self._open_jobs.reverse()
57
57
  self._closed_jobs = set()
58
58
 
59
- def next_job(self) -> Optional[Any]:
59
+ def next_job(self) -> Any | None:
60
60
  with self._mutex:
61
61
  if self._worker_exception is not None:
62
62
  return None
@@ -72,7 +72,7 @@ class JobPool:
72
72
  if self._is_terminated():
73
73
  self._termination_event.set()
74
74
 
75
- def get_worker_exception(self) -> Optional[Exception]:
75
+ def get_worker_exception(self) -> Exception | None:
76
76
  return self._worker_exception
77
77
 
78
78
  def close_job(self, job: Job) -> None:
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import json
4
- from typing import Callable, Final
4
+ from collections.abc import Callable
5
+ from typing import Final
5
6
 
6
7
  from localstack.services.stepfunctions.asl.component.state.state_execution.state_map.result_writer.resource_eval.resource_eval import (
7
8
  ResourceEval,
@@ -1,5 +1,4 @@
1
1
  import copy
2
- from typing import Optional
3
2
 
4
3
  from localstack.aws.api.stepfunctions import (
5
4
  EvaluationFailedEventDetails,
@@ -99,30 +98,30 @@ from localstack.services.stepfunctions.asl.eval.event.event_detail import EventD
99
98
 
100
99
 
101
100
  class StateMap(ExecutionState):
102
- items: Optional[Items]
103
- items_path: Optional[ItemsPath]
101
+ items: Items | None
102
+ items_path: ItemsPath | None
104
103
  iteration_component: IterationComponent
105
- item_reader: Optional[ItemReader]
106
- item_selector: Optional[ItemSelector]
107
- parameters: Optional[Parameters]
104
+ item_reader: ItemReader | None
105
+ item_selector: ItemSelector | None
106
+ parameters: Parameters | None
108
107
  max_concurrency_decl: MaxConcurrencyDecl
109
108
  tolerated_failure_count_decl: ToleratedFailureCountDecl
110
109
  tolerated_failure_percentage_decl: ToleratedFailurePercentage
111
- result_path: Optional[ResultPath]
110
+ result_path: ResultPath | None
112
111
  result_selector: ResultSelector
113
- retry: Optional[RetryDecl]
114
- catch: Optional[CatchDecl]
115
- label: Optional[Label]
116
- result_writer: Optional[ResultWriter]
112
+ retry: RetryDecl | None
113
+ catch: CatchDecl | None
114
+ label: Label | None
115
+ result_writer: ResultWriter | None
117
116
 
118
117
  def __init__(self):
119
- super(StateMap, self).__init__(
118
+ super().__init__(
120
119
  state_entered_event_type=HistoryEventType.MapStateEntered,
121
120
  state_exited_event_type=HistoryEventType.MapStateExited,
122
121
  )
123
122
 
124
123
  def from_state_props(self, state_props: StateProps) -> None:
125
- super(StateMap, self).from_state_props(state_props)
124
+ super().from_state_props(state_props)
126
125
  if self._is_language_query_jsonpath():
127
126
  self.items = None
128
127
  self.items_path = state_props.get(ItemsPath) or ItemsPath(
@@ -1,7 +1,7 @@
1
1
  import abc
2
2
  import logging
3
3
  import threading
4
- from typing import Final, Optional
4
+ from typing import Final
5
5
 
6
6
  from localstack.aws.api.stepfunctions import Timestamp
7
7
  from localstack.services.stepfunctions.asl.component.program.program import Program
@@ -18,7 +18,7 @@ class BranchWorker:
18
18
 
19
19
  _branch_worker_comm: Final[BranchWorkerComm]
20
20
  _program: Final[Program]
21
- _worker_thread: Optional[threading.Thread]
21
+ _worker_thread: threading.Thread | None
22
22
  env: Final[Environment]
23
23
 
24
24
  def __init__(self, branch_worker_comm: BranchWorkerComm, program: Program, env: Environment):
@@ -43,7 +43,7 @@ class BranchWorker:
43
43
  TMP_THREADS.append(self._worker_thread)
44
44
  self._worker_thread.start()
45
45
 
46
- def stop(self, stop_date: Timestamp, cause: Optional[str], error: Optional[str]) -> None:
46
+ def stop(self, stop_date: Timestamp, cause: str | None, error: str | None) -> None:
47
47
  env = self.env
48
48
  if env:
49
49
  try:
@@ -1,6 +1,6 @@
1
1
  import datetime
2
2
  import threading
3
- from typing import Final, Optional
3
+ from typing import Final
4
4
 
5
5
  from localstack.aws.api.stepfunctions import ExecutionFailedEventDetails, HistoryEventType
6
6
  from localstack.services.stepfunctions.asl.component.common.error_name.custom_error_name import (
@@ -26,7 +26,7 @@ class BranchWorkerPool(BranchWorker.BranchWorkerComm):
26
26
  _termination_event: Final[threading.Event]
27
27
  _active_workers_num: int
28
28
 
29
- _terminated_with_error: Optional[ExecutionFailedEventDetails]
29
+ _terminated_with_error: ExecutionFailedEventDetails | None
30
30
 
31
31
  def __init__(self, workers_num: int):
32
32
  self._mutex = threading.Lock()
@@ -42,7 +42,7 @@ class BranchWorkerPool(BranchWorker.BranchWorkerComm):
42
42
  end_program_state: ProgramState = env.program_state()
43
43
  if isinstance(end_program_state, ProgramError):
44
44
  self._terminated_with_error = select_from_typed_dict(
45
- typed_dict=ExecutionFailedEventDetails, obj=end_program_state.error or dict()
45
+ typed_dict=ExecutionFailedEventDetails, obj=end_program_state.error or {}
46
46
  )
47
47
  self._termination_event.set()
48
48
  else:
@@ -53,7 +53,7 @@ class BranchWorkerPool(BranchWorker.BranchWorkerComm):
53
53
  def wait(self):
54
54
  self._termination_event.wait()
55
55
 
56
- def get_exit_event_details(self) -> Optional[ExecutionFailedEventDetails]:
56
+ def get_exit_event_details(self) -> ExecutionFailedEventDetails | None:
57
57
  return self._terminated_with_error
58
58
 
59
59
 
@@ -67,7 +67,7 @@ class BranchesDecl(EvalComponent):
67
67
 
68
68
  branch_worker_pool = BranchWorkerPool(workers_num=len(self.programs))
69
69
 
70
- branch_workers: list[BranchWorker] = list()
70
+ branch_workers: list[BranchWorker] = []
71
71
  for program in self.programs:
72
72
  # Environment frame for this sub process.
73
73
  env_frame: Environment = env.open_inner_frame()
@@ -84,7 +84,7 @@ class BranchesDecl(EvalComponent):
84
84
  branch_worker_pool.wait()
85
85
 
86
86
  # Propagate exception if parallel task failed.
87
- exit_event_details: Optional[ExecutionFailedEventDetails] = (
87
+ exit_event_details: ExecutionFailedEventDetails | None = (
88
88
  branch_worker_pool.get_exit_event_details()
89
89
  )
90
90
  if exit_event_details is not None:
@@ -103,7 +103,7 @@ class BranchesDecl(EvalComponent):
103
103
  )
104
104
 
105
105
  # Collect the results and return.
106
- result_list = list()
106
+ result_list = []
107
107
 
108
108
  for worker in branch_workers:
109
109
  env_frame = worker.env
@@ -1,5 +1,4 @@
1
1
  import copy
2
- from typing import Optional
3
2
 
4
3
  from localstack.aws.api.stepfunctions import HistoryEventType
5
4
  from localstack.services.stepfunctions.asl.component.common.catch.catch_outcome import CatchOutcome
@@ -25,7 +24,7 @@ class StateParallel(ExecutionState):
25
24
  # machine object must have fields named States and StartAt, whose meanings are exactly
26
25
  # like those in the top level of a state machine.
27
26
  branches: BranchesDecl
28
- parargs: Optional[Parargs]
27
+ parargs: Parargs | None
29
28
 
30
29
  def __init__(self):
31
30
  super().__init__(
@@ -34,7 +33,7 @@ class StateParallel(ExecutionState):
34
33
  )
35
34
 
36
35
  def from_state_props(self, state_props: StateProps) -> None:
37
- super(StateParallel, self).from_state_props(state_props)
36
+ super().from_state_props(state_props)
38
37
  self.branches = state_props.get(
39
38
  typ=BranchesDecl,
40
39
  raise_on_missing=ValueError(f"Missing Branches definition in props '{state_props}'."),
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  from json import JSONDecodeError
3
- from typing import IO, Any, Final, Optional, Union
3
+ from typing import IO, Any, Final
4
4
 
5
5
  from localstack.aws.api.lambda_ import InvocationResponse
6
6
  from localstack.services.stepfunctions.asl.component.state.state_execution.state_task.credentials import (
@@ -18,15 +18,15 @@ from localstack.utils.strings import to_bytes
18
18
 
19
19
 
20
20
  class LambdaFunctionErrorException(Exception):
21
- function_error: Final[Optional[str]]
21
+ function_error: Final[str | None]
22
22
  payload: Final[str]
23
23
 
24
- def __init__(self, function_error: Optional[str], payload: str):
24
+ def __init__(self, function_error: str | None, payload: str):
25
25
  self.function_error = function_error
26
26
  self.payload = payload
27
27
 
28
28
 
29
- def _from_payload(payload_streaming_body: IO[bytes]) -> Union[json, str]:
29
+ def _from_payload(payload_streaming_body: IO[bytes]) -> Any | str:
30
30
  """
31
31
  This method extracts the lambda payload. The payload may be a string or a JSON stringified object.
32
32
  In the first case, this function converts the output into a UTF-8 string, otherwise it parses the
@@ -75,7 +75,7 @@ def execute_lambda_function_integration(
75
75
  parameters=parameters, region=region, state_credentials=state_credentials
76
76
  )
77
77
 
78
- function_error: Optional[str] = invocation_response.get("FunctionError")
78
+ function_error: str | None = invocation_response.get("FunctionError")
79
79
  if function_error:
80
80
  payload_json = invocation_response["Payload"]
81
81
  payload_str = json.dumps(payload_json, separators=(",", ":"))
@@ -85,12 +85,12 @@ def execute_lambda_function_integration(
85
85
  env.stack.append(response)
86
86
 
87
87
 
88
- def to_payload_type(payload: Any) -> Optional[bytes]:
88
+ def to_payload_type(payload: Any) -> bytes | None:
89
89
  if isinstance(payload, bytes):
90
90
  return payload
91
91
 
92
92
  if payload is None:
93
- str_value = to_json_str(dict())
93
+ str_value = to_json_str({})
94
94
  elif isinstance(payload, str):
95
95
  try:
96
96
  json.loads(payload)
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import abc
4
4
  from itertools import takewhile
5
- from typing import Final, Optional
5
+ from typing import Final
6
6
 
7
7
  from localstack.services.stepfunctions.asl.component.eval_component import EvalComponent
8
8
  from localstack.services.stepfunctions.asl.eval.environment import Environment
@@ -33,7 +33,7 @@ class ResourceARN:
33
33
  account: str,
34
34
  task_type: str,
35
35
  name: str,
36
- option: Optional[str],
36
+ option: str | None,
37
37
  ):
38
38
  self.arn = arn
39
39
  self.partition = partition
@@ -137,7 +137,7 @@ class ServiceResource(Resource):
137
137
  service_name: Final[str]
138
138
  api_name: Final[str]
139
139
  api_action: Final[str]
140
- condition: Final[Optional[str]]
140
+ condition: Final[str | None]
141
141
 
142
142
  def __init__(self, resource_arn: ResourceARN):
143
143
  super().__init__(resource_arn=resource_arn)
@@ -4,7 +4,7 @@ import abc
4
4
  import copy
5
5
  import json
6
6
  import logging
7
- from typing import Any, Final, Optional, Union
7
+ from typing import Any, Final
8
8
 
9
9
  from botocore.model import ListShape, OperationModel, Shape, StringShape, StructureShape
10
10
  from botocore.response import StreamingBody
@@ -147,8 +147,8 @@ class StateTaskService(StateTask, abc.ABC):
147
147
  parameters_bind_keys: list[str] = list(parameters.keys())
148
148
  for parameter_key in parameters_bind_keys:
149
149
  norm_parameter_key = camel_to_snake_case(parameter_key)
150
- norm_member_bind: Optional[tuple[str, Optional[StructureShape]]] = (
151
- norm_member_binds.get(norm_parameter_key)
150
+ norm_member_bind: tuple[str, StructureShape | None] | None = norm_member_binds.get(
151
+ norm_parameter_key
152
152
  )
153
153
  if norm_member_bind is not None:
154
154
  norm_member_bind_key, norm_member_bind_shape = norm_member_bind
@@ -203,19 +203,19 @@ class StateTaskService(StateTask, abc.ABC):
203
203
 
204
204
  response[norm_response_key] = response_value
205
205
 
206
- def _get_boto_service_name(self, boto_service_name: Optional[str] = None) -> str:
206
+ def _get_boto_service_name(self, boto_service_name: str | None = None) -> str:
207
207
  api_name = boto_service_name or self.resource.api_name
208
208
  return self._SERVICE_NAME_SFN_TO_BOTO_OVERRIDES.get(api_name, api_name)
209
209
 
210
- def _get_boto_service_action(self, service_action_name: Optional[str] = None) -> str:
210
+ def _get_boto_service_action(self, service_action_name: str | None = None) -> str:
211
211
  api_action = service_action_name or self.resource.api_action
212
212
  return camel_to_snake_case(api_action)
213
213
 
214
214
  def _normalise_parameters(
215
215
  self,
216
216
  parameters: dict,
217
- boto_service_name: Optional[str] = None,
218
- service_action_name: Optional[str] = None,
217
+ boto_service_name: str | None = None,
218
+ service_action_name: str | None = None,
219
219
  ) -> None:
220
220
  boto_service_name = self._get_boto_service_name(boto_service_name=boto_service_name)
221
221
  service_action_name = self._get_boto_service_action(service_action_name=service_action_name)
@@ -228,8 +228,8 @@ class StateTaskService(StateTask, abc.ABC):
228
228
  def _normalise_response(
229
229
  self,
230
230
  response: Any,
231
- boto_service_name: Optional[str] = None,
232
- service_action_name: Optional[str] = None,
231
+ boto_service_name: str | None = None,
232
+ service_action_name: str | None = None,
233
233
  ) -> None:
234
234
  boto_service_name = self._get_boto_service_name(boto_service_name=boto_service_name)
235
235
  service_action_name = self._get_boto_service_action(service_action_name=service_action_name)
@@ -239,7 +239,7 @@ class StateTaskService(StateTask, abc.ABC):
239
239
  if output_shape is not None:
240
240
  self._from_boto_response(response, output_shape) # noqa
241
241
 
242
- def _verify_size_quota(self, env: Environment, value: Union[str, json]) -> None:
242
+ def _verify_size_quota(self, env: Environment, value: str | json) -> None:
243
243
  is_within: bool = is_within_size_quota(value)
244
244
  if is_within:
245
245
  return
@@ -4,7 +4,7 @@ import http
4
4
  import json
5
5
  import logging
6
6
  from json import JSONDecodeError
7
- from typing import Any, Final, Optional, TypedDict
7
+ from typing import Any, Final, TypedDict
8
8
  from urllib.parse import urlencode, urljoin, urlparse
9
9
 
10
10
  import requests
@@ -76,13 +76,13 @@ class AuthType(str):
76
76
  class TaskParameters(TypedDict):
77
77
  ApiEndpoint: ApiEndpoint
78
78
  Method: Method
79
- Headers: Optional[Headers]
80
- Stage: Optional[Stage]
81
- Path: Optional[Path]
82
- QueryParameters: Optional[QueryParameters]
83
- RequestBody: Optional[RequestBody]
84
- AllowNullValues: Optional[AllowNullValues]
85
- AuthType: Optional[AuthType]
79
+ Headers: Headers | None
80
+ Stage: Stage | None
81
+ Path: Path | None
82
+ QueryParameters: QueryParameters | None
83
+ RequestBody: RequestBody | None
84
+ AllowNullValues: AllowNullValues | None
85
+ AuthType: AuthType | None
86
86
 
87
87
 
88
88
  class InvokeOutput(TypedDict):
@@ -131,14 +131,14 @@ class StateTaskServiceApiGateway(StateTaskServiceCallback):
131
131
  def __init__(self):
132
132
  super().__init__(supported_integration_patterns=_SUPPORTED_INTEGRATION_PATTERNS)
133
133
 
134
- def _get_supported_parameters(self) -> Optional[set[str]]:
134
+ def _get_supported_parameters(self) -> set[str] | None:
135
135
  return self._SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
136
136
 
137
137
  def _normalise_parameters(
138
138
  self,
139
139
  parameters: dict,
140
- boto_service_name: Optional[str] = None,
141
- service_action_name: Optional[str] = None,
140
+ boto_service_name: str | None = None,
141
+ service_action_name: str | None = None,
142
142
  ) -> None:
143
143
  # ApiGateway does not support botocore request relay.
144
144
  pass
@@ -146,14 +146,14 @@ class StateTaskServiceApiGateway(StateTaskServiceCallback):
146
146
  def _normalise_response(
147
147
  self,
148
148
  response: Any,
149
- boto_service_name: Optional[str] = None,
150
- service_action_name: Optional[str] = None,
149
+ boto_service_name: str | None = None,
150
+ service_action_name: str | None = None,
151
151
  ) -> None:
152
152
  # ApiGateway does not support botocore request relay.
153
153
  pass
154
154
 
155
155
  @staticmethod
156
- def _query_parameters_of(parameters: TaskParameters) -> Optional[str]:
156
+ def _query_parameters_of(parameters: TaskParameters) -> str | None:
157
157
  query_str = None
158
158
  query_parameters = parameters.get("QueryParameters")
159
159
  # TODO: add support for AllowNullValues.
@@ -167,8 +167,8 @@ class StateTaskServiceApiGateway(StateTaskServiceCallback):
167
167
  return query_str
168
168
 
169
169
  @staticmethod
170
- def _headers_of(parameters: TaskParameters) -> Optional[dict]:
171
- headers = parameters.get("Headers", dict())
170
+ def _headers_of(parameters: TaskParameters) -> dict | None:
171
+ headers = parameters.get("Headers", {})
172
172
  if headers:
173
173
  for key in headers.keys():
174
174
  # TODO: the following check takes place at parse time.
@@ -239,8 +239,8 @@ class StateTaskServiceApiGateway(StateTaskServiceCallback):
239
239
  response_body = response.json()
240
240
  except JSONDecodeError:
241
241
  response_body = response.text
242
- if response_body == json.dumps(dict()):
243
- response_body = dict()
242
+ if response_body == json.dumps({}):
243
+ response_body = {}
244
244
 
245
245
  # since we are not using a case-insensitive dict, and we want to remove a header, for server
246
246
  # compatibility we should consider both casing variants
@@ -132,7 +132,7 @@ class StateTaskServiceAwsSdk(StateTaskServiceCallback):
132
132
  region=resource_runtime_part.region,
133
133
  state_credentials=state_credentials,
134
134
  )
135
- response = getattr(api_client, api_action)(**normalised_parameters) or dict()
135
+ response = getattr(api_client, api_action)(**normalised_parameters) or {}
136
136
  if response:
137
137
  response.pop("ResponseMetadata", None)
138
138
  env.stack.append(response)
@@ -1,4 +1,5 @@
1
- from typing import Any, Callable, Final, Optional
1
+ from collections.abc import Callable
2
+ from typing import Any, Final
2
3
 
3
4
  from botocore.exceptions import ClientError
4
5
  from moto.batch.utils import JobStatus
@@ -62,7 +63,7 @@ class StateTaskServiceBatch(StateTaskServiceCallback):
62
63
  def __init__(self):
63
64
  super().__init__(supported_integration_patterns=_SUPPORTED_INTEGRATION_PATTERNS)
64
65
 
65
- def _get_supported_parameters(self) -> Optional[set[str]]:
66
+ def _get_supported_parameters(self) -> set[str] | None:
66
67
  return _SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
67
68
 
68
69
  @staticmethod
@@ -70,12 +71,12 @@ class StateTaskServiceBatch(StateTaskServiceCallback):
70
71
  # Attaches to the ContainerOverrides environment variables the AWS managed flags.
71
72
  container_overrides = parameters.get("ContainerOverrides")
72
73
  if container_overrides is None:
73
- container_overrides = dict()
74
+ container_overrides = {}
74
75
  parameters["ContainerOverrides"] = container_overrides
75
76
 
76
77
  environment = container_overrides.get("Environment")
77
78
  if environment is None:
78
- environment = list()
79
+ environment = []
79
80
  container_overrides["Environment"] = environment
80
81
 
81
82
  environment.append(
@@ -117,7 +118,7 @@ class StateTaskServiceBatch(StateTaskServiceCallback):
117
118
  "Proxy: null",
118
119
  ]
119
120
  )
120
- cause = f"Error executing request, Exception : {error_message}, RequestId: {request_id} ({response_details})"
121
+ cause = f"{error_message} ({response_details})"
121
122
  return FailureEvent(
122
123
  env=env,
123
124
  error_name=CustomErrorName(error_name),
@@ -139,7 +140,7 @@ class StateTaskServiceBatch(StateTaskServiceCallback):
139
140
  resource_runtime_part: ResourceRuntimePart,
140
141
  normalised_parameters: dict,
141
142
  state_credentials: StateCredentials,
142
- ) -> Callable[[], Optional[Any]]:
143
+ ) -> Callable[[], Any | None]:
143
144
  batch_client = boto_client_for(
144
145
  service="batch",
145
146
  region=resource_runtime_part.region,
@@ -148,7 +149,7 @@ class StateTaskServiceBatch(StateTaskServiceCallback):
148
149
  submission_output: dict = env.stack.pop()
149
150
  job_id = submission_output["JobId"]
150
151
 
151
- def _sync_resolver() -> Optional[dict]:
152
+ def _sync_resolver() -> dict | None:
152
153
  describe_jobs_response = batch_client.describe_jobs(jobs=[job_id])
153
154
  describe_jobs = describe_jobs_response["jobs"]
154
155
  if describe_jobs: