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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (672) hide show
  1. localstack/aws/api/apigateway/__init__.py +87 -110
  2. localstack/aws/api/cloudformation/__init__.py +18 -4
  3. localstack/aws/api/cloudwatch/__init__.py +41 -1
  4. localstack/aws/api/config/__init__.py +4 -0
  5. localstack/aws/api/core.py +8 -5
  6. localstack/aws/api/dynamodb/__init__.py +30 -0
  7. localstack/aws/api/ec2/__init__.py +1545 -66
  8. localstack/aws/api/events/__init__.py +12 -16
  9. localstack/aws/api/iam/__init__.py +7 -0
  10. localstack/aws/api/kinesis/__init__.py +19 -0
  11. localstack/aws/api/kms/__init__.py +6 -0
  12. localstack/aws/api/lambda_/__init__.py +36 -23
  13. localstack/aws/api/logs/__init__.py +20 -8
  14. localstack/aws/api/opensearch/__init__.py +16 -0
  15. localstack/aws/api/pipes/__init__.py +24 -32
  16. localstack/aws/api/redshift/__init__.py +9 -3
  17. localstack/aws/api/route53/__init__.py +5 -0
  18. localstack/aws/api/s3/__init__.py +12 -0
  19. localstack/aws/api/s3control/__init__.py +56 -0
  20. localstack/aws/api/scheduler/__init__.py +14 -16
  21. localstack/aws/api/ssm/__init__.py +2 -0
  22. localstack/aws/api/stepfunctions/__init__.py +88 -114
  23. localstack/aws/api/support/__init__.py +8 -9
  24. localstack/aws/api/transcribe/__init__.py +17 -0
  25. localstack/aws/chain.py +2 -2
  26. localstack/aws/client.py +14 -11
  27. localstack/aws/connect.py +42 -41
  28. localstack/aws/forwarder.py +57 -9
  29. localstack/aws/gateway.py +1 -3
  30. localstack/aws/handlers/analytics.py +2 -3
  31. localstack/aws/handlers/cors.py +4 -5
  32. localstack/aws/handlers/internal_requests.py +6 -1
  33. localstack/aws/handlers/logging.py +13 -4
  34. localstack/aws/handlers/metric_handler.py +44 -5
  35. localstack/aws/handlers/service.py +48 -28
  36. localstack/aws/mocking.py +18 -27
  37. localstack/aws/patches.py +2 -2
  38. localstack/aws/protocol/op_router.py +11 -10
  39. localstack/aws/protocol/parser.py +475 -49
  40. localstack/aws/protocol/serializer.py +723 -106
  41. localstack/aws/protocol/service_router.py +133 -33
  42. localstack/aws/protocol/validate.py +6 -6
  43. localstack/aws/scaffold.py +9 -10
  44. localstack/aws/serving/edge.py +5 -6
  45. localstack/aws/serving/hypercorn.py +2 -2
  46. localstack/aws/serving/twisted.py +1 -2
  47. localstack/aws/serving/werkzeug.py +2 -2
  48. localstack/aws/skeleton.py +12 -11
  49. localstack/aws/spec-patches.json +58 -0
  50. localstack/aws/spec.py +66 -46
  51. localstack/cli/exceptions.py +1 -1
  52. localstack/cli/localstack.py +11 -11
  53. localstack/cli/lpm.py +4 -5
  54. localstack/cli/plugins.py +1 -1
  55. localstack/cli/profiles.py +1 -2
  56. localstack/config.py +44 -30
  57. localstack/constants.py +4 -29
  58. localstack/deprecations.py +5 -5
  59. localstack/dev/kubernetes/__main__.py +130 -7
  60. localstack/dev/run/__main__.py +5 -5
  61. localstack/dev/run/configurators.py +1 -4
  62. localstack/dev/run/paths.py +6 -6
  63. localstack/dns/models.py +2 -1
  64. localstack/dns/plugins.py +5 -1
  65. localstack/dns/server.py +16 -6
  66. localstack/http/dispatcher.py +1 -2
  67. localstack/http/response.py +2 -2
  68. localstack/http/router.py +1 -1
  69. localstack/http/trace.py +2 -1
  70. localstack/logging/format.py +6 -6
  71. localstack/packages/api.py +13 -12
  72. localstack/packages/core.py +4 -4
  73. localstack/packages/debugpy.py +1 -3
  74. localstack/packages/ffmpeg.py +1 -2
  75. localstack/packages/java.py +38 -12
  76. localstack/packages/plugins.py +0 -8
  77. localstack/runtime/analytics.py +3 -0
  78. localstack/runtime/hooks.py +1 -1
  79. localstack/runtime/init.py +8 -9
  80. localstack/runtime/main.py +5 -5
  81. localstack/runtime/patches.py +2 -2
  82. localstack/runtime/shutdown.py +2 -1
  83. localstack/services/apigateway/exporter.py +1 -2
  84. localstack/services/apigateway/helpers.py +7 -10
  85. localstack/services/apigateway/legacy/context.py +21 -21
  86. localstack/services/apigateway/legacy/helpers.py +27 -28
  87. localstack/services/apigateway/legacy/integration.py +11 -10
  88. localstack/services/apigateway/legacy/invocations.py +6 -5
  89. localstack/services/apigateway/legacy/provider.py +148 -68
  90. localstack/services/apigateway/legacy/router_asf.py +2 -2
  91. localstack/services/apigateway/legacy/templates.py +6 -6
  92. localstack/services/apigateway/models.py +16 -16
  93. localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
  94. localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
  95. localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
  96. localstack/services/apigateway/next_gen/execute_api/handlers/method_request.py +7 -2
  97. localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
  98. localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +2 -3
  99. localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
  100. localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
  101. localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +9 -6
  102. localstack/services/apigateway/next_gen/execute_api/integrations/http.py +12 -12
  103. localstack/services/apigateway/next_gen/execute_api/router.py +31 -0
  104. localstack/services/apigateway/next_gen/execute_api/template_mapping.py +2 -2
  105. localstack/services/apigateway/next_gen/execute_api/test_invoke.py +114 -9
  106. localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
  107. localstack/services/apigateway/next_gen/provider.py +5 -0
  108. localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
  109. localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
  110. localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
  111. localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
  112. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
  113. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
  114. localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
  115. localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
  116. localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
  117. localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
  118. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
  119. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
  120. localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
  121. localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
  122. localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
  123. localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
  124. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
  125. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
  126. localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +6 -6
  127. localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
  128. localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
  129. localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
  130. localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
  131. localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
  132. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
  133. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
  134. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
  135. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
  136. localstack/services/cdk/resource_providers/cdk_metadata.py +4 -3
  137. localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
  138. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
  139. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
  140. localstack/services/cloudformation/api_utils.py +4 -8
  141. localstack/services/cloudformation/cfn_utils.py +2 -2
  142. localstack/services/cloudformation/deployment_utils.py +14 -12
  143. localstack/services/cloudformation/engine/changes.py +3 -3
  144. localstack/services/cloudformation/engine/entities.py +27 -17
  145. localstack/services/cloudformation/engine/parameters.py +4 -4
  146. localstack/services/cloudformation/engine/template_deployer.py +15 -14
  147. localstack/services/cloudformation/engine/template_utils.py +34 -12
  148. localstack/services/cloudformation/engine/transformers.py +11 -8
  149. localstack/services/cloudformation/engine/types.py +5 -4
  150. localstack/services/cloudformation/engine/v2/change_set_model.py +336 -39
  151. localstack/services/cloudformation/engine/v2/change_set_model_describer.py +96 -17
  152. localstack/services/cloudformation/engine/v2/change_set_model_executor.py +289 -136
  153. localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +315 -146
  154. localstack/services/cloudformation/engine/v2/change_set_model_transform.py +380 -105
  155. localstack/services/cloudformation/engine/v2/change_set_model_validator.py +183 -0
  156. localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +6 -0
  157. localstack/services/cloudformation/engine/v2/resolving.py +102 -0
  158. localstack/services/cloudformation/engine/yaml_parser.py +9 -2
  159. localstack/services/cloudformation/provider.py +11 -6
  160. localstack/services/cloudformation/provider_utils.py +34 -4
  161. localstack/services/cloudformation/resource_provider.py +31 -21
  162. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
  163. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
  164. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
  165. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
  166. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
  167. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
  168. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
  169. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
  170. localstack/services/cloudformation/resources.py +24149 -0
  171. localstack/services/cloudformation/scaffolding/__main__.py +13 -12
  172. localstack/services/cloudformation/scaffolding/propgen.py +2 -2
  173. localstack/services/cloudformation/service_models.py +2 -2
  174. localstack/services/cloudformation/stores.py +33 -22
  175. localstack/services/cloudformation/v2/entities.py +103 -88
  176. localstack/services/cloudformation/v2/provider.py +872 -131
  177. localstack/services/cloudformation/v2/types.py +38 -0
  178. localstack/services/cloudformation/v2/utils.py +4 -1
  179. localstack/services/cloudwatch/alarm_scheduler.py +11 -8
  180. localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
  181. localstack/services/cloudwatch/models.py +5 -7
  182. localstack/services/cloudwatch/provider.py +30 -25
  183. localstack/services/cloudwatch/provider_v2.py +27 -32
  184. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
  185. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
  186. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
  187. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
  188. localstack/services/dynamodb/packages.py +3 -3
  189. localstack/services/dynamodb/provider.py +159 -18
  190. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
  191. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
  192. localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
  193. localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
  194. localstack/services/dynamodb/server.py +2 -2
  195. localstack/services/dynamodb/utils.py +13 -14
  196. localstack/services/dynamodb/v2/provider.py +157 -18
  197. localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
  198. localstack/services/dynamodbstreams/models.py +1 -3
  199. localstack/services/ec2/patches.py +26 -5
  200. localstack/services/ec2/provider.py +3 -3
  201. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
  202. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
  203. localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
  204. localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
  205. localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
  206. localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
  207. localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
  208. localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
  209. localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
  210. localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
  211. localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
  212. localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
  213. localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
  214. localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
  215. localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
  216. localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
  217. localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
  218. localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
  219. localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
  220. localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
  221. localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
  222. localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
  223. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
  224. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
  225. localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
  226. localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
  227. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
  228. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
  229. localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
  230. localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
  231. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +29 -22
  232. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
  233. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
  234. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
  235. localstack/services/ecr/resource_providers/aws_ecr_repository.py +22 -19
  236. localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
  237. localstack/services/edge.py +6 -6
  238. localstack/services/es/provider.py +21 -21
  239. localstack/services/events/archive.py +2 -2
  240. localstack/services/events/connection.py +5 -5
  241. localstack/services/events/event_bus.py +9 -9
  242. localstack/services/events/event_rule_engine.py +31 -13
  243. localstack/services/events/models.py +29 -30
  244. localstack/services/events/provider.py +29 -26
  245. localstack/services/events/replay.py +3 -3
  246. localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
  247. localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
  248. localstack/services/events/resource_providers/aws_events_connection.py +27 -27
  249. localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
  250. localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
  251. localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
  252. localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
  253. localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
  254. localstack/services/events/resource_providers/aws_events_rule.py +82 -82
  255. localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
  256. localstack/services/events/rule.py +15 -15
  257. localstack/services/events/target.py +21 -13
  258. localstack/services/events/utils.py +7 -7
  259. localstack/services/events/v1/models.py +1 -3
  260. localstack/services/events/v1/provider.py +15 -15
  261. localstack/services/firehose/models.py +1 -3
  262. localstack/services/firehose/provider.py +25 -16
  263. localstack/services/iam/iam_patches.py +5 -6
  264. localstack/services/iam/provider.py +14 -119
  265. localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
  266. localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
  267. localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
  268. localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
  269. localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
  270. localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
  271. localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
  272. localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
  273. localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
  274. localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
  275. localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
  276. localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
  277. localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
  278. localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
  279. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
  280. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
  281. localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
  282. localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
  283. localstack/services/iam/resources/policy_simulator.py +133 -0
  284. localstack/services/kinesis/kinesis_mock_server.py +7 -8
  285. localstack/services/kinesis/models.py +17 -5
  286. localstack/services/kinesis/packages.py +3 -3
  287. localstack/services/kinesis/provider.py +86 -3
  288. localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
  289. localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
  290. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
  291. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
  292. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
  293. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
  294. localstack/services/kms/models.py +21 -18
  295. localstack/services/kms/provider.py +62 -26
  296. localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
  297. localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
  298. localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
  299. localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
  300. localstack/services/kms/utils.py +4 -3
  301. localstack/services/lambda_/api_utils.py +19 -16
  302. localstack/services/lambda_/custom_endpoints.py +2 -2
  303. localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +4 -7
  304. localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
  305. localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
  306. localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
  307. localstack/services/lambda_/hooks.py +6 -1
  308. localstack/services/lambda_/invocation/assignment.py +1 -2
  309. localstack/services/lambda_/invocation/docker_runtime_executor.py +7 -11
  310. localstack/services/lambda_/invocation/event_manager.py +1 -1
  311. localstack/services/lambda_/invocation/execution_environment.py +4 -4
  312. localstack/services/lambda_/invocation/executor_endpoint.py +8 -11
  313. localstack/services/lambda_/invocation/internal_sqs_queue.py +6 -10
  314. localstack/services/lambda_/invocation/lambda_models.py +33 -30
  315. localstack/services/lambda_/invocation/lambda_service.py +12 -5
  316. localstack/services/lambda_/invocation/logs.py +2 -3
  317. localstack/services/lambda_/invocation/runtime_executor.py +3 -3
  318. localstack/services/lambda_/invocation/version_manager.py +31 -8
  319. localstack/services/lambda_/ldm.py +14 -0
  320. localstack/services/lambda_/packages.py +3 -4
  321. localstack/services/lambda_/provider.py +9 -26
  322. localstack/services/lambda_/provider_utils.py +1 -1
  323. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
  324. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
  325. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
  326. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
  327. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
  328. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
  329. localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
  330. localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
  331. localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
  332. localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
  333. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
  334. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
  335. localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
  336. localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
  337. localstack/services/lambda_/resource_providers/aws_lambda_url.py +15 -15
  338. localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
  339. localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
  340. localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
  341. localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
  342. localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
  343. localstack/services/lambda_/runtimes.py +1 -3
  344. localstack/services/lambda_/urlrouter.py +14 -1
  345. localstack/services/logs/models.py +1 -3
  346. localstack/services/logs/provider.py +39 -22
  347. localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
  348. localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
  349. localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
  350. localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
  351. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
  352. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
  353. localstack/services/moto.py +5 -4
  354. localstack/services/opensearch/cluster.py +28 -20
  355. localstack/services/opensearch/cluster_manager.py +13 -14
  356. localstack/services/opensearch/models.py +1 -3
  357. localstack/services/opensearch/packages.py +27 -9
  358. localstack/services/opensearch/provider.py +15 -10
  359. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
  360. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
  361. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
  362. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
  363. localstack/services/opensearch/versions.py +57 -10
  364. localstack/services/plugins.py +37 -32
  365. localstack/services/providers.py +10 -2
  366. localstack/services/redshift/provider.py +0 -21
  367. localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
  368. localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
  369. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
  370. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
  371. localstack/services/route53/models.py +1 -3
  372. localstack/services/route53/provider.py +1 -2
  373. localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
  374. localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
  375. localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
  376. localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
  377. localstack/services/route53resolver/models.py +8 -10
  378. localstack/services/route53resolver/provider.py +12 -12
  379. localstack/services/s3/codec.py +2 -2
  380. localstack/services/s3/constants.py +5 -2
  381. localstack/services/s3/cors.py +8 -8
  382. localstack/services/s3/models.py +73 -73
  383. localstack/services/s3/notifications.py +74 -58
  384. localstack/services/s3/presigned_url.py +41 -59
  385. localstack/services/s3/provider.py +86 -29
  386. localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
  387. localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
  388. localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
  389. localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
  390. localstack/services/s3/storage/core.py +4 -3
  391. localstack/services/s3/storage/ephemeral.py +7 -6
  392. localstack/services/s3/utils.py +51 -31
  393. localstack/services/s3/validation.py +47 -33
  394. localstack/services/s3/website_hosting.py +9 -7
  395. localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
  396. localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
  397. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
  398. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
  399. localstack/services/secretsmanager/provider.py +10 -12
  400. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
  401. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
  402. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
  403. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
  404. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
  405. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
  406. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
  407. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
  408. localstack/services/ses/models.py +8 -1
  409. localstack/services/ses/provider.py +128 -55
  410. localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
  411. localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
  412. localstack/services/sns/constants.py +7 -1
  413. localstack/services/sns/executor.py +9 -2
  414. localstack/services/sns/models.py +25 -25
  415. localstack/services/sns/provider.py +9 -7
  416. localstack/services/sns/publisher.py +37 -23
  417. localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
  418. localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
  419. localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
  420. localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
  421. localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
  422. localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
  423. localstack/services/sns/v2/models.py +167 -0
  424. localstack/services/sns/v2/provider.py +867 -0
  425. localstack/services/sns/v2/utils.py +130 -0
  426. localstack/services/sqs/constants.py +2 -2
  427. localstack/services/sqs/developer_api.py +205 -0
  428. localstack/services/sqs/models.py +71 -36
  429. localstack/services/sqs/provider.py +56 -332
  430. localstack/services/sqs/query_api.py +8 -5
  431. localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
  432. localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
  433. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +7 -5
  434. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
  435. localstack/services/sqs/utils.py +123 -4
  436. localstack/services/ssm/provider.py +3 -4
  437. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
  438. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
  439. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
  440. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
  441. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
  442. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
  443. localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
  444. localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
  445. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
  446. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
  447. localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
  448. localstack/services/stepfunctions/asl/component/common/assign/assign_decl.py +1 -1
  449. localstack/services/stepfunctions/asl/component/common/assign/assign_decl_binding.py +1 -1
  450. localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_array.py +1 -1
  451. localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_object.py +1 -1
  452. localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
  453. localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
  454. localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
  455. localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
  456. localstack/services/stepfunctions/asl/component/common/error_name/states_error_name_type.py +1 -1
  457. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
  458. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_array.py +1 -1
  459. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_object.py +1 -1
  460. localstack/services/stepfunctions/asl/component/common/path/input_path.py +4 -4
  461. localstack/services/stepfunctions/asl/component/common/path/output_path.py +4 -4
  462. localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
  463. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadarr/payload_arr.py +1 -1
  464. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
  465. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadtmpl/payload_tmpl.py +1 -1
  466. localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
  467. localstack/services/stepfunctions/asl/component/common/string/string_expression.py +3 -3
  468. localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
  469. localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
  470. localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +4 -4
  471. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/array/array_partition.py +1 -1
  472. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/generic/string_format.py +1 -1
  473. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_array.py +1 -1
  474. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_format.py +1 -1
  475. localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +3 -3
  476. localstack/services/stepfunctions/asl/component/intrinsic/member.py +1 -1
  477. localstack/services/stepfunctions/asl/component/program/program.py +9 -9
  478. localstack/services/stepfunctions/asl/component/program/states.py +1 -1
  479. localstack/services/stepfunctions/asl/component/state/state.py +10 -11
  480. localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
  481. localstack/services/stepfunctions/asl/component/state/state_choice/comparison/comparison.py +5 -11
  482. localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
  483. localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +3 -5
  484. localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +9 -9
  485. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +7 -7
  486. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
  487. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
  488. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_output_transformer/resource_output_transformer_csv.py +2 -2
  489. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
  490. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
  491. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
  492. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
  493. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
  494. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
  495. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
  496. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
  497. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
  498. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
  499. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
  500. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
  501. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
  502. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +12 -13
  503. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
  504. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +7 -7
  505. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +2 -3
  506. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +7 -7
  507. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
  508. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
  509. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +18 -18
  510. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_aws_sdk.py +1 -1
  511. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +8 -7
  512. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
  513. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
  514. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
  515. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
  516. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
  517. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
  518. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
  519. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
  520. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
  521. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +5 -5
  522. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
  523. localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +3 -5
  524. localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +5 -7
  525. localstack/services/stepfunctions/asl/component/state/state_succeed/state_succeed.py +1 -1
  526. localstack/services/stepfunctions/asl/component/state/state_wait/state_wait.py +1 -1
  527. localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
  528. localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
  529. localstack/services/stepfunctions/asl/eval/environment.py +22 -24
  530. localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
  531. localstack/services/stepfunctions/asl/eval/event/event_manager.py +10 -10
  532. localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
  533. localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
  534. localstack/services/stepfunctions/asl/eval/states.py +12 -12
  535. localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
  536. localstack/services/stepfunctions/asl/eval/variable_store.py +6 -6
  537. localstack/services/stepfunctions/asl/jsonata/jsonata.py +7 -6
  538. localstack/services/stepfunctions/asl/parse/asl_parser.py +1 -1
  539. localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +2 -3
  540. localstack/services/stepfunctions/asl/parse/preprocessor.py +44 -44
  541. localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
  542. localstack/services/stepfunctions/asl/static_analyser/intrinsic/variable_names_intrinsic_static_analyser.py +1 -1
  543. localstack/services/stepfunctions/asl/static_analyser/variable_references_static_analyser.py +2 -2
  544. localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
  545. localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
  546. localstack/services/stepfunctions/backend/activity.py +4 -4
  547. localstack/services/stepfunctions/backend/alias.py +8 -8
  548. localstack/services/stepfunctions/backend/execution.py +29 -30
  549. localstack/services/stepfunctions/backend/execution_worker.py +7 -7
  550. localstack/services/stepfunctions/backend/state_machine.py +28 -28
  551. localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
  552. localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
  553. localstack/services/stepfunctions/mocking/mock_config.py +9 -9
  554. localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
  555. localstack/services/stepfunctions/packages.py +14 -5
  556. localstack/services/stepfunctions/provider.py +34 -44
  557. localstack/services/stepfunctions/quotas.py +2 -3
  558. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
  559. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
  560. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
  561. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
  562. localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
  563. localstack/services/stores.py +8 -8
  564. localstack/services/transcribe/packages.py +1 -3
  565. localstack/services/transcribe/provider.py +8 -3
  566. localstack/state/codecs.py +61 -0
  567. localstack/state/core.py +11 -5
  568. localstack/state/inspect.py +4 -4
  569. localstack/state/pickle.py +36 -23
  570. localstack/testing/aws/asf_utils.py +3 -2
  571. localstack/testing/aws/cloudformation_utils.py +1 -1
  572. localstack/testing/aws/lambda_utils.py +15 -14
  573. localstack/testing/aws/util.py +3 -2
  574. localstack/testing/pytest/cloudformation/fixtures.py +68 -18
  575. localstack/testing/pytest/container.py +5 -5
  576. localstack/testing/pytest/filters.py +1 -3
  577. localstack/testing/pytest/fixtures.py +188 -49
  578. localstack/testing/pytest/in_memory_localstack.py +1 -3
  579. localstack/testing/pytest/marking.py +42 -15
  580. localstack/testing/pytest/path_filter.py +1 -1
  581. localstack/testing/pytest/stepfunctions/fixtures.py +4 -4
  582. localstack/testing/pytest/stepfunctions/utils.py +11 -10
  583. localstack/testing/pytest/util.py +1 -1
  584. localstack/testing/pytest/validation_tracking.py +3 -4
  585. localstack/testing/scenario/provisioning.py +11 -10
  586. localstack/testing/snapshots/transformer_utility.py +8 -3
  587. localstack/testing/testselection/matching.py +2 -2
  588. localstack/testing/testselection/opt_out.py +1 -1
  589. localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
  590. localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
  591. localstack/testing/testselection/testselection.py +2 -2
  592. localstack/utils/analytics/cli.py +2 -3
  593. localstack/utils/analytics/client.py +5 -5
  594. localstack/utils/analytics/events.py +2 -2
  595. localstack/utils/analytics/metadata.py +6 -4
  596. localstack/utils/analytics/metrics/counter.py +11 -18
  597. localstack/utils/analytics/metrics/registry.py +2 -2
  598. localstack/utils/analytics/publisher.py +4 -5
  599. localstack/utils/analytics/service_providers.py +19 -0
  600. localstack/utils/analytics/service_request_aggregator.py +4 -4
  601. localstack/utils/archives.py +12 -12
  602. localstack/utils/asyncio.py +2 -2
  603. localstack/utils/aws/arns.py +26 -31
  604. localstack/utils/aws/aws_responses.py +21 -28
  605. localstack/utils/aws/aws_stack.py +7 -12
  606. localstack/utils/aws/dead_letter_queue.py +4 -9
  607. localstack/utils/aws/message_forwarding.py +8 -11
  608. localstack/utils/aws/request_context.py +5 -6
  609. localstack/utils/aws/resources.py +1 -1
  610. localstack/utils/aws/templating.py +4 -4
  611. localstack/utils/batch_policy.py +4 -4
  612. localstack/utils/bootstrap.py +37 -30
  613. localstack/utils/catalog/catalog.py +139 -0
  614. localstack/utils/catalog/catalog_loader.py +119 -0
  615. localstack/utils/catalog/common.py +58 -0
  616. localstack/utils/catalog/plugins.py +28 -0
  617. localstack/utils/cloudwatch/cloudwatch_util.py +5 -5
  618. localstack/utils/collections.py +33 -27
  619. localstack/utils/config_listener.py +2 -2
  620. localstack/utils/container_networking.py +5 -6
  621. localstack/utils/container_utils/container_client.py +156 -160
  622. localstack/utils/container_utils/docker_cmd_client.py +97 -81
  623. localstack/utils/container_utils/docker_sdk_client.py +75 -72
  624. localstack/utils/crypto.py +12 -13
  625. localstack/utils/diagnose.py +11 -12
  626. localstack/utils/docker_utils.py +11 -7
  627. localstack/utils/files.py +34 -15
  628. localstack/utils/functions.py +5 -4
  629. localstack/utils/http.py +14 -14
  630. localstack/utils/iputils.py +2 -1
  631. localstack/utils/json.py +21 -7
  632. localstack/utils/kinesis/kinesis_connector.py +2 -1
  633. localstack/utils/net.py +25 -17
  634. localstack/utils/no_exit_argument_parser.py +2 -2
  635. localstack/utils/numbers.py +9 -2
  636. localstack/utils/objects.py +15 -14
  637. localstack/utils/patch.py +14 -7
  638. localstack/utils/platform.py +2 -2
  639. localstack/utils/run.py +15 -14
  640. localstack/utils/scheduler.py +13 -12
  641. localstack/utils/server/tcp_proxy.py +2 -2
  642. localstack/utils/serving.py +3 -4
  643. localstack/utils/strings.py +15 -16
  644. localstack/utils/sync.py +126 -1
  645. localstack/utils/tagging.py +10 -8
  646. localstack/utils/testutil.py +17 -17
  647. localstack/utils/threads.py +3 -3
  648. localstack/utils/time.py +12 -4
  649. localstack/utils/urls.py +1 -3
  650. localstack/utils/xml.py +1 -1
  651. localstack/utils/xray/traceid.py +1 -1
  652. localstack/version.py +16 -3
  653. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/METADATA +18 -13
  654. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/RECORD +663 -655
  655. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/entry_points.txt +8 -4
  656. localstack_core-4.10.1.dev12.dist-info/plux.json +1 -0
  657. localstack/packages/terraform.py +0 -47
  658. localstack/services/cloudformation/deploy.html +0 -144
  659. localstack/services/cloudformation/deploy_ui.py +0 -47
  660. localstack/services/cloudformation/plugins.py +0 -12
  661. localstack/services/lambda_/lambda_debug_mode/ldm.py +0 -375
  662. localstack/services/lambda_/lambda_debug_mode/ldm_config_file.py +0 -178
  663. localstack/services/lambda_/lambda_debug_mode/ldm_types.py +0 -11
  664. localstack/services/lambda_/lambda_debug_mode/ldm_utils.py +0 -43
  665. localstack_core-4.6.1.dev60.dist-info/plux.json +0 -1
  666. /localstack/{services/lambda_/lambda_debug_mode/__init__.py → testing/pytest/cloudformation/transformers.py} +0 -0
  667. {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack +0 -0
  668. {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack-supervisor +0 -0
  669. {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack.bat +0 -0
  670. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/WHEEL +0 -0
  671. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/licenses/LICENSE.txt +0 -0
  672. {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,8 @@ import abc
2
2
  import json
3
3
  import threading
4
4
  import time
5
- from typing import Any, Callable, Final, Optional
5
+ from collections.abc import Callable
6
+ from typing import Any, Final
6
7
 
7
8
  from localstack.aws.api.stepfunctions import (
8
9
  HistoryEventExecutionDataDetails,
@@ -67,7 +68,7 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
67
68
  resource_runtime_part: ResourceRuntimePart,
68
69
  normalised_parameters: dict,
69
70
  state_credentials: StateCredentials,
70
- ) -> Callable[[], Optional[Any]]:
71
+ ) -> Callable[[], Any | None]:
71
72
  raise RuntimeError(
72
73
  f"Unsupported .sync callback procedure in resource {self.resource.resource_arn}"
73
74
  )
@@ -78,7 +79,7 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
78
79
  resource_runtime_part: ResourceRuntimePart,
79
80
  normalised_parameters: dict,
80
81
  state_credentials: StateCredentials,
81
- ) -> Callable[[], Optional[Any]]:
82
+ ) -> Callable[[], Any | None]:
82
83
  raise RuntimeError(
83
84
  f"Unsupported .sync2 callback procedure in resource {self.resource.resource_arn}"
84
85
  )
@@ -88,9 +89,9 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
88
89
  env: Environment,
89
90
  timeout_seconds: int,
90
91
  callback_endpoint: CallbackEndpoint,
91
- heartbeat_endpoint: Optional[HeartbeatEndpoint],
92
+ heartbeat_endpoint: HeartbeatEndpoint | None,
92
93
  ) -> CallbackOutcome:
93
- outcome: Optional[CallbackOutcome]
94
+ outcome: CallbackOutcome | None
94
95
  if heartbeat_endpoint is not None:
95
96
  outcome = self._wait_for_task_token_heartbeat(
96
97
  env, callback_endpoint, heartbeat_endpoint
@@ -104,12 +105,12 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
104
105
  def _eval_sync(
105
106
  self,
106
107
  env: Environment,
107
- sync_resolver: Callable[[], Optional[Any]],
108
- timeout_seconds: Optional[int],
109
- callback_endpoint: Optional[CallbackEndpoint],
110
- heartbeat_endpoint: Optional[HeartbeatEndpoint],
108
+ sync_resolver: Callable[[], Any | None],
109
+ timeout_seconds: int | None,
110
+ callback_endpoint: CallbackEndpoint | None,
111
+ heartbeat_endpoint: HeartbeatEndpoint | None,
111
112
  ) -> CallbackOutcome | Any:
112
- callback_output: Optional[CallbackOutcome] = None
113
+ callback_output: CallbackOutcome | None = None
113
114
 
114
115
  # Listen for WaitForTaskToken signals if an endpoint is provided.
115
116
  if callback_endpoint is not None:
@@ -134,7 +135,7 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
134
135
  # an exception in this thread will invalidate env, and therefore the worker thread.
135
136
  # hence why here there are no explicit stopping logic for thread_wait_for_task_token.
136
137
 
137
- sync_result: Optional[Any] = None
138
+ sync_result: Any | None = None
138
139
  while env.is_running():
139
140
  sync_result = sync_resolver()
140
141
  if callback_output or sync_result:
@@ -154,7 +155,7 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
154
155
  task_output = env.stack.pop()
155
156
 
156
157
  # Initialise the waitForTaskToken Callback endpoint for this task if supported.
157
- callback_endpoint: Optional[CallbackEndpoint] = None
158
+ callback_endpoint: CallbackEndpoint | None = None
158
159
  if ResourceCondition.WaitForTaskToken in self._supported_integration_patterns:
159
160
  callback_id = env.states.context_object.context_object_data["Task"]["Token"]
160
161
  callback_endpoint = env.callback_pool_manager.get(callback_id)
@@ -164,7 +165,7 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
164
165
  timeout_seconds = env.stack.pop()
165
166
 
166
167
  # Setup resources for heartbeat workloads if necessary.
167
- heartbeat_endpoint: Optional[HeartbeatEndpoint] = None
168
+ heartbeat_endpoint: HeartbeatEndpoint | None = None
168
169
  if self.heartbeat:
169
170
  self.heartbeat.eval(env=env)
170
171
  heartbeat_seconds = env.stack.pop()
@@ -240,7 +241,7 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
240
241
  self,
241
242
  timeout_seconds: int,
242
243
  callback_endpoint: CallbackEndpoint,
243
- ) -> Optional[CallbackOutcome]:
244
+ ) -> CallbackOutcome | None:
244
245
  # Awaits a callback notification and returns the outcome received.
