localstack-core 4.6.1.dev74__py3-none-any.whl → 4.10.1.dev7__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.

Potentially problematic release.


This version of localstack-core might be problematic. Click here for more details.

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 +1524 -64
  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 +13 -0
  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 +40 -31
  57. localstack/constants.py +4 -29
  58. localstack/deprecations.py +5 -5
  59. localstack/dev/kubernetes/__main__.py +85 -5
  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 +286 -139
  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 +161 -31
  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 +8 -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 +31 -22
  175. localstack/services/cloudformation/v2/entities.py +65 -92
  176. localstack/services/cloudformation/v2/provider.py +553 -128
  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 +49 -8
  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 +48 -7
  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 +17 -11
  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 +4 -4
  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 +4 -4
  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 +22 -60
  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 -55
  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 +11 -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.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/METADATA +18 -14
  654. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/RECORD +663 -656
  655. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/entry_points.txt +8 -4
  656. localstack_core-4.10.1.dev7.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.dev74.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.dev74.data → localstack_core-4.10.1.dev7.data}/scripts/localstack +0 -0
  668. {localstack_core-4.6.1.dev74.data → localstack_core-4.10.1.dev7.data}/scripts/localstack-supervisor +0 -0
  669. {localstack_core-4.6.1.dev74.data → localstack_core-4.10.1.dev7.data}/scripts/localstack.bat +0 -0
  670. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/WHEEL +0 -0
  671. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/licenses/LICENSE.txt +0 -0
  672. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,4 @@
1
1
  import os
2
- from typing import List
3
2
 
4
3
  from localstack import config
5
4
  from localstack.constants import ARTIFACTS_REPO, MAVEN_REPO_URL
@@ -18,7 +17,8 @@ from localstack.utils.run import run
18
17
  DDB_AGENT_JAR_URL = f"{ARTIFACTS_REPO}/raw/e4e8c8e294b1fcda90c678ff6af5d5ebe1f091eb/dynamodb-local-patch/target/ddb-local-loader-0.2.jar"
19
18
  JAVASSIST_JAR_URL = f"{MAVEN_REPO_URL}/org/javassist/javassist/3.30.2-GA/javassist-3.30.2-GA.jar"
20
19
 
21
- DDBLOCAL_URL = "https://d1ni2b6xgvw0s0.cloudfront.net/v3.x/dynamodb_local_latest.zip"
20
+ # URL points to 2.x here - however the latest 3.x builds are available under this URL
21
+ DDBLOCAL_URL = "https://d1ni2b6xgvw0s0.cloudfront.net/v2.x/dynamodb_local_latest.zip"
22
22
 
23
23
 
24
24
  class DynamoDBLocalPackage(Package):
@@ -28,7 +28,7 @@ class DynamoDBLocalPackage(Package):
28
28
  def _get_installer(self, _) -> PackageInstaller:
29
29
  return DynamoDBLocalPackageInstaller()
30
30
 
31
- def get_versions(self) -> List[str]:
31
+ def get_versions(self) -> list[str]:
32
32
  return ["2"]
33
33
 
34
34
 
@@ -12,7 +12,6 @@ from concurrent.futures import ThreadPoolExecutor
12
12
  from contextlib import contextmanager
13
13
  from datetime import datetime
14
14
  from operator import itemgetter
15
- from typing import Dict, List, Optional
16
15
 
17
16
  import requests
18
17
  import werkzeug
