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,6 +1,6 @@
1
1
  import json
2
2
  import logging
3
- from typing import Any, Optional
3
+ from typing import Any
4
4
 
5
5
  from antlr4 import ParserRuleContext
6
6
  from antlr4.tree.Tree import ParseTree, TerminalNodeImpl
@@ -318,7 +318,7 @@ LOG = logging.getLogger(__name__)
318
318
 
319
319
 
320
320
  class Preprocessor(ASLParserVisitor):
321
- _query_language_per_scope: list[QueryLanguage] = list()
321
+ _query_language_per_scope: list[QueryLanguage] = []
322
322
 
323
323
  def _get_current_query_language(self) -> QueryLanguage:
324
324
  return self._query_language_per_scope[-1]
@@ -376,7 +376,7 @@ class Preprocessor(ASLParserVisitor):
376
376
  )
377
377
 
378
378
  @staticmethod
379
- def _inner_string_of(parser_rule_context: ParserRuleContext) -> Optional[str]:
379
+ def _inner_string_of(parser_rule_context: ParserRuleContext) -> str | None:
380
380
  if is_terminal(parser_rule_context, ASLLexer.NULL):
381
381
  return None
382
382
  inner_str = parser_rule_context.getText()
@@ -408,7 +408,7 @@ class Preprocessor(ASLParserVisitor):
408
408
  def visitStates_decl(self, ctx: ASLParser.States_declContext) -> States:
409
409
  states = States()
410
410
  for child in ctx.children:
411
- cmp: Optional[Component] = self.visit(child)
411
+ cmp: Component | None = self.visit(child)
412
412
  if isinstance(cmp, CommonStateField):
413
413
  # TODO move check to setter or checker layer?
414
414
  if cmp.name in states.states:
@@ -429,7 +429,7 @@ class Preprocessor(ASLParserVisitor):
429
429
 
430
430
  def visitEnd_decl(self, ctx: ASLParser.End_declContext) -> End:
431
431
  bool_child: ParseTree = ctx.children[-1]
432
- bool_term: Optional[TerminalNodeImpl] = is_terminal(bool_child)
432
+ bool_term: TerminalNodeImpl | None = is_terminal(bool_child)
433
433
  if bool_term is None:
434
434
  raise ValueError(f"Could not derive End from declaration context '{ctx.getText()}'")
435
435
  bool_term_rule: int = bool_term.getSymbol().type
@@ -448,7 +448,7 @@ class Preprocessor(ASLParserVisitor):
448
448
  return ResultPath(result_path_src=inner_str)
449
449
 
450
450
  def visitInput_path_decl(self, ctx: ASLParser.Input_path_declContext) -> InputPath:
451
- string_sampler: Optional[StringSampler] = None
451
+ string_sampler: StringSampler | None = None
452
452
  if not is_terminal(pt=ctx.children[-1], token_type=ASLLexer.NULL):
453
453
  string_sampler: StringSampler = self.visitString_sampler(ctx.string_sampler())
454
454
  return InputPath(string_sampler=string_sampler)
@@ -457,7 +457,7 @@ class Preprocessor(ASLParserVisitor):
457
457
  self._raise_if_query_language_is_not(
458
458
  query_language_mode=QueryLanguageMode.JSONPath, ctx=ctx
459
459
  )
460
- string_sampler: Optional[StringSampler] = None
460
+ string_sampler: StringSampler | None = None
461
461
  if is_production(ctx.children[-1], ASLParser.RULE_string_sampler):
462
462
  string_sampler: StringSampler = self.visitString_sampler(ctx.children[-1])
463
463
  return OutputPath(string_sampler=string_sampler)
@@ -527,7 +527,7 @@ class Preprocessor(ASLParserVisitor):
527
527
  def visitBranches_decl(self, ctx: ASLParser.Branches_declContext) -> BranchesDecl:
528
528
  programs: list[Program] = []
529
529
  for child in ctx.children:
530
- cmp: Optional[Component] = self.visit(child)
530
+ cmp: Component | None = self.visit(child)
531
531
  if isinstance(cmp, Program):
532
532
  programs.append(cmp)
533
533
  return BranchesDecl(programs=programs)
@@ -536,7 +536,7 @@ class Preprocessor(ASLParserVisitor):
536
536
  self._open_query_language_scope(ctx)
537
537
  state_props = StateProps()
538
538
  for child in ctx.children:
539
- cmp: Optional[Component] = self.visit(child)
539
+ cmp: Component | None = self.visit(child)
540
540
  state_props.add(cmp)
541
541
  if state_props.get(QueryLanguage) is None:
542
542
  state_props.add(self._get_current_query_language())
@@ -583,7 +583,7 @@ class Preprocessor(ASLParserVisitor):
583
583
  def visitCondition_lit(self, ctx: ASLParser.Condition_litContext) -> ConditionJSONataLit:
584
584
  self._raise_if_query_language_is_not(query_language_mode=QueryLanguageMode.JSONata, ctx=ctx)
585
585
  bool_child: ParseTree = ctx.children[-1]
586
- bool_term: Optional[TerminalNodeImpl] = is_terminal(bool_child)
586
+ bool_term: TerminalNodeImpl | None = is_terminal(bool_child)
587
587
  if bool_term is None:
588
588
  raise ValueError(
589
589
  f"Could not derive boolean literal from declaration context '{ctx.getText()}'."
@@ -651,7 +651,7 @@ class Preprocessor(ASLParserVisitor):
651
651
  self._raise_if_query_language_is_not(
652
652
  query_language_mode=QueryLanguageMode.JSONPath, ctx=ctx
653
653
  )
654
- pt: Optional[TerminalNodeImpl] = is_terminal(ctx.children[0])
654
+ pt: TerminalNodeImpl | None = is_terminal(ctx.children[0])
655
655
  if not pt:
656
656
  raise ValueError(f"Could not derive ChoiceOperator in block '{ctx.getText()}'.")
657
657
  return ComparisonComposite.ChoiceOp(pt.symbol.type)
@@ -660,9 +660,9 @@ class Preprocessor(ASLParserVisitor):
660
660
  self, ctx: ASLParser.Comparison_compositeContext
661
661
  ) -> ComparisonComposite:
662
662
  choice_op: ComparisonComposite.ChoiceOp = self.visit(ctx.choice_operator())
663
- rules: list[ChoiceRule] = list()
663
+ rules: list[ChoiceRule] = []
664
664
  for child in ctx.children[1:]:
665
- cmp: Optional[Component] = self.visit(child)
665
+ cmp: Component | None = self.visit(child)
666
666
  if not cmp:
667
667
  continue
668
668
  elif isinstance(cmp, ChoiceRule):
@@ -685,7 +685,7 @@ class Preprocessor(ASLParserVisitor):
685
685
  ) -> ChoiceRule:
686
686
  composite_stmts = ComparisonCompositeProps()
687
687
  for child in ctx.children:
688
- cmp: Optional[Component] = self.visit(child)
688
+ cmp: Component | None = self.visit(child)
689
689
  composite_stmts.add(cmp)