245
246
  # If the operation times out or is interrupted it returns None.
246
247
 
@@ -249,7 +250,7 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
249
250
  # discarded by the main process.
250
251
  # Note: although this is the same timeout value, this can only decay strictly after the first timeout
251
252
  # started as it is invoked strictly later.
252
- outcome: Optional[CallbackOutcome] = callback_endpoint.wait(timeout=timeout_seconds)
253
+ outcome: CallbackOutcome | None = callback_endpoint.wait(timeout=timeout_seconds)
253
254
  return outcome
254
255
 
255
256
  def _wait_for_task_token_heartbeat( # noqa
@@ -257,7 +258,7 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
257
258
  env: Environment,
258
259
  callback_endpoint: CallbackEndpoint,
259
260
  heartbeat_endpoint: HeartbeatEndpoint,
260
- ) -> Optional[CallbackOutcome]:
261
+ ) -> CallbackOutcome | None:
261
262
  outcome = None
262
263
  while (
263
264
  env.is_running()
@@ -285,7 +286,7 @@ class StateTaskServiceCallback(StateTaskService, abc.ABC):
285
286
  self, env: Environment, ex: CallbackOutcomeFailureError
286
287
  ) -> FailureEvent:
287
288
  callback_outcome_failure: CallbackOutcomeFailure = ex.callback_outcome_failure
288
- error: Optional[str] = callback_outcome_failure.error
289
+ error: str | None = callback_outcome_failure.error
289
290
  return FailureEvent(
290
291
  env=env,
291
292
  error_name=CustomErrorName(error_name=error),
@@ -1,4 +1,4 @@
1
- from typing import Final, Optional
1
+ from typing import Final
2
2
 
3
3
  from botocore.exceptions import ClientError
4
4
 
@@ -76,7 +76,7 @@ _SUPPORTED_API_PARAM_BINDINGS: Final[dict[str, set[str]]] = {
76
76
 
77
77
 
78
78
  class StateTaskServiceDynamoDB(StateTaskService):
79
- def _get_supported_parameters(self) -> Optional[set[str]]:
79
+ def _get_supported_parameters(self) -> set[str] | None:
80
80
  return _SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
81
81
 
82
82
  @staticmethod
@@ -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 localstack.services.stepfunctions.asl.component.state.state_execution.state_task.credentials import (
4
5
  StateCredentials,
@@ -42,7 +43,7 @@ class StateTaskServiceEcs(StateTaskServiceCallback):
42
43
  def __init__(self):
43
44
  super().__init__(supported_integration_patterns=_SUPPORTED_INTEGRATION_PATTERNS)
44
45
 
45
- def _get_supported_parameters(self) -> Optional[set[str]]:
46
+ def _get_supported_parameters(self) -> set[str] | None:
46
47
  return _SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
47
48
 
48
49
  def _before_eval_execution(
@@ -102,7 +103,7 @@ class StateTaskServiceEcs(StateTaskServiceCallback):
102
103
  resource_runtime_part: ResourceRuntimePart,
103
104
  normalised_parameters: dict,
104
105
  state_credentials: StateCredentials,
105
- ) -> Callable[[], Optional[Any]]:
106
+ ) -> Callable[[], Any | None]:
106
107
  ecs_client = boto_client_for(
107
108
  service="ecs",
108
109
  region=resource_runtime_part.region,
@@ -112,7 +113,7 @@ class StateTaskServiceEcs(StateTaskServiceCallback):
112
113
  task_arn: str = submission_output["Tasks"][0]["TaskArn"]
113
114
  cluster_arn: str = submission_output["Tasks"][0]["ClusterArn"]
114
115
 
115
- def _sync_resolver() -> Optional[dict]:
116
+ def _sync_resolver() -> dict | None:
116
117
  describe_tasks_output = ecs_client.describe_tasks(cluster=cluster_arn, tasks=[task_arn])
117
118
  last_status: str = describe_tasks_output["tasks"][0]["lastStatus"]
118
119
 
@@ -1,5 +1,5 @@
1
1
  import json
2
- from typing import Final, Optional
2
+ from typing import Final
3
3
 
4
4
  from localstack.aws.api.stepfunctions import HistoryEventType, TaskFailedEventDetails
5
5
  from localstack.services.stepfunctions.asl.component.common.error_name.custom_error_name import (
@@ -33,9 +33,9 @@ _SUPPORTED_API_PARAM_BINDINGS: Final[dict[str, set[str]]] = {"putevents": {"Entr
33
33
 
34
34
 
35
35
  class SfnFailedEntryCountException(RuntimeError):
36
- cause: Final[Optional[dict]]
36
+ cause: Final[dict | None]
37
37
 
38
- def __init__(self, cause: Optional[dict]):
38
+ def __init__(self, cause: dict | None):
39
39
  super().__init__(json.dumps(cause))
40
40
  self.cause = cause
41
41
 
@@ -44,7 +44,7 @@ class StateTaskServiceEvents(StateTaskServiceCallback):
44
44
  def __init__(self):
45
45
  super().__init__(supported_integration_patterns=_SUPPORTED_INTEGRATION_PATTERNS)
46
46
 
47
- def _get_supported_parameters(self) -> Optional[set[str]]:
47
+ def _get_supported_parameters(self) -> set[str] | None:
48
48
  return _SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
49
49
 
50
50
  def _from_error(self, env: Environment, ex: Exception) -> FailureEvent:
@@ -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
  import boto3
4
5
  from botocore.exceptions import ClientError
@@ -73,7 +74,7 @@ _API_ACTION_HANDLER_TYPE = Callable[
73
74
  ]
74
75
  # The type of (sync)handler builder function for StateTaskServiceGlue objects.
75
76
  _API_ACTION_HANDLER_BUILDER_TYPE = Callable[
76
- [Environment, ResourceRuntimePart, dict, StateCredentials], Callable[[], Optional[Any]]
77
+ [Environment, ResourceRuntimePart, dict, StateCredentials], Callable[[], Any | None]
77
78
  ]
78
79
 
79
80
 
@@ -81,7 +82,7 @@ class StateTaskServiceGlue(StateTaskServiceCallback):
81
82
  def __init__(self):
82
83
  super().__init__(supported_integration_patterns=_SUPPORTED_INTEGRATION_PATTERNS)
83
84
 
84
- def _get_supported_parameters(self) -> Optional[set[str]]:
85
+ def _get_supported_parameters(self) -> set[str] | None:
85
86
  return _SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
86
87
 
87
88
  def _get_api_action_handler(self) -> _API_ACTION_HANDLER_TYPE:
@@ -174,7 +175,7 @@ class StateTaskServiceGlue(StateTaskServiceCallback):
174
175
  resource_runtime_part: ResourceRuntimePart,
175
176
  normalised_parameters: dict,
176
177
  state_credentials: StateCredentials,
177
- ) -> Callable[[], Optional[Any]]:
178
+ ) -> Callable[[], Any | None]:
178
179
  # Poll the job run state from glue, using GetJobRun until the job has terminated. Hence, append the output
179
180
  # of GetJobRun to the state.
180
181
 
@@ -188,7 +189,7 @@ class StateTaskServiceGlue(StateTaskServiceCallback):
188
189
  resource_runtime_part=resource_runtime_part, state_credentials=state_credentials
189
190
  )
190
191
 
191
- def _sync_resolver() -> Optional[Any]:
192
+ def _sync_resolver() -> Any | None:
192
193
  # Sample GetJobRun until completion.
193
194
  get_job_run_response: dict = glue_client.get_job_run(JobName=job_name, RunId=job_run_id)
194
195
  job_run: dict = get_job_run_response["JobRun"]
@@ -232,7 +233,7 @@ class StateTaskServiceGlue(StateTaskServiceCallback):
232
233
  resource_runtime_part: ResourceRuntimePart,
233
234
  normalised_parameters: dict,
234
235
  state_credentials: StateCredentials,
235
- ) -> Callable[[], Optional[Any]]:
236
+ ) -> Callable[[], Any | None]:
236
237
  sync_resolver_builder = self._get_api_action_sync_builder_handler()
237
238
  sync_resolver = sync_resolver_builder(
238
239
  env, resource_runtime_part, normalised_parameters, state_credentials
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  import logging
3
- from typing import Final, Optional
3
+ from typing import Final
4
4
 
5
5
  from botocore.exceptions import ClientError
6
6
 
@@ -50,7 +50,7 @@ class StateTaskServiceLambda(StateTaskServiceCallback):
50
50
  def __init__(self):
51
51
  super().__init__(supported_integration_patterns=_SUPPORTED_INTEGRATION_PATTERNS)
52
52
 
53
- def _get_supported_parameters(self) -> Optional[set[str]]:
53
+ def _get_supported_parameters(self) -> set[str] | None:
54
54
  return _SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
55
55
 
56
56
  @staticmethod
@@ -105,8 +105,8 @@ class StateTaskServiceLambda(StateTaskServiceCallback):
105
105
  def _normalise_parameters(
106
106
  self,
107
107
  parameters: dict,
108
- boto_service_name: Optional[str] = None,
109
- service_action_name: Optional[str] = None,
108
+ boto_service_name: str | None = None,
109
+ service_action_name: str | None = None,
110
110
  ) -> None:
111
111
  # Run Payload value casting before normalisation.
112
112
  if "Payload" in parameters:
@@ -1,5 +1,6 @@
1
1
  import json
2
- from typing import Any, Callable, Final, Optional
2
+ from collections.abc import Callable
3
+ from typing import Any, Final
3
4
 
4
5
  from botocore.exceptions import ClientError
5
6
 
@@ -52,7 +53,7 @@ class StateTaskServiceSfn(StateTaskServiceCallback):
52
53
  def __init__(self):
53
54
  super().__init__(supported_integration_patterns=_SUPPORTED_INTEGRATION_PATTERNS)
54
55
 
55
- def _get_supported_parameters(self) -> Optional[set[str]]:
56
+ def _get_supported_parameters(self) -> set[str] | None:
56
57
  return _SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
57
58
 
58
59
  def _from_error(self, env: Environment, ex: Exception) -> FailureEvent:
@@ -91,8 +92,8 @@ class StateTaskServiceSfn(StateTaskServiceCallback):
91
92
  def _normalise_parameters(
92
93
  self,
93
94
  parameters: dict,
94
- boto_service_name: Optional[str] = None,
95
- service_action_name: Optional[str] = None,
95
+ boto_service_name: str | None = None,
96
+ service_action_name: str | None = None,
96
97
  ) -> None:
97
98
  if service_action_name is None:
98
99
  if self._get_boto_service_action() == "start_execution":
@@ -115,7 +116,7 @@ class StateTaskServiceSfn(StateTaskServiceCallback):
115
116
  resource_runtime_part: ResourceRuntimePart,
116
117
  normalised_parameters: dict,
117
118
  state_credentials: StateCredentials,
118
- ) -> Callable[[], Optional[Any]]:
119
+ ) -> Callable[[], Any | None]:
119
120
  sfn_client = boto_client_for(
120
121
  service="stepfunctions",
121
122
  region=resource_runtime_part.region,
@@ -124,7 +125,7 @@ class StateTaskServiceSfn(StateTaskServiceCallback):
124
125
  submission_output: dict = env.stack.pop()
125
126
  execution_arn: str = submission_output["ExecutionArn"]
126
127
 
127
- def _sync_resolver() -> Optional[Any]:
128
+ def _sync_resolver() -> Any | None:
128
129
  describe_execution_output = sfn_client.describe_execution(executionArn=execution_arn)
129
130
  describe_execution_output: DescribeExecutionOutput = select_from_typed_dict(
130
131
  DescribeExecutionOutput, describe_execution_output
@@ -176,7 +177,7 @@ class StateTaskServiceSfn(StateTaskServiceCallback):
176
177
  resource_runtime_part: ResourceRuntimePart,
177
178
  normalised_parameters: dict,
178
179
  state_credentials: StateCredentials,
179
- ) -> Callable[[], Optional[Any]]:
180
+ ) -> Callable[[], Any | None]:
180
181
  sfn_client = boto_client_for(
181
182
  region=resource_runtime_part.region,
182
183
  service="stepfunctions",
@@ -185,7 +186,7 @@ class StateTaskServiceSfn(StateTaskServiceCallback):
185
186
  submission_output: dict = env.stack.pop()
186
187
  execution_arn: str = submission_output["ExecutionArn"]
187
188
 
188
- def _sync2_resolver() -> Optional[Any]:
189
+ def _sync2_resolver() -> Any | None:
189
190
  describe_execution_output = sfn_client.describe_execution(executionArn=execution_arn)
190
191
  describe_execution_output: DescribeExecutionOutput = select_from_typed_dict(
191
192
  DescribeExecutionOutput, describe_execution_output
@@ -1,4 +1,4 @@
1
- from typing import Final, Optional
1
+ from typing import Final
2
2
 
3
3
  from botocore.exceptions import ClientError
4
4
 
@@ -46,7 +46,7 @@ class StateTaskServiceSns(StateTaskServiceCallback):
46
46
  def __init__(self):
47
47
  super().__init__(supported_integration_patterns=_SUPPORTED_INTEGRATION_PATTERNS)
48
48
 
49
- def _get_supported_parameters(self) -> Optional[set[str]]:
49
+ def _get_supported_parameters(self) -> set[str] | None:
50
50
  return _SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
51
51
 
52
52
  def _from_error(self, env: Environment, ex: Exception) -> FailureEvent:
@@ -1,4 +1,4 @@
1
- from typing import Any, Final, Optional
1
+ from typing import Any, Final
2
2
 
3
3
  from botocore.exceptions import ClientError
4
4
 
@@ -45,7 +45,7 @@ class StateTaskServiceSqs(StateTaskServiceCallback):
45
45
  def __init__(self):
46
46
  super().__init__(supported_integration_patterns=_SUPPORTED_INTEGRATION_PATTERNS)
47
47
 
48
- def _get_supported_parameters(self) -> Optional[set[str]]:
48
+ def _get_supported_parameters(self) -> set[str] | None:
49
49
  return _SUPPORTED_API_PARAM_BINDINGS.get(self.resource.api_action.lower())
50
50
 
51
51
  def _from_error(self, env: Environment, ex: Exception) -> FailureEvent:
@@ -70,8 +70,8 @@ class StateTaskServiceSqs(StateTaskServiceCallback):
70
70
  def _normalise_response(
71
71
  self,
72
72
  response: Any,
73
- boto_service_name: Optional[str] = None,
74
- service_action_name: Optional[str] = None,
73
+ boto_service_name: str | None = None,
74
+ service_action_name: str | None = None,
75
75
  ) -> None:
76
76
  super()._normalise_response(
77
77
  response=response,
@@ -31,17 +31,17 @@ from localstack.services.stepfunctions.asl.eval.event.event_detail import EventD
31
31
 
32
32
  class StateTask(ExecutionState, abc.ABC):
33
33
  resource: Resource
34
- parargs: Optional[Parargs]
35
- credentials: Optional[Credentials]
34
+ parargs: Parargs | None
35
+ credentials: Credentials | None
36
36
 
37
37
  def __init__(self):
38
- super(StateTask, self).__init__(
38
+ super().__init__(
39
39
  state_entered_event_type=HistoryEventType.TaskStateEntered,
40
40
  state_exited_event_type=HistoryEventType.TaskStateExited,
41
41
  )
42
42
 
43
43
  def from_state_props(self, state_props: StateProps) -> None:
44
- super(StateTask, self).from_state_props(state_props)
44
+ super().from_state_props(state_props)
45
45
  self.resource = state_props.get(Resource)
46
46
  self.parargs = state_props.get(Parargs)
47
47
  self.credentials = state_props.get(Credentials)
@@ -51,7 +51,7 @@ class StateTask(ExecutionState, abc.ABC):
51
51
 
52
52
  def _eval_parameters(self, env: Environment) -> dict:
53
53
  # Eval raw parameters.
54
- parameters = dict()
54
+ parameters = {}
55
55
  if self.parargs is not None:
56
56
  self.parargs.eval(env=env)
57
57
  parameters = env.stack.pop()
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  import logging
3
- from typing import Union
3
+ from typing import Any
4
4
 
5
5
  from botocore.exceptions import ClientError
6
6
 
@@ -94,7 +94,7 @@ class StateTaskLambda(StateTask):
94
94
  ),
95
95
  )
96
96
 
97
- def _verify_size_quota(self, env: Environment, value: Union[str, json]) -> None:
97
+ def _verify_size_quota(self, env: Environment, value: str | Any) -> None:
98
98
  is_within: bool = is_within_size_quota(value=value)
99
99
  if is_within:
100
100
  return
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from localstack.aws.api.stepfunctions import HistoryEventType, TaskFailedEventDetails
4
2
  from localstack.services.stepfunctions.asl.component.common.error_name.custom_error_name import (
5
3
  CustomErrorName,
@@ -22,11 +20,11 @@ class StateFail(CommonStateField):
22
20
  state_entered_event_type=HistoryEventType.FailStateEntered,
23
21
  state_exited_event_type=None,
24
22
  )
25
- self.cause: Optional[CauseDecl] = None
26
- self.error: Optional[ErrorDecl] = None
23
+ self.cause: CauseDecl | None = None
24
+ self.error: ErrorDecl | None = None
27
25
 
28
26
  def from_state_props(self, state_props: StateProps) -> None:
29
- super(StateFail, self).from_state_props(state_props)
27
+ super().from_state_props(state_props)
30
28
  self.cause = state_props.get(CauseDecl)
31
29
  self.error = state_props.get(ErrorDecl)
32
30
 
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from localstack.aws.api.stepfunctions import (
4
2
  HistoryEventType,
5
3
  )
@@ -13,7 +11,7 @@ from localstack.services.stepfunctions.asl.eval.environment import Environment
13
11
 
14
12
  class StatePass(CommonStateField):
15
13
  def __init__(self):
16
- super(StatePass, self).__init__(
14
+ super().__init__(
17
15
  state_entered_event_type=HistoryEventType.PassStateEntered,
18
16
  state_exited_event_type=HistoryEventType.PassStateExited,
19
17
  )
@@ -21,20 +19,20 @@ class StatePass(CommonStateField):
21
19
  # Result (Optional)
22
20
  # Refers to the output of a virtual state_task that is passed on to the next state. If you include the ResultPath
23
21
  # field in your state machine definition, Result is placed as specified by ResultPath and passed on to the
24
- self.result: Optional[Result] = None
22
+ self.result: Result | None = None
25
23
 
26
24
  # ResultPath (Optional)
27
25
  # Specifies where to place the output (relative to the input) of the virtual state_task specified in Result. The input
28
26
  # is further filtered as specified by the OutputPath field (if present) before being used as the state's output.
29
- self.result_path: Optional[ResultPath] = None
27
+ self.result_path: ResultPath | None = None
30
28
 
31
29
  # Parameters (Optional)
32
30
  # Creates a collection of key-value pairs that will be passed as input. You can specify Parameters as a static
33
31
  # value or select from the input using a path.
34
- self.parameters: Optional[Parameters] = None
32
+ self.parameters: Parameters | None = None
35
33
 
36
34
  def from_state_props(self, state_props: StateProps) -> None:
37
- super(StatePass, self).from_state_props(state_props)
35
+ super().from_state_props(state_props)
38
36
  self.result = state_props.get(Result)
39
37
  self.result_path = state_props.get(ResultPath) or ResultPath(
40
38
  result_path_src=ResultPath.DEFAULT_PATH
@@ -17,7 +17,7 @@ class StateSucceed(CommonStateField):
17
17
  )
18
18
 
19
19
  def from_state_props(self, state_props: StateProps) -> None:
20
- super(StateSucceed, self).from_state_props(state_props)
20
+ super().from_state_props(state_props)
21
21
  # TODO: assert all other fields are undefined?
22
22
 
23
23
  # No Next or End field: Succeed states are terminal states.
@@ -19,7 +19,7 @@ class StateWait(CommonStateField):
19
19
  )
20
20
 
21
21
  def from_state_props(self, state_props: StateProps) -> None:
22
- super(StateWait, self).from_state_props(state_props)
22
+ super().from_state_props(state_props)
23
23
  self.wait_function = state_props.get(
24
24
  typ=WaitFunction,
25
25
  raise_on_missing=ValueError(f"Undefined WaitFunction for StateWait: '{self}'."),
@@ -1,6 +1,6 @@
1
1
  import datetime
2
2
  import re
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.failure_event import (
@@ -47,7 +47,7 @@ class Timestamp(WaitFunction):
47
47
  return re.match(TIMESTAMP_PATTERN, timestamp) is not None
48
48
 
49
49
  @staticmethod
50
- def _from_timestamp_string(timestamp: str) -> Optional[datetime]:
50
+ def _from_timestamp_string(timestamp: str) -> datetime.datetime | None:
51
51
  if not Timestamp._is_valid_timestamp_pattern(timestamp):
52
52
  return None
53
53
  try:
@@ -1,7 +1,7 @@
1
1
  import abc
2
2
  from collections import OrderedDict
3
3
  from threading import Event, Lock
4
- from typing import Final, Optional
4
+ from typing import Final
5
5
 
6
6
  from localstack.aws.api.stepfunctions import ActivityDoesNotExist, Arn
7
7
  from localstack.services.stepfunctions.backend.activity import Activity, ActivityTask
@@ -26,10 +26,10 @@ class CallbackOutcomeSuccess(CallbackOutcome):
26
26
 
27
27
 
28
28
  class CallbackOutcomeFailure(CallbackOutcome):
29
- error: Final[Optional[str]]
30
- cause: Final[Optional[str]]
29
+ error: Final[str | None]
30
+ cause: Final[str | None]
31
31
 
32
- def __init__(self, callback_id: CallbackId, error: Optional[str], cause: Optional[str]):
32
+ def __init__(self, callback_id: CallbackId, error: str | None, cause: str | None):
33
33
  super().__init__(callback_id=callback_id)
34
34
  self.error = error
35
35
  self.cause = cause
@@ -85,20 +85,20 @@ class HeartbeatTimedOut(CallbackConsumerError):
85
85
 
86
86
 
87
87
  class ActivityTaskStartOutcome:
88
- worker_name: Optional[str]
88
+ worker_name: str | None
89
89
 
90
- def __init__(self, worker_name: Optional[str] = None):
90
+ def __init__(self, worker_name: str | None = None):
91
91
  self.worker_name = worker_name
92
92
 
93
93
 
94
94
  class ActivityTaskStartEndpoint:
95
95
  _next_activity_task_start_event: Final[Event]
96
- _outcome: Optional[ActivityTaskStartOutcome]
96
+ _outcome: ActivityTaskStartOutcome | None
97
97
 
98
98
  def __init__(self):
99
99
  self._next_activity_task_start_event = Event()
100
100
 
101
- def wait(self, timeout_seconds: float) -> Optional[ActivityTaskStartOutcome]:
101
+ def wait(self, timeout_seconds: float) -> ActivityTaskStartOutcome | None:
102
102
  self._next_activity_task_start_event.wait(timeout=timeout_seconds)
103
103
  return self._outcome
104
104
 
@@ -110,9 +110,9 @@ class ActivityTaskStartEndpoint:
110
110
  class CallbackEndpoint:
111
111
  callback_id: Final[CallbackId]
112
112
  _notify_event: Final[Event]
113
- _outcome: Optional[CallbackOutcome]
114
- consumer_error: Optional[CallbackConsumerError]
115
- _heartbeat_endpoint: Optional[HeartbeatEndpoint]
113
+ _outcome: CallbackOutcome | None
114
+ consumer_error: CallbackConsumerError | None
115
+ _heartbeat_endpoint: HeartbeatEndpoint | None
116
116
 
117
117
  def __init__(self, callback_id: CallbackId):
118
118
  self.callback_id = callback_id
@@ -144,11 +144,11 @@ class CallbackEndpoint:
144
144
  self._heartbeat_endpoint.notify()
145
145
  return True
146
146
 
147
- def wait(self, timeout: Optional[float] = None) -> Optional[CallbackOutcome]:
147
+ def wait(self, timeout: float | None = None) -> CallbackOutcome | None:
148
148
  self._notify_event.wait(timeout=timeout)
149
149
  return self._outcome
150
150
 
151
- def get_outcome(self) -> Optional[CallbackOutcome]:
151
+ def get_outcome(self) -> CallbackOutcome | None:
152
152
  return self._outcome
153
153
 
154
154
  def report(self, consumer_error: CallbackConsumerError) -> None:
@@ -170,7 +170,7 @@ class ActivityCallbackEndpoint(CallbackEndpoint):
170
170
  def get_activity_task_start_endpoint(self) -> ActivityTaskStartEndpoint:
171
171
  return self._activity_task_start_endpoint
172
172
 
173
- def notify_activity_task_start(self, worker_name: Optional[str]) -> None:
173
+ def notify_activity_task_start(self, worker_name: str | None) -> None:
174
174
  self._activity_task_start_endpoint.notify(ActivityTaskStartOutcome(worker_name=worker_name))
175
175
 
176
176
 
@@ -196,7 +196,7 @@ class CallbackPoolManager:
196
196
  self._activity_store = activity_store
197
197
  self._pool = OrderedDict()
198
198
 
199
- def get(self, callback_id: CallbackId) -> Optional[CallbackEndpoint]:
199
+ def get(self, callback_id: CallbackId) -> CallbackEndpoint | None:
200
200
  return self._pool.get(callback_id)
201
201
 
202
202
  def add(self, callback_id: CallbackId) -> CallbackEndpoint:
@@ -212,7 +212,7 @@ class CallbackPoolManager:
212
212
  if callback_id in self._pool:
213
213
  raise ValueError("Duplicate callback token id value.")
214
214
 
215
- maybe_activity: Optional[Activity] = self._activity_store.get(activity_arn)
215
+ maybe_activity: Activity | None = self._activity_store.get(activity_arn)
216
216
  if maybe_activity is None:
217
217
  raise ActivityDoesNotExist()
218
218
 
@@ -232,7 +232,7 @@ class CallbackPoolManager:
232
232
  if callback_endpoint is None:
233
233
  return False
234
234
 
235
- consumer_error: Optional[CallbackConsumerError] = callback_endpoint.consumer_error
235
+ consumer_error: CallbackConsumerError | None = callback_endpoint.consumer_error
236
236
  if consumer_error is not None:
237
237
  raise CallbackNotifyConsumerError(callback_consumer_error=consumer_error)
238
238
 
@@ -244,7 +244,7 @@ class CallbackPoolManager:
244
244
  if callback_endpoint is None:
245
245
  return False
246
246
 
247
- consumer_error: Optional[CallbackConsumerError] = callback_endpoint.consumer_error
247
+ consumer_error: CallbackConsumerError | None = callback_endpoint.consumer_error
248
248
  if consumer_error is not None:
249
249
  raise CallbackNotifyConsumerError(callback_consumer_error=consumer_error)
250
250