@@ -48,6 +47,8 @@ from localstack.aws.api.dynamodb import (
48
47
  DeleteRequest,
49
48
  DeleteTableOutput,
50
49
  DescribeContinuousBackupsOutput,
50
+ DescribeContributorInsightsInput,
51
+ DescribeContributorInsightsOutput,
51
52
  DescribeGlobalTableOutput,
52
53
  DescribeKinesisStreamingDestinationOutput,
53
54
  DescribeTableOutput,
@@ -492,7 +493,7 @@ class ExpiredItemsWorker:
492
493
  def __init__(self) -> None:
493
494
  super().__init__()
494
495
  self.scheduler = Scheduler()
495
- self.thread: Optional[FuncThread] = None
496
+ self.thread: FuncThread | None = None
496
497
  self.mutex = threading.RLock()
497
498
 
498
499
  def start(self):
@@ -747,6 +748,9 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
747
748
  if "NumberOfDecreasesToday" not in table_description["ProvisionedThroughput"]:
748
749
  table_description["ProvisionedThroughput"]["NumberOfDecreasesToday"] = 0
749
750
 
751
+ if "WarmThroughput" in table_description:
752
+ table_description["WarmThroughput"]["Status"] = "UPDATING"
753
+
750
754
  tags = table_definitions.pop("Tags", [])
751
755
  if tags:
752
756
  get_store(context.account_id, context.region).TABLE_TAGS[table_arn] = {
@@ -764,6 +768,13 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
764
768
  ) -> DeleteTableOutput:
765
769
  global_table_region = self.get_global_table_region(context, table_name)
766
770
 
771
+ self.ensure_table_exists(
772
+ context.account_id,
773
+ global_table_region,
774
+ table_name,
775
+ error_message=f"Requested resource not found: Table: {table_name} not found",
776
+ )
777
+
767
778
  # Limitation note: On AWS, for a replicated table, if the source table is deleted, the replicated tables continue to exist.
768
779
  # This is not the case for LocalStack, where all replicated tables will also be removed if source is deleted.
769
780
 
@@ -796,7 +807,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
796
807
  store = get_store(context.account_id, context.region)
797
808
 
798
809
  # Update replication details
799
- replicas: Dict[RegionName, ReplicaDescription] = store.REPLICAS.get(table_name, {})
810
+ replicas: dict[RegionName, ReplicaDescription] = store.REPLICAS.get(table_name, {})
800
811
 
801
812
  replica_description_list = []
802
813
 
@@ -824,6 +835,9 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
824
835
  table_description["TableClassSummary"] = {
825
836
  "TableClass": table_definitions["TableClass"]
826
837
  }
838
+ if warm_throughput := table_definitions.get("WarmThroughput"):
839
+ table_description["WarmThroughput"] = warm_throughput.copy()
840
+ table_description["WarmThroughput"].setdefault("Status", "ACTIVE")
827
841
 
828
842
  if "GlobalSecondaryIndexes" in table_description:
829
843
  for gsi in table_description["GlobalSecondaryIndexes"]:
@@ -836,6 +850,17 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
836
850
  # Terraform depends on this parity for update operations
837
851
  gsi["ProvisionedThroughput"] = default_values | gsi.get("ProvisionedThroughput", {})
838
852
 
853
+ # Set defaults for warm throughput
854
+ if "WarmThroughput" not in table_description:
855
+ billing_mode = table_definitions.get("BillingMode") if table_definitions else None
856
+ table_description["WarmThroughput"] = {
857
+ "ReadUnitsPerSecond": 12000 if billing_mode == "PAY_PER_REQUEST" else 5,
858
+ "WriteUnitsPerSecond": 4000 if billing_mode == "PAY_PER_REQUEST" else 5,
859
+ }
860
+ table_description["WarmThroughput"]["Status"] = (
861
+ table_description.get("TableStatus") or "ACTIVE"
862
+ )
863
+
839
864
  return DescribeTableOutput(
840
865
  Table=select_from_typed_dict(TableDescription, table_description)
841
866
  )
@@ -865,7 +890,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
865
890
  store = get_store(context.account_id, global_table_region)
866
891
 
867
892
  # Dict with source region to set of replicated regions
868
- replicas: Dict[RegionName, ReplicaDescription] = store.REPLICAS.get(table_name, {})
893
+ replicas: dict[RegionName, ReplicaDescription] = store.REPLICAS.get(table_name, {})
869
894
 
870
895
  for replica_update in replica_updates:
871
896
  for key, details in replica_update.items():
@@ -956,6 +981,22 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
956
981
 
957
982
  return response
958
983
 
984
+ #
985
+ # Contributor Insights
986
+ #
987
+
988
+ @handler("DescribeContributorInsights", expand=False)
989
+ def describe_contributor_insights(
990
+ self,
991
+ context: RequestContext,
992
+ describe_contributor_insights_input: DescribeContributorInsightsInput,
993
+ ) -> DescribeContributorInsightsOutput:
994
+ return DescribeContributorInsightsOutput(
995
+ TableName=describe_contributor_insights_input["TableName"],
996
+ IndexName=describe_contributor_insights_input.get("IndexName"),
997
+ ContributorInsightsStatus="DISABLED",
998
+ )
999
+
959
1000
  #
960
1001
  # Item ops
961
1002
  #
@@ -1512,7 +1553,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
1512
1553
  replication_group: ReplicaList,
1513
1554
  **kwargs,
1514
1555
  ) -> CreateGlobalTableOutput:
1515
- global_tables: Dict = get_store(context.account_id, context.region).GLOBAL_TABLES
1556
+ global_tables: dict = get_store(context.account_id, context.region).GLOBAL_TABLES
1516
1557
  if global_table_name in global_tables:
1517
1558
  raise GlobalTableAlreadyExistsException("Global table with this name already exists")
1518
1559
  replication_group = [grp.copy() for grp in replication_group or []]
@@ -1891,7 +1932,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
1891
1932
  return context.region
1892
1933
 
1893
1934
  @staticmethod
1894
- def prepare_request_headers(headers: Dict, account_id: str, region_name: str):
1935
+ def prepare_request_headers(headers: dict, account_id: str, region_name: str):
1895
1936
  """
1896
1937
  Modify the Credentials field of Authorization header to achieve namespacing in DynamoDBLocal.
1897
1938
  """
@@ -1908,7 +1949,7 @@ class DynamoDBProvider(DynamodbApi, ServiceLifecycleHook):
1908
1949
  flags=re.IGNORECASE,
1909
1950
  )
1910
1951
 
1911
- def fix_consumed_capacity(self, request: Dict, result: Dict):
1952
+ def fix_consumed_capacity(self, request: dict, result: dict):
1912
1953
  # make sure we append 'ConsumedCapacity', which is properly
1913
1954
  # returned by dynalite, but not by AWS's DynamoDBLocal
1914
1955
  table_name = request.get("TableName")
@@ -2282,7 +2323,7 @@ def get_updated_records(
2282
2323
  account_id: str,
2283
2324
  region_name: str,
2284
2325
  table_name: str,
2285
- existing_items: List,
2326
+ existing_items: list,
2286
2327
  server_url: str,
2287
2328
  table_stream_type: TableStreamType,
2288
2329
  ) -> RecordsMap:
@@ -2,7 +2,7 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  from pathlib import Path
5
- from typing import Optional, TypedDict
5
+ from typing import TypedDict
6
6
 
7
7
  import localstack.services.cloudformation.provider_utils as util