690
690
  return ChoiceRule(
691
691
  comparison=composite_stmts.get(
@@ -705,7 +705,7 @@ class Preprocessor(ASLParserVisitor):
705
705
  ) -> ChoiceRule:
706
706
  comparison_stmts = StateProps()
707
707
  for child in ctx.children:
708
- cmp: Optional[Component] = self.visit(child)
708
+ cmp: Component | None = self.visit(child)
709
709
  comparison_stmts.add(cmp)
710
710
  if self._is_query_language(query_language_mode=QueryLanguageMode.JSONPath):
711
711
  variable: Variable = comparison_stmts.get(
@@ -746,9 +746,9 @@ class Preprocessor(ASLParserVisitor):
746
746
  )
747
747
 
748
748
  def visitChoices_decl(self, ctx: ASLParser.Choices_declContext) -> ChoicesDecl:
749
- rules: list[ChoiceRule] = list()
749
+ rules: list[ChoiceRule] = []
750
750
  for child in ctx.children:
751
- cmp: Optional[Component] = self.visit(child)
751
+ cmp: Component | None = self.visit(child)
752
752
  if not cmp:
753
753
  continue
754
754
  elif isinstance(cmp, ChoiceRule):
@@ -966,7 +966,7 @@ class Preprocessor(ASLParserVisitor):
966
966
  return CSVHeaderLocation(csv_header_location_value=value)
967
967
 
968
968
  def visitCsv_headers_decl(self, ctx: ASLParser.Csv_headers_declContext) -> CSVHeaders:
969
- csv_headers: list[str] = list()
969
+ csv_headers: list[str] = []
970
970
  for child in ctx.children[3:-1]:
971
971
  maybe_str = is_production(pt=child, rule_index=ASLParser.RULE_string_literal)
972
972
  if maybe_str is not None:
@@ -1074,9 +1074,9 @@ class Preprocessor(ASLParserVisitor):
1074
1074
  return ResultWriter(resource=resource, parargs=parargs)
1075
1075
 
1076
1076
  def visitRetry_decl(self, ctx: ASLParser.Retry_declContext) -> RetryDecl:
1077
- retriers: list[RetrierDecl] = list()
1077
+ retriers: list[RetrierDecl] = []
1078
1078
  for child in ctx.children:
1079
- cmp: Optional[Component] = self.visit(child)
1079
+ cmp: Component | None = self.visit(child)
1080
1080
  if isinstance(cmp, RetrierDecl):
1081
1081
  retriers.append(cmp)
1082
1082
  return RetryDecl(retriers=retriers)
@@ -1084,7 +1084,7 @@ class Preprocessor(ASLParserVisitor):
1084
1084
  def visitRetrier_decl(self, ctx: ASLParser.Retrier_declContext) -> RetrierDecl:
1085
1085
  props = RetrierProps()
1086
1086
  for child in ctx.children:
1087
- cmp: Optional[Component] = self.visit(child)
1087
+ cmp: Component | None = self.visit(child)
1088
1088
  props.add(cmp)
1089
1089
  return RetrierDecl.from_retrier_props(props=props)
1090
1090
 
@@ -1092,7 +1092,7 @@ class Preprocessor(ASLParserVisitor):
1092
1092
  return self.visit(ctx.children[0])
1093
1093
 
1094
1094
  def visitError_equals_decl(self, ctx: ASLParser.Error_equals_declContext) -> ErrorEqualsDecl:
1095
- error_names: list[ErrorName] = list()
1095
+ error_names: list[ErrorName] = []
1096
1096
  for child in ctx.children:
1097
1097
  cmp = self.visit(child)
1098
1098
  if isinstance(cmp, ErrorName):
@@ -1103,7 +1103,7 @@ class Preprocessor(ASLParserVisitor):
1103
1103
  pt = ctx.children[0]
1104
1104
 
1105
1105
  # Case: StatesErrorName.
1106
- prc: Optional[ParserRuleContext] = is_production(
1106
+ prc: ParserRuleContext | None = is_production(
1107
1107
  pt=pt, rule_index=ASLParser.RULE_states_error_name
1108
1108
  )
1109
1109
  if prc:
@@ -1114,7 +1114,7 @@ class Preprocessor(ASLParserVisitor):
1114
1114
  return CustomErrorName(error_name=error_name)
1115
1115
 
1116
1116
  def visitStates_error_name(self, ctx: ASLParser.States_error_nameContext) -> StatesErrorName:
1117
- pt: Optional[TerminalNodeImpl] = is_terminal(ctx.children[0])
1117
+ pt: TerminalNodeImpl | None = is_terminal(ctx.children[0])
1118
1118
  if not pt:
1119
1119
  raise ValueError(f"Could not derive ErrorName in block '{ctx.getText()}'.")
1120
1120
  states_error_name_type = StatesErrorNameType(pt.symbol.type)
@@ -1140,15 +1140,15 @@ class Preprocessor(ASLParserVisitor):
1140
1140
  self, ctx: ASLParser.Jitter_strategy_declContext
1141
1141
  ) -> JitterStrategyDecl:
1142
1142
  last_child: ParseTree = ctx.children[-1]
1143
- strategy_child: Optional[TerminalNodeImpl] = is_terminal(last_child)
1143
+ strategy_child: TerminalNodeImpl | None = is_terminal(last_child)
1144
1144
  strategy_value = strategy_child.getSymbol().type
1145
1145
  jitter_strategy = JitterStrategy(strategy_value)
1146
1146
  return JitterStrategyDecl(jitter_strategy=jitter_strategy)
1147
1147
 
1148
1148
  def visitCatch_decl(self, ctx: ASLParser.Catch_declContext) -> CatchDecl:
1149
- catchers: list[CatcherDecl] = list()
1149
+ catchers: list[CatcherDecl] = []
1150
1150
  for child in ctx.children:
1151
- cmp: Optional[Component] = self.visit(child)
1151
+ cmp: Component | None = self.visit(child)
1152
1152
  if isinstance(cmp, CatcherDecl):
1153
1153
  catchers.append(cmp)
1154
1154
  return CatchDecl(catchers=catchers)
@@ -1156,7 +1156,7 @@ class Preprocessor(ASLParserVisitor):
1156
1156
  def visitCatcher_decl(self, ctx: ASLParser.Catcher_declContext) -> CatcherDecl:
1157
1157
  props = CatcherProps()
1158
1158
  for child in ctx.children:
1159
- cmp: Optional[Component] = self.visit(child)
1159
+ cmp: Component | None = self.visit(child)
1160
1160
  props.add(cmp)
1161
1161
  if self._is_query_language(QueryLanguageMode.JSONPath) and not props.get(ResultPath):
1162
1162
  props.add(CatcherDecl.DEFAULT_RESULT_PATH)
@@ -1172,7 +1172,7 @@ class Preprocessor(ASLParserVisitor):
1172
1172
 
1173
1173
  def visitPayload_value_bool(self, ctx: ASLParser.Payload_value_boolContext) -> PayloadValueBool:
1174
1174
  bool_child: ParseTree = ctx.children[0]
1175
- bool_term: Optional[TerminalNodeImpl] = is_terminal(bool_child)
1175
+ bool_term: TerminalNodeImpl | None = is_terminal(bool_child)
1176
1176
  if bool_term is None:
1177
1177
  raise ValueError(
1178
1178
  f"Could not derive PayloadValueBool from declaration context '{ctx.getText()}'."
@@ -1208,17 +1208,17 @@ class Preprocessor(ASLParserVisitor):
1208
1208
  return PayloadBindingValue(field=string_literal.literal_value, payload_value=payload_value)
1209
1209
 
1210
1210
  def visitPayload_arr_decl(self, ctx: ASLParser.Payload_arr_declContext) -> PayloadArr:
1211
- payload_values: list[PayloadValue] = list()
1211
+ payload_values: list[PayloadValue] = []
1212
1212
  for child in ctx.children:
1213
- cmp: Optional[Component] = self.visit(child)
1213
+ cmp: Component | None = self.visit(child)
1214
1214
  if isinstance(cmp, PayloadValue):
1215
1215
  payload_values.append(cmp)
1216
1216
  return PayloadArr(payload_values=payload_values)
1217
1217
 
1218
1218
  def visitPayload_tmpl_decl(self, ctx: ASLParser.Payload_tmpl_declContext) -> PayloadTmpl:
1219
- payload_bindings: list[PayloadBinding] = list()
1219
+ payload_bindings: list[PayloadBinding] = []
1220
1220
  for child in ctx.children:
1221
- cmp: Optional[Component] = self.visit(child)
1221
+ cmp: Component | None = self.visit(child)
1222
1222
  if isinstance(cmp, PayloadBinding):
1223
1223
  payload_bindings.append(cmp)
1224
1224
  return PayloadTmpl(payload_bindings=payload_bindings)
@@ -1231,7 +1231,7 @@ class Preprocessor(ASLParserVisitor):
1231
1231
  self._open_query_language_scope(ctx)
1232
1232
  props = TypedProps()
1233
1233
  for child in ctx.children:
1234
- cmp: Optional[Component] = self.visit(child)
1234
+ cmp: Component | None = self.visit(child)
1235
1235
  props.add(cmp)
1236
1236
  if props.get(QueryLanguage) is None:
1237
1237
  props.add(self._get_current_query_language())
@@ -1312,9 +1312,9 @@ class Preprocessor(ASLParserVisitor):
1312
1312
  def visitAssign_template_value_array(
1313
1313
  self, ctx: ASLParser.Assign_template_value_arrayContext
1314
1314
  ) -> AssignTemplateValueArray:
1315
- values: list[AssignTemplateValue] = list()
1315
+ values: list[AssignTemplateValue] = []
1316
1316
  for child in ctx.children:
1317
- cmp: Optional[Component] = self.visit(child)
1317
+ cmp: Component | None = self.visit(child)
1318
1318
  if isinstance(cmp, AssignTemplateValue):
1319
1319
  values.append(cmp)
1320
1320
  return AssignTemplateValueArray(values=values)
@@ -1322,9 +1322,9 @@ class Preprocessor(ASLParserVisitor):
1322
1322
  def visitAssign_template_value_object(
1323
1323
  self, ctx: ASLParser.Assign_template_value_objectContext
1324
1324
  ) -> AssignTemplateValueObject:
1325
- bindings: list[AssignTemplateBinding] = list()
1325
+ bindings: list[AssignTemplateBinding] = []
1326
1326
  for child in ctx.children:
1327
- cmp: Optional[Component] = self.visit(child)
1327
+ cmp: Component | None = self.visit(child)
1328
1328
  if isinstance(cmp, AssignTemplateBinding):
1329
1329
  bindings.append(cmp)
1330
1330
  return AssignTemplateValueObject(bindings=bindings)
@@ -1359,9 +1359,9 @@ class Preprocessor(ASLParserVisitor):
1359
1359
  def visitAssign_decl_body(
1360
1360
  self, ctx: ASLParser.Assign_decl_bodyContext
1361
1361
  ) -> list[AssignDeclBinding]:
1362
- bindings: list[AssignDeclBinding] = list()
1362
+ bindings: list[AssignDeclBinding] = []
1363
1363
  for child in ctx.children:
1364
- cmp: Optional[Component] = self.visit(child)
1364
+ cmp: Component | None = self.visit(child)
1365
1365
  if isinstance(cmp, AssignDeclBinding):
1366
1366
  bindings.append(cmp)
1367
1367
  return bindings
@@ -1414,9 +1414,9 @@ class Preprocessor(ASLParserVisitor):
1414
1414
  def visitJsonata_template_value_array(
1415
1415
  self, ctx: ASLParser.Jsonata_template_value_arrayContext
1416
1416
  ) -> JSONataTemplateValueArray:
1417
- values: list[JSONataTemplateValue] = list()
1417
+ values: list[JSONataTemplateValue] = []
1418
1418
  for child in ctx.children:
1419
- cmp: Optional[Component] = self.visit(child)
1419
+ cmp: Component | None = self.visit(child)
1420
1420
  if isinstance(cmp, JSONataTemplateValue):
1421
1421
  values.append(cmp)
1422
1422
  return JSONataTemplateValueArray(values=values)
@@ -1424,9 +1424,9 @@ class Preprocessor(ASLParserVisitor):
1424
1424
  def visitJsonata_template_value_object(
1425
1425
  self, ctx: ASLParser.Jsonata_template_value_objectContext
1426
1426
  ) -> JSONataTemplateValueObject:
1427
- bindings: list[JSONataTemplateBinding] = list()
1427
+ bindings: list[JSONataTemplateBinding] = []
1428
1428
  for child in ctx.children:
1429
- cmp: Optional[Component] = self.visit(child)
1429
+ cmp: Component | None = self.visit(child)
1430
1430
  if isinstance(cmp, JSONataTemplateBinding):
1431
1431
  bindings.append(cmp)
1432
1432
  return JSONataTemplateValueObject(bindings=bindings)
@@ -1,5 +1,5 @@
1
1
  from collections import OrderedDict
2
- from typing import Any, Optional
2
+ from typing import Any
3
3
 
4
4
 
5
5
  class TypedProps:
@@ -18,7 +18,7 @@ class TypedProps:
18
18
  )
19
19
  self._instance_by_type[typ] = instance
20
20
 
21
- def get(self, typ: type, raise_on_missing: Optional[Exception] = None) -> Optional[Any]:
21
+ def get(self, typ: type, raise_on_missing: Exception | None = None) -> Any | None:
22
22
  if raise_on_missing and typ not in self._instance_by_type:
23
23
  raise raise_on_missing
24
24
  return self._instance_by_type.get(typ)
@@ -16,7 +16,7 @@ class VariableNamesIntrinsicStaticAnalyser(IntrinsicStaticAnalyser):
16
16
 
17
17
  def __init__(self):
18
18
  super().__init__()
19
- self._variable_names = list()
19
+ self._variable_names = []
20
20
 
21
21
  @staticmethod
22
22
  def process_and_get(definition: str) -> VariableNameList:
@@ -30,7 +30,7 @@ class VariableReferencesStaticAnalyser(StaticAnalyser):
30
30
 
31
31
  def __init__(self):
32
32
  super().__init__()
33
- self._fringe_state_names = list()
33
+ self._fringe_state_names = []
34
34
  self._variable_references = OrderedDict()
35
35
 
36
36
  def get_variable_references(self) -> VariableReferences:
@@ -54,7 +54,7 @@ class VariableReferencesStaticAnalyser(StaticAnalyser):
54
54
 
55
55
  def _put_variable_name(self, variable_name: VariableName) -> None:
56
56
  state_name = self._fringe_state_names[-1]
57
- variable_name_list: VariableNameList = self._variable_references.get(state_name, list())
57
+ variable_name_list: VariableNameList = self._variable_references.get(state_name, [])
58
58
  if variable_name in variable_name_list:
59
59
  return
60
60
  variable_name_list.append(variable_name)
@@ -1,7 +1,7 @@
1
1
  import datetime
2
2
  import json
3
3
  from json import JSONEncoder
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
 
7
7
  class _DateTimeEncoder(JSONEncoder):
@@ -12,5 +12,5 @@ class _DateTimeEncoder(JSONEncoder):
12
12
  return str(obj)
13
13
 
14
14
 
15
- def to_json_str(obj: Any, separators: Optional[tuple[str, str]] = None) -> str:
15
+ def to_json_str(obj: Any, separators: tuple[str, str] | None = None) -> str:
16
16
  return json.dumps(obj, cls=_DateTimeEncoder, separators=separators)
@@ -1,5 +1,5 @@
1
1
  import re
2
- from typing import Any, Final, Optional
2
+ from typing import Any, Final
3
3
 
4
4
  from jsonpath_ng.ext import parse
5
5
  from jsonpath_ng.jsonpath import Index
@@ -24,7 +24,7 @@ def _contains_slice_or_wildcard_array(path: str) -> bool:
24
24
  class NoSuchJsonPathError(Exception):
25
25
  json_path: Final[str]
26
26
  data: Final[Any]
27
- _message: Optional[str]
27
+ _message: str | None
28
28
 
29
29
  def __init__(self, json_path: str, data: Any):
30
30
  self.json_path = json_path
@@ -1,6 +1,6 @@
1
1
  import datetime
2
2
  from collections import deque
3
- from typing import Final, Optional
3
+ from typing import Final
4
4
 
5
5
  from localstack.aws.api.stepfunctions import (
6
6
  ActivityListItem,
@@ -26,16 +26,16 @@ class Activity:
26
26
  creation_date: Final[Timestamp]
27
27
  _tasks: Final[deque[ActivityTask]]
28
28
 
29
- def __init__(self, arn: Arn, name: Name, creation_date: Optional[Timestamp] = None):
29
+ def __init__(self, arn: Arn, name: Name, creation_date: Timestamp | None = None):
30
30
  self.arn = arn
31
31
  self.name = name
32
- self.creation_date = creation_date or datetime.datetime.now(tz=datetime.timezone.utc)
32
+ self.creation_date = creation_date or datetime.datetime.now(tz=datetime.UTC)
33
33
  self._tasks = deque()
34
34
 
35
35
  def add_task(self, task: ActivityTask):
36
36
  self._tasks.append(task)
37
37
 
38
- def get_task(self) -> Optional[ActivityTask]:
38
+ def get_task(self) -> ActivityTask | None:
39
39
  return self._tasks.popleft()
40
40
 
41
41
  def to_describe_activity_output(self) -> DescribeActivityOutput:
@@ -4,7 +4,7 @@ import copy
4
4
  import datetime
5
5
  import random
6
6
  import threading
7
- from typing import Final, Optional
7
+ from typing import Final
8
8
 
9
9
  from localstack.aws.api.stepfunctions import (
10
10
  AliasDescription,
@@ -20,9 +20,9 @@ from localstack.utils.strings import token_generator
20
20
 
21
21
  class Alias:
22
22
  _mutex: Final[threading.Lock]
23
- update_date: Optional[datetime.datetime]
23
+ update_date: datetime.datetime | None
24
24
  name: Final[CharacterRestrictedName]
25
- _description: Optional[AliasDescription]
25
+ _description: AliasDescription | None
26
26
  _routing_configuration_list: RoutingConfigurationList
27
27
  _state_machine_version_arns: list[Arn]
28
28
  _execution_probability_distribution: list[int]
@@ -34,7 +34,7 @@ class Alias:
34
34
  self,
35
35
  state_machine_arn: Arn,
36
36
  name: CharacterRestrictedName,
37
- description: Optional[AliasDescription],
37
+ description: AliasDescription | None,
38
38
  routing_configuration_list: RoutingConfigurationList,
39
39
  ):
40
40
  self._mutex = threading.Lock()
@@ -66,7 +66,7 @@ class Alias:
66
66
 
67
67
  @staticmethod
68
68
  def _get_mutex_date() -> datetime.datetime:
69
- return datetime.datetime.now(tz=datetime.timezone.utc)
69
+ return datetime.datetime.now(tz=datetime.UTC)
70
70
 
71
71
  def get_routing_configuration_list(self) -> RoutingConfigurationList:
72
72
  return copy.deepcopy(self._routing_configuration_list)
@@ -77,7 +77,7 @@ class Alias:
77
77
 
78
78
  def update(
79
79
  self,
80
- description: Optional[AliasDescription],
80
+ description: AliasDescription | None,
81
81
  routing_configuration_list: RoutingConfigurationList,
82
82
  ) -> None:
83
83
  with self._mutex:
@@ -88,8 +88,8 @@ class Alias:
88
88
 
89
89
  if routing_configuration_list:
90
90
  self._routing_configuration_list = routing_configuration_list
91
- self._state_machine_version_arns = list()
92
- self._execution_probability_distribution = list()
91
+ self._state_machine_version_arns = []
92
+ self._execution_probability_distribution = []
93
93
  for routing_configuration in routing_configuration_list:
94
94
  self._state_machine_version_arns.append(
95
95
  routing_configuration["stateMachineVersionArn"]
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import datetime
4
4
  import json
5
5
  import logging
6
- from typing import Final, Optional
6
+ from typing import Final
7
7
 
8
8
  from localstack.aws.api.events import PutEventsRequestEntry
9
9
  from localstack.aws.api.stepfunctions import (
@@ -72,7 +72,7 @@ class BaseExecutionWorkerCommunication(ExecutionWorkerCommunication):
72
72
 
73
73
  def _reflect_execution_status(self):
74
74
  exit_program_state: ProgramState = self.execution.exec_worker.env.program_state()
75
- self.execution.stop_date = datetime.datetime.now(tz=datetime.timezone.utc)
75
+ self.execution.stop_date = datetime.datetime.now(tz=datetime.UTC)
76
76
  if isinstance(exit_program_state, ProgramEnded):
77
77
  self.execution.exec_status = ExecutionStatus.SUCCEEDED
78
78
  self.execution.output = self.execution.exec_worker.env.states.get_input()
@@ -105,27 +105,27 @@ class Execution:
105
105
 
106
106
  state_machine: Final[StateMachineInstance]
107
107
  state_machine_arn: Final[Arn]
108
- state_machine_version_arn: Final[Optional[Arn]]
109
- state_machine_alias_arn: Final[Optional[Arn]]
108
+ state_machine_version_arn: Final[Arn | None]
109
+ state_machine_alias_arn: Final[Arn | None]
110
110
 
111
- mock_test_case: Final[Optional[MockTestCase]]
111
+ mock_test_case: Final[MockTestCase | None]
112
112
 
113
113
  start_date: Final[Timestamp]
114
- input_data: Final[Optional[json]]
115
- input_details: Final[Optional[CloudWatchEventsExecutionDataDetails]]
116
- trace_header: Final[Optional[TraceHeader]]
117
- _cloud_watch_logging_session: Final[Optional[CloudWatchLoggingSession]]
114
+ input_data: Final[json | None]
115
+ input_details: Final[CloudWatchEventsExecutionDataDetails | None]
116
+ trace_header: Final[TraceHeader | None]
117
+ _cloud_watch_logging_session: Final[CloudWatchLoggingSession | None]
118
118
 
119
- exec_status: Optional[ExecutionStatus]
120
- stop_date: Optional[Timestamp]
119
+ exec_status: ExecutionStatus | None
120
+ stop_date: Timestamp | None
121
121
 
122
- output: Optional[json]
123
- output_details: Optional[CloudWatchEventsExecutionDataDetails]
122
+ output: json | None
123
+ output_details: CloudWatchEventsExecutionDataDetails | None
124
124
 
125
- error: Optional[SensitiveError]
126
- cause: Optional[SensitiveCause]
125
+ error: SensitiveError | None
126
+ cause: SensitiveCause | None
127
127
 
128
- exec_worker: Optional[ExecutionWorker]
128
+ exec_worker: ExecutionWorker | None
129
129
 
130
130
  _activity_store: dict[Arn, Activity]
131
131
 
@@ -139,12 +139,12 @@ class Execution:
139
139
  region_name: str,
140
140
  state_machine: StateMachineInstance,
141
141
  start_date: Timestamp,
142
- cloud_watch_logging_session: Optional[CloudWatchLoggingSession],
142
+ cloud_watch_logging_session: CloudWatchLoggingSession | None,
143
143
  activity_store: dict[Arn, Activity],
144
- input_data: Optional[json] = None,
145
- trace_header: Optional[TraceHeader] = None,
146
- state_machine_alias_arn: Optional[Arn] = None,
147
- mock_test_case: Optional[MockTestCase] = None,
144
+ input_data: json | None = None,
145
+ trace_header: TraceHeader | None = None,
146
+ state_machine_alias_arn: Arn | None = None,
147
+ mock_test_case: MockTestCase | None = None,
148
148
  ):
149
149
  self.name = name
150
150
  self.sm_type = sm_type
@@ -258,7 +258,7 @@ class Execution:
258
258
 
259
259
  def to_history_output(self) -> GetExecutionHistoryOutput:
260
260
  env = self.exec_worker.env
261
- event_history: HistoryEventList = list()
261
+ event_history: HistoryEventList = []
262
262
  if env is not None:
263
263
  # The execution has not started yet.
264
264
  event_history: HistoryEventList = env.event_manager.get_event_history()
@@ -267,9 +267,7 @@ class Execution:
267
267
  @staticmethod
268
268
  def _to_serialized_date(timestamp: datetime.datetime) -> str:
269
269
  """See test in tests.aws.services.stepfunctions.v2.base.test_base.TestSnfBase.test_execution_dateformat"""
270
- return (
271
- f"{timestamp.astimezone(datetime.timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3]}Z"
272
- )
270
+ return f"{timestamp.astimezone(datetime.UTC).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3]}Z"
273
271
 
274
272
  def _get_start_execution_worker_comm(self) -> BaseExecutionWorkerCommunication:
275
273
  return BaseExecutionWorkerCommunication(self)
@@ -318,14 +316,14 @@ class Execution:
318
316
  self.publish_execution_status_change_event()
319
317
  self.exec_worker.start()
320
318
 
321
- def stop(self, stop_date: datetime.datetime, error: Optional[str], cause: Optional[str]):
322
- exec_worker: Optional[ExecutionWorker] = self.exec_worker
319
+ def stop(self, stop_date: datetime.datetime, error: str | None, cause: str | None):
320
+ exec_worker: ExecutionWorker | None = self.exec_worker
323
321
  if exec_worker:
324
322
  exec_worker.stop(stop_date=stop_date, cause=cause, error=error)
325
323
 
326
324
  def publish_execution_status_change_event(self):
327
325
  input_value = (
328
- dict() if not self.input_data else to_json_str(self.input_data, separators=(",", ":"))
326
+ {} if not self.input_data else to_json_str(self.input_data, separators=(",", ":"))
329
327
  )
330
328
  output_value = (
331
329
  None if self.output is None else to_json_str(self.output, separators=(",", ":"))
@@ -358,10 +356,11 @@ class Execution:
358
356
  try:
359
357
  self._get_events_client().put_events(Entries=[entry])
360
358
  except Exception:
361
- LOG.exception(
359
+ LOG.error(
362
360
  "Unable to send notification of Entry='%s' for Step Function execution with Arn='%s' to EventBridge.",
363
361
  entry,
364
362
  self.exec_arn,
363
+ exc_info=LOG.isEnabledFor(logging.DEBUG),
365
364
  )
366
365
 
367
366
 
@@ -380,7 +379,7 @@ class SyncExecutionWorkerCommunication(BaseExecutionWorkerCommunication):
380
379
 
381
380
 
382
381
  class SyncExecution(Execution):
383
- sync_execution_status: Optional[SyncExecutionStatus] = None
382
+ sync_execution_status: SyncExecutionStatus | None = None
384
383
 
385
384
  def _get_start_execution_worker(self) -> SyncExecutionWorker:
386
385
  return SyncExecutionWorker(
@@ -1,6 +1,6 @@
1
1
  import datetime
2
2
  from threading import Thread
3
- from typing import Final, Optional
3
+ from typing import Final
4
4
 
5
5
  from localstack.aws.api.stepfunctions import (
6
6
  Arn,
@@ -36,19 +36,19 @@ from localstack.utils.common import TMP_THREADS
36
36
  class ExecutionWorker:
37
37
  _evaluation_details: Final[EvaluationDetails]
38
38
  _execution_communication: Final[ExecutionWorkerCommunication]
39
- _cloud_watch_logging_session: Final[Optional[CloudWatchLoggingSession]]
40
- _mock_test_case: Final[Optional[MockTestCase]]
39
+ _cloud_watch_logging_session: Final[CloudWatchLoggingSession | None]
40
+ _mock_test_case: Final[MockTestCase | None]
41
41
  _activity_store: dict[Arn, Activity]
42
42
 
43
- env: Optional[Environment]
43
+ env: Environment | None
44
44
 
45
45
  def __init__(
46
46
  self,
47
47
  evaluation_details: EvaluationDetails,
48
48
  exec_comm: ExecutionWorkerCommunication,
49
- cloud_watch_logging_session: Optional[CloudWatchLoggingSession],
49
+ cloud_watch_logging_session: CloudWatchLoggingSession | None,
50
50
  activity_store: dict[Arn, Activity],
51
- mock_test_case: Optional[MockTestCase] = None,
51
+ mock_test_case: MockTestCase | None = None,
52
52
  ):
53
53
  self._evaluation_details = evaluation_details
54
54
  self._execution_communication = exec_comm
@@ -113,7 +113,7 @@ class ExecutionWorker:
113
113
  TMP_THREADS.append(execution_logic_thread)
114
114
  execution_logic_thread.start()
115
115
 
116
- def stop(self, stop_date: datetime.datetime, error: Optional[str], cause: Optional[str]):
116
+ def stop(self, stop_date: datetime.datetime, error: str | None, cause: str | None):
117
117
  self.env.set_stop(stop_date=stop_date, cause=cause, error=error)
118
118
 
119
119