8
8
  from localstack.services.cloudformation.resource_provider import (
@@ -14,125 +14,125 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class DynamoDBGlobalTableProperties(TypedDict):
17
- AttributeDefinitions: Optional[list[AttributeDefinition]]
18
- KeySchema: Optional[list[KeySchema]]
19
- Replicas: Optional[list[ReplicaSpecification]]
20
- Arn: Optional[str]
21
- BillingMode: Optional[str]
22
- GlobalSecondaryIndexes: Optional[list[GlobalSecondaryIndex]]
23
- LocalSecondaryIndexes: Optional[list[LocalSecondaryIndex]]
24
- SSESpecification: Optional[SSESpecification]
25
- StreamArn: Optional[str]
26
- StreamSpecification: Optional[StreamSpecification]
27
- TableId: Optional[str]
28
- TableName: Optional[str]
29
- TimeToLiveSpecification: Optional[TimeToLiveSpecification]
30
- WriteProvisionedThroughputSettings: Optional[WriteProvisionedThroughputSettings]
17
+ AttributeDefinitions: list[AttributeDefinition] | None
18
+ KeySchema: list[KeySchema] | None
19
+ Replicas: list[ReplicaSpecification] | None
20
+ Arn: str | None
21
+ BillingMode: str | None
22
+ GlobalSecondaryIndexes: list[GlobalSecondaryIndex] | None
23
+ LocalSecondaryIndexes: list[LocalSecondaryIndex] | None
24
+ SSESpecification: SSESpecification | None
25
+ StreamArn: str | None
26
+ StreamSpecification: StreamSpecification | None
27
+ TableId: str | None
28
+ TableName: str | None
29
+ TimeToLiveSpecification: TimeToLiveSpecification | None
30
+ WriteProvisionedThroughputSettings: WriteProvisionedThroughputSettings | None
31
31
 
32
32
 
33
33
  class AttributeDefinition(TypedDict):
34
- AttributeName: Optional[str]
35
- AttributeType: Optional[str]
34
+ AttributeName: str | None
35
+ AttributeType: str | None
36
36
 
37
37
 
38
38
  class KeySchema(TypedDict):
39
- AttributeName: Optional[str]
40
- KeyType: Optional[str]
39
+ AttributeName: str | None
40
+ KeyType: str | None
41
41
 
42
42
 
43
43
  class Projection(TypedDict):
44
- NonKeyAttributes: Optional[list[str]]
45
- ProjectionType: Optional[str]
44
+ NonKeyAttributes: list[str] | None
45
+ ProjectionType: str | None
46
46
 
47
47
 
48
48
  class TargetTrackingScalingPolicyConfiguration(TypedDict):
49
- TargetValue: Optional[float]
50
- DisableScaleIn: Optional[bool]
51
- ScaleInCooldown: Optional[int]
52
- ScaleOutCooldown: Optional[int]
49
+ TargetValue: float | None
50
+ DisableScaleIn: bool | None
51
+ ScaleInCooldown: int | None
52
+ ScaleOutCooldown: int | None
53
53
 
54
54
 
55
55
  class CapacityAutoScalingSettings(TypedDict):
56
- MaxCapacity: Optional[int]
57
- MinCapacity: Optional[int]
58
- TargetTrackingScalingPolicyConfiguration: Optional[TargetTrackingScalingPolicyConfiguration]
59
- SeedCapacity: Optional[int]
56
+ MaxCapacity: int | None
57
+ MinCapacity: int | None
58
+ TargetTrackingScalingPolicyConfiguration: TargetTrackingScalingPolicyConfiguration | None
59
+ SeedCapacity: int | None
60
60
 
61
61
 
62
62
  class WriteProvisionedThroughputSettings(TypedDict):
63
- WriteCapacityAutoScalingSettings: Optional[CapacityAutoScalingSettings]
63
+ WriteCapacityAutoScalingSettings: CapacityAutoScalingSettings | None
64
64
 
65
65
 
66
66
  class GlobalSecondaryIndex(TypedDict):
67
- IndexName: Optional[str]
68
- KeySchema: Optional[list[KeySchema]]
69
- Projection: Optional[Projection]
70
- WriteProvisionedThroughputSettings: Optional[WriteProvisionedThroughputSettings]
67
+ IndexName: str | None
68
+ KeySchema: list[KeySchema] | None
69
+ Projection: Projection | None
70
+ WriteProvisionedThroughputSettings: WriteProvisionedThroughputSettings | None
71
71
 
72
72
 
73
73
  class LocalSecondaryIndex(TypedDict):
74
- IndexName: Optional[str]
75
- KeySchema: Optional[list[KeySchema]]
76
- Projection: Optional[Projection]
74
+ IndexName: str | None
75
+ KeySchema: list[KeySchema] | None
76
+ Projection: Projection | None
77
77
 
78
78
 
79
79
  class ContributorInsightsSpecification(TypedDict):
80
- Enabled: Optional[bool]
80
+ Enabled: bool | None
81
81
 
82
82
 
83
83
  class ReadProvisionedThroughputSettings(TypedDict):
84
- ReadCapacityAutoScalingSettings: Optional[CapacityAutoScalingSettings]
85
- ReadCapacityUnits: Optional[int]
84
+ ReadCapacityAutoScalingSettings: CapacityAutoScalingSettings | None
85
+ ReadCapacityUnits: int | None
86
86
 
87
87
 
88
88
  class ReplicaGlobalSecondaryIndexSpecification(TypedDict):
89
- IndexName: Optional[str]
90
- ContributorInsightsSpecification: Optional[ContributorInsightsSpecification]
91
- ReadProvisionedThroughputSettings: Optional[ReadProvisionedThroughputSettings]
89
+ IndexName: str | None
90
+ ContributorInsightsSpecification: ContributorInsightsSpecification | None
91
+ ReadProvisionedThroughputSettings: ReadProvisionedThroughputSettings | None
92
92
 
93
93
 
94
94
  class PointInTimeRecoverySpecification(TypedDict):
95
- PointInTimeRecoveryEnabled: Optional[bool]
95
+ PointInTimeRecoveryEnabled: bool | None
96
96
 
97
97
 
98
98
  class ReplicaSSESpecification(TypedDict):
99
- KMSMasterKeyId: Optional[str]
99
+ KMSMasterKeyId: str | None
100
100
 
101
101
 
102
102
  class Tag(TypedDict):
103
- Key: Optional[str]
104
- Value: Optional[str]
103
+ Key: str | None
104
+ Value: str | None
105
105
 
106
106
 
107
107
  class KinesisStreamSpecification(TypedDict):
108
- StreamArn: Optional[str]
108
+ StreamArn: str | None
109
109
 
110
110
 
111
111
  class ReplicaSpecification(TypedDict):
112
- Region: Optional[str]
113
- ContributorInsightsSpecification: Optional[ContributorInsightsSpecification]
114
- DeletionProtectionEnabled: Optional[bool]
115
- GlobalSecondaryIndexes: Optional[list[ReplicaGlobalSecondaryIndexSpecification]]
116
- KinesisStreamSpecification: Optional[KinesisStreamSpecification]
117
- PointInTimeRecoverySpecification: Optional[PointInTimeRecoverySpecification]
118
- ReadProvisionedThroughputSettings: Optional[ReadProvisionedThroughputSettings]
119
- SSESpecification: Optional[ReplicaSSESpecification]
120
- TableClass: Optional[str]
121
- Tags: Optional[list[Tag]]
112
+ Region: str | None
113
+ ContributorInsightsSpecification: ContributorInsightsSpecification | None
114
+ DeletionProtectionEnabled: bool | None
115
+ GlobalSecondaryIndexes: list[ReplicaGlobalSecondaryIndexSpecification] | None
116
+ KinesisStreamSpecification: KinesisStreamSpecification | None
117
+ PointInTimeRecoverySpecification: PointInTimeRecoverySpecification | None
118
+ ReadProvisionedThroughputSettings: ReadProvisionedThroughputSettings | None
119
+ SSESpecification: ReplicaSSESpecification | None
120
+ TableClass: str | None
121
+ Tags: list[Tag] | None
122
122
 
123
123
 
124
124
  class SSESpecification(TypedDict):
125
- SSEEnabled: Optional[bool]
126
- SSEType: Optional[str]
125
+ SSEEnabled: bool | None
126
+ SSEType: str | None
127
127
 
128
128
 
129
129
  class StreamSpecification(TypedDict):
130
- StreamViewType: Optional[str]
130
+ StreamViewType: str | None
131
131
 
132
132
 
133
133
  class TimeToLiveSpecification(TypedDict):
134
- Enabled: Optional[bool]
135
- AttributeName: Optional[str]
134
+ Enabled: bool | None
135
+ AttributeName: str | None
136
136
 
137
137
 
138
138
  REPEATED_INVOCATION = "repeated_invocation"
@@ -1,5 +1,3 @@
1
- from typing import Optional, Type
2
-
3
1
  from localstack.services.cloudformation.resource_provider import (
4
2
  CloudFormationResourceProviderPlugin,
5
3
  ResourceProvider,
@@ -10,7 +8,7 @@ class DynamoDBGlobalTableProviderPlugin(CloudFormationResourceProviderPlugin):
10
8
  name = "AWS::DynamoDB::GlobalTable"
11
9
 
12
10
  def __init__(self):
13
- self.factory: Optional[Type[ResourceProvider]] = None
11
+ self.factory: type[ResourceProvider] | None = None
14
12
 
15
13
  def load(self):
16
14
  from localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable import (
@@ -2,7 +2,7 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  from pathlib import Path
5
- from typing import Optional, TypedDict
5
+ from typing import TypedDict
6
6
 
7
7
  import localstack.services.cloudformation.provider_utils as util
8
8
  from localstack.services.cloudformation.resource_provider import (
@@ -14,113 +14,113 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class DynamoDBTableProperties(TypedDict):
17
- KeySchema: Optional[list[KeySchema] | dict]
18
- Arn: Optional[str]
19
- AttributeDefinitions: Optional[list[AttributeDefinition]]
20
- BillingMode: Optional[str]
21
- ContributorInsightsSpecification: Optional[ContributorInsightsSpecification]
22
- DeletionProtectionEnabled: Optional[bool]
23
- GlobalSecondaryIndexes: Optional[list[GlobalSecondaryIndex]]
24
- ImportSourceSpecification: Optional[ImportSourceSpecification]
25
- KinesisStreamSpecification: Optional[KinesisStreamSpecification]
26
- LocalSecondaryIndexes: Optional[list[LocalSecondaryIndex]]
27
- PointInTimeRecoverySpecification: Optional[PointInTimeRecoverySpecification]
28
- ProvisionedThroughput: Optional[ProvisionedThroughput]
29
- SSESpecification: Optional[SSESpecification]
30
- StreamArn: Optional[str]
31
- StreamSpecification: Optional[StreamSpecification]
32
- TableClass: Optional[str]
33
- TableName: Optional[str]
34
- Tags: Optional[list[Tag]]
35
- TimeToLiveSpecification: Optional[TimeToLiveSpecification]
17
+ KeySchema: list[KeySchema] | dict | None
18
+ Arn: str | None
19
+ AttributeDefinitions: list[AttributeDefinition] | None
20
+ BillingMode: str | None
21
+ ContributorInsightsSpecification: ContributorInsightsSpecification | None
22
+ DeletionProtectionEnabled: bool | None
23
+ GlobalSecondaryIndexes: list[GlobalSecondaryIndex] | None
24
+ ImportSourceSpecification: ImportSourceSpecification | None
25
+ KinesisStreamSpecification: KinesisStreamSpecification | None
26
+ LocalSecondaryIndexes: list[LocalSecondaryIndex] | None
27
+ PointInTimeRecoverySpecification: PointInTimeRecoverySpecification | None
28
+ ProvisionedThroughput: ProvisionedThroughput | None
29
+ SSESpecification: SSESpecification | None
30
+ StreamArn: str | None
31
+ StreamSpecification: StreamSpecification | None
32
+ TableClass: str | None
33
+ TableName: str | None
34
+ Tags: list[Tag] | None
35
+ TimeToLiveSpecification: TimeToLiveSpecification | None
36
36
 
37
37
 
38
38
  class AttributeDefinition(TypedDict):
39
- AttributeName: Optional[str]
40
- AttributeType: Optional[str]
39
+ AttributeName: str | None
40
+ AttributeType: str | None
41
41
 
42
42
 
43
43
  class KeySchema(TypedDict):
44
- AttributeName: Optional[str]
45
- KeyType: Optional[str]
44
+ AttributeName: str | None
45
+ KeyType: str | None
46
46
 
47
47
 
48
48
  class Projection(TypedDict):
49
- NonKeyAttributes: Optional[list[str]]
50
- ProjectionType: Optional[str]
49
+ NonKeyAttributes: list[str] | None
50
+ ProjectionType: str | None
51
51
 
52
52
 
53
53
  class ProvisionedThroughput(TypedDict):
54
- ReadCapacityUnits: Optional[int]
55
- WriteCapacityUnits: Optional[int]
54
+ ReadCapacityUnits: int | None
55
+ WriteCapacityUnits: int | None
56
56
 
57
57
 
58
58
  class ContributorInsightsSpecification(TypedDict):
59
- Enabled: Optional[bool]
59
+ Enabled: bool | None
60
60
 
61
61
 
62
62
  class GlobalSecondaryIndex(TypedDict):
63
- IndexName: Optional[str]
64
- KeySchema: Optional[list[KeySchema]]
65
- Projection: Optional[Projection]
66
- ContributorInsightsSpecification: Optional[ContributorInsightsSpecification]
67
- ProvisionedThroughput: Optional[ProvisionedThroughput]
63
+ IndexName: str | None
64
+ KeySchema: list[KeySchema] | None
65
+ Projection: Projection | None
66
+ ContributorInsightsSpecification: ContributorInsightsSpecification | None
67
+ ProvisionedThroughput: ProvisionedThroughput | None
68
68
 
69
69
 
70
70
  class LocalSecondaryIndex(TypedDict):
71
- IndexName: Optional[str]
72
- KeySchema: Optional[list[KeySchema]]
73
- Projection: Optional[Projection]
71
+ IndexName: str | None
72
+ KeySchema: list[KeySchema] | None
73
+ Projection: Projection | None
74
74
 
75
75
 
76
76
  class PointInTimeRecoverySpecification(TypedDict):
77
- PointInTimeRecoveryEnabled: Optional[bool]
77
+ PointInTimeRecoveryEnabled: bool | None
78
78
 
79
79
 
80
80
  class SSESpecification(TypedDict):
81
- SSEEnabled: Optional[bool]
82
- KMSMasterKeyId: Optional[str]
83
- SSEType: Optional[str]
81
+ SSEEnabled: bool | None
82
+ KMSMasterKeyId: str | None
83
+ SSEType: str | None
84
84
 
85
85
 
86
86
  class StreamSpecification(TypedDict):
87
- StreamViewType: Optional[str]
87
+ StreamViewType: str | None
88
88
 
89
89
 
90
90
  class Tag(TypedDict):
91
- Key: Optional[str]
92
- Value: Optional[str]
91
+ Key: str | None
92
+ Value: str | None
93
93
 
94
94
 
95
95
  class TimeToLiveSpecification(TypedDict):
96
- AttributeName: Optional[str]
97
- Enabled: Optional[bool]
96
+ AttributeName: str | None
97
+ Enabled: bool | None
98
98
 
99
99
 
100
100
  class KinesisStreamSpecification(TypedDict):
101
- StreamArn: Optional[str]
101
+ StreamArn: str | None
102
102
 
103
103
 
104
104
  class S3BucketSource(TypedDict):
105
- S3Bucket: Optional[str]
106
- S3BucketOwner: Optional[str]
107
- S3KeyPrefix: Optional[str]
105
+ S3Bucket: str | None
106
+ S3BucketOwner: str | None
107
+ S3KeyPrefix: str | None
108
108
 
109
109
 
110
110
  class Csv(TypedDict):
111
- Delimiter: Optional[str]
112
- HeaderList: Optional[list[str]]
111
+ Delimiter: str | None
112
+ HeaderList: list[str] | None
113
113
 
114
114
 
115
115
  class InputFormatOptions(TypedDict):
116
- Csv: Optional[Csv]
116
+ Csv: Csv | None
117
117
 
118
118
 
119
119
  class ImportSourceSpecification(TypedDict):
120
- InputFormat: Optional[str]
121
- S3BucketSource: Optional[S3BucketSource]
122
- InputCompressionType: Optional[str]
123
- InputFormatOptions: Optional[InputFormatOptions]
120
+ InputFormat: str | None
121
+ S3BucketSource: S3BucketSource | None
122
+ InputCompressionType: str | None
123
+ InputFormatOptions: InputFormatOptions | None
124
124
 
125
125
 
126
126
  REPEATED_INVOCATION = "repeated_invocation"
@@ -1,5 +1,3 @@
1
- from typing import Optional, Type
2
-
3
1
  from localstack.services.cloudformation.resource_provider import (
4
2
  CloudFormationResourceProviderPlugin,
5
3
  ResourceProvider,
@@ -10,7 +8,7 @@ class DynamoDBTableProviderPlugin(CloudFormationResourceProviderPlugin):
10
8
  name = "AWS::DynamoDB::Table"
11
9
 
12
10
  def __init__(self):
13
- self.factory: Optional[Type[ResourceProvider]] = None
11
+ self.factory: type[ResourceProvider] | None = None
14
12
 
15
13
  def load(self):
16
14
  from localstack.services.dynamodb.resource_providers.aws_dynamodb_table import (
@@ -162,7 +162,7 @@ class DynamodbServer(Server):
162
162
  cmd = [
163
163
  "java",
164
164
  *self._get_java_vm_options(),
165
- "-Xmx%s" % self.heap_size,
165
+ f"-Xmx{self.heap_size}",
166
166
  f"-javaagent:{dynamodblocal_package.get_installer().get_ddb_agent_jar_path()}",
167
167
  f"-Djava.library.path={self.library_path}",
168
168
  "-jar",
@@ -219,7 +219,7 @@ class DynamodbServer(Server):
219
219
  aws_secret_access_key=DEFAULT_AWS_ACCOUNT_ID,
220
220
  ).dynamodb.list_tables()
221
221
  except Exception:
222
- LOG.exception("DynamoDB health check failed")
222
+ LOG.error("DynamoDB health check failed", exc_info=LOG.isEnabledFor(logging.DEBUG))
223
223
  if expect_shutdown:
224
224
  assert out is None
225
225
  else: