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
@@ -289,22 +289,21 @@ class ApiStage(TypedDict, total=False):
289
289
 
290
290
 
291
291
  ListOfARNs = List[ProviderARN]
292
- Authorizer = TypedDict(
293
- "Authorizer",
294
- {
295
- "id": Optional[String],
296
- "name": Optional[String],
297
- "type": Optional[AuthorizerType],
298
- "providerARNs": Optional[ListOfARNs],
299
- "authType": Optional[String],
300
- "authorizerUri": Optional[String],
301
- "authorizerCredentials": Optional[String],
302
- "identitySource": Optional[String],
303
- "identityValidationExpression": Optional[String],
304
- "authorizerResultTtlInSeconds": Optional[NullableInteger],
305
- },
306
- total=False,
307
- )
292
+
293
+
294
+ class Authorizer(TypedDict, total=False):
295
+ id: Optional[String]
296
+ name: Optional[String]
297
+ type: Optional[AuthorizerType]
298
+ providerARNs: Optional[ListOfARNs]
299
+ authType: Optional[String]
300
+ authorizerUri: Optional[String]
301
+ authorizerCredentials: Optional[String]
302
+ identitySource: Optional[String]
303
+ identityValidationExpression: Optional[String]
304
+ authorizerResultTtlInSeconds: Optional[NullableInteger]
305
+
306
+
308
307
  ListOfAuthorizer = List[Authorizer]
309
308
 
310
309
 
@@ -373,22 +372,17 @@ class CreateApiKeyRequest(ServiceRequest):
373
372
  tags: Optional[MapOfStringToString]
374
373
 
375
374
 
376
- CreateAuthorizerRequest = TypedDict(
377
- "CreateAuthorizerRequest",
378
- {
379
- "restApiId": String,
380
- "name": String,
381
- "type": AuthorizerType,
382
- "providerARNs": Optional[ListOfARNs],
383
- "authType": Optional[String],
384
- "authorizerUri": Optional[String],
385
- "authorizerCredentials": Optional[String],
386
- "identitySource": Optional[String],
387
- "identityValidationExpression": Optional[String],
388
- "authorizerResultTtlInSeconds": Optional[NullableInteger],
389
- },
390
- total=False,
391
- )
375
+ class CreateAuthorizerRequest(TypedDict, total=False):
376
+ restApiId: String
377
+ name: String
378
+ type: AuthorizerType
379
+ providerARNs: Optional[ListOfARNs]
380
+ authType: Optional[String]
381
+ authorizerUri: Optional[String]
382
+ authorizerCredentials: Optional[String]
383
+ identitySource: Optional[String]
384
+ identityValidationExpression: Optional[String]
385
+ authorizerResultTtlInSeconds: Optional[NullableInteger]
392
386
 
393
387
 
394
388
  class CreateBasePathMappingRequest(ServiceRequest):
@@ -417,17 +411,12 @@ class CreateDeploymentRequest(ServiceRequest):
417
411
  tracingEnabled: Optional[NullableBoolean]
418
412
 
419
413
 
420
- DocumentationPartLocation = TypedDict(
421
- "DocumentationPartLocation",
422
- {
423
- "type": DocumentationPartType,
424
- "path": Optional[String],
425
- "method": Optional[String],
426
- "statusCode": Optional[DocumentationPartLocationStatusCode],
427
- "name": Optional[String],
428
- },
429
- total=False,
430
- )
414
+ class DocumentationPartLocation(TypedDict, total=False):
415
+ type: DocumentationPartType
416
+ path: Optional[String]
417
+ method: Optional[String]
418
+ statusCode: Optional[DocumentationPartLocationStatusCode]
419
+ name: Optional[String]
431
420
 
432
421
 
433
422
  class CreateDocumentationPartRequest(ServiceRequest):
@@ -889,19 +878,14 @@ class GetDocumentationPartRequest(ServiceRequest):
889
878
  documentationPartId: String
890
879
 
891
880
 
892
- GetDocumentationPartsRequest = TypedDict(
893
- "GetDocumentationPartsRequest",
894
- {
895
- "restApiId": String,
896
- "type": Optional[DocumentationPartType],
897
- "nameQuery": Optional[String],
898
- "path": Optional[String],
899
- "position": Optional[String],
900
- "limit": Optional[NullableInteger],
901
- "locationStatus": Optional[LocationStatusType],
902
- },
903
- total=False,
904
- )
881
+ class GetDocumentationPartsRequest(TypedDict, total=False):
882
+ restApiId: String
883
+ type: Optional[DocumentationPartType]
884
+ nameQuery: Optional[String]
885
+ path: Optional[String]
886
+ position: Optional[String]
887
+ limit: Optional[NullableInteger]
888
+ locationStatus: Optional[LocationStatusType]
905
889
 
906
890
 
907
891
  class GetDocumentationVersionRequest(ServiceRequest):
@@ -1131,27 +1115,26 @@ class IntegrationResponse(TypedDict, total=False):
1131
1115
 
1132
1116
 
1133
1117
  MapOfIntegrationResponse = Dict[String, IntegrationResponse]
1134
- Integration = TypedDict(
1135
- "Integration",
1136
- {
1137
- "type": Optional[IntegrationType],
1138
- "httpMethod": Optional[String],
1139
- "uri": Optional[String],
1140
- "connectionType": Optional[ConnectionType],
1141
- "connectionId": Optional[String],
1142
- "credentials": Optional[String],
1143
- "requestParameters": Optional[MapOfStringToString],
1144
- "requestTemplates": Optional[MapOfStringToString],
1145
- "passthroughBehavior": Optional[String],
1146
- "contentHandling": Optional[ContentHandlingStrategy],
1147
- "timeoutInMillis": Optional[Integer],
1148
- "cacheNamespace": Optional[String],
1149
- "cacheKeyParameters": Optional[ListOfString],
1150
- "integrationResponses": Optional[MapOfIntegrationResponse],
1151
- "tlsConfig": Optional[TlsConfig],
1152
- },
1153
- total=False,
1154
- )
1118
+
1119
+
1120
+ class Integration(TypedDict, total=False):
1121
+ type: Optional[IntegrationType]
1122
+ httpMethod: Optional[String]
1123
+ uri: Optional[String]
1124
+ connectionType: Optional[ConnectionType]
1125
+ connectionId: Optional[String]
1126
+ credentials: Optional[String]
1127
+ requestParameters: Optional[MapOfStringToString]
1128
+ requestTemplates: Optional[MapOfStringToString]
1129
+ passthroughBehavior: Optional[String]
1130
+ contentHandling: Optional[ContentHandlingStrategy]
1131
+ timeoutInMillis: Optional[Integer]
1132
+ cacheNamespace: Optional[String]
1133
+ cacheKeyParameters: Optional[ListOfString]
1134
+ integrationResponses: Optional[MapOfIntegrationResponse]
1135
+ tlsConfig: Optional[TlsConfig]
1136
+
1137
+
1155
1138
  Long = int
1156
1139
  ListOfLong = List[Long]
1157
1140
 
@@ -1319,16 +1302,15 @@ class UsagePlan(TypedDict, total=False):
1319
1302
 
1320
1303
 
1321
1304
  ListOfUsagePlan = List[UsagePlan]
1322
- UsagePlanKey = TypedDict(
1323
- "UsagePlanKey",
1324
- {
1325
- "id": Optional[String],
1326
- "type": Optional[String],
1327
- "value": Optional[String],
1328
- "name": Optional[String],
1329
- },
1330
- total=False,
1331
- )
1305
+
1306
+
1307
+ class UsagePlanKey(TypedDict, total=False):
1308
+ id: Optional[String]
1309
+ type: Optional[String]
1310
+ value: Optional[String]
1311
+ name: Optional[String]
1312
+
1313
+
1332
1314
  ListOfUsagePlanKey = List[UsagePlanKey]
1333
1315
 
1334
1316
 
@@ -1360,29 +1342,24 @@ class PutGatewayResponseRequest(ServiceRequest):
1360
1342
  responseTemplates: Optional[MapOfStringToString]
1361
1343
 
1362
1344
 
1363
- PutIntegrationRequest = TypedDict(
1364
- "PutIntegrationRequest",
1365
- {
1366
- "restApiId": String,
1367
- "resourceId": String,
1368
- "httpMethod": String,
1369
- "type": IntegrationType,
1370
- "integrationHttpMethod": Optional[String],
1371
- "uri": Optional[String],
1372
- "connectionType": Optional[ConnectionType],
1373
- "connectionId": Optional[String],
1374
- "credentials": Optional[String],
1375
- "requestParameters": Optional[MapOfStringToString],
1376
- "requestTemplates": Optional[MapOfStringToString],
1377
- "passthroughBehavior": Optional[String],
1378
- "cacheNamespace": Optional[String],
1379
- "cacheKeyParameters": Optional[ListOfString],
1380
- "contentHandling": Optional[ContentHandlingStrategy],
1381
- "timeoutInMillis": Optional[NullableInteger],
1382
- "tlsConfig": Optional[TlsConfig],
1383
- },
1384
- total=False,
1385
- )
1345
+ class PutIntegrationRequest(TypedDict, total=False):
1346
+ restApiId: String
1347
+ resourceId: String
1348
+ httpMethod: String
1349
+ type: IntegrationType
1350
+ integrationHttpMethod: Optional[String]
1351
+ uri: Optional[String]
1352
+ connectionType: Optional[ConnectionType]
1353
+ connectionId: Optional[String]
1354
+ credentials: Optional[String]
1355
+ requestParameters: Optional[MapOfStringToString]
1356
+ requestTemplates: Optional[MapOfStringToString]
1357
+ passthroughBehavior: Optional[String]
1358
+ cacheNamespace: Optional[String]
1359
+ cacheKeyParameters: Optional[ListOfString]
1360
+ contentHandling: Optional[ContentHandlingStrategy]
1361
+ timeoutInMillis: Optional[NullableInteger]
1362
+ tlsConfig: Optional[TlsConfig]
1386
1363
 
1387
1364
 
1388
1365
  class PutIntegrationResponseRequest(ServiceRequest):
@@ -47,10 +47,12 @@ FailureTolerancePercentage = int
47
47
  GeneratedTemplateId = str
48
48
  GeneratedTemplateName = str
49
49
  HookInvocationCount = int
50
+ HookInvocationId = str
50
51
  HookResultId = str
51
52
  HookStatusReason = str
52
53
  HookTargetTypeName = str
53
54
  HookType = str
55
+ HookTypeArn = str
54
56
  HookTypeConfigurationVersionId = str
55
57
  HookTypeName = str
56
58
  HookTypeVersionId = str
@@ -720,6 +722,7 @@ class WarningType(StrEnum):
720
722
  UNSUPPORTED_PROPERTIES = "UNSUPPORTED_PROPERTIES"
721
723
  MUTUALLY_EXCLUSIVE_TYPES = "MUTUALLY_EXCLUSIVE_TYPES"
722
724
  EXCLUDED_PROPERTIES = "EXCLUDED_PROPERTIES"
725
+ EXCLUDED_RESOURCES = "EXCLUDED_RESOURCES"
723
726
 
724
727
 
725
728
  class AlreadyExistsException(ServiceException):
@@ -1603,6 +1606,7 @@ class StackEvent(TypedDict, total=False):
1603
1606
  HookStatus: Optional[HookStatus]
1604
1607
  HookStatusReason: Optional[HookStatusReason]
1605
1608
  HookInvocationPoint: Optional[HookInvocationPoint]
1609
+ HookInvocationId: Optional[HookInvocationId]
1606
1610
  HookFailureMode: Optional[HookFailureMode]
1607
1611
  DetailedStatus: Optional[DetailedStatus]
1608
1612
 
@@ -2118,6 +2122,7 @@ class GetTemplateSummaryOutput(TypedDict, total=False):
2118
2122
 
2119
2123
 
2120
2124
  class HookResultSummary(TypedDict, total=False):
2125
+ HookResultId: Optional[HookInvocationId]
2121
2126
  InvocationPoint: Optional[HookInvocationPoint]
2122
2127
  FailureMode: Optional[HookFailureMode]
2123
2128
  TypeName: Optional[HookTypeName]
@@ -2125,6 +2130,11 @@ class HookResultSummary(TypedDict, total=False):
2125
2130
  TypeConfigurationVersionId: Optional[HookTypeConfigurationVersionId]
2126
2131
  Status: Optional[HookStatus]
2127
2132
  HookStatusReason: Optional[HookStatusReason]
2133
+ InvokedAt: Optional[Timestamp]
2134
+ TargetType: Optional[ListHookResultsTargetType]
2135
+ TargetId: Optional[HookResultId]
2136
+ TypeArn: Optional[HookTypeArn]
2137
+ HookExecutionTarget: Optional[HookResultId]
2128
2138
 
2129
2139
 
2130
2140
  HookResultSummaries = List[HookResultSummary]
@@ -2195,8 +2205,10 @@ class ListGeneratedTemplatesOutput(TypedDict, total=False):
2195
2205
 
2196
2206
 
2197
2207
  class ListHookResultsInput(ServiceRequest):
2198
- TargetType: ListHookResultsTargetType
2199
- TargetId: HookResultId
2208
+ TargetType: Optional[ListHookResultsTargetType]
2209
+ TargetId: Optional[HookResultId]
2210
+ TypeArn: Optional[HookTypeArn]
2211
+ Status: Optional[HookStatus]
2200
2212
  NextToken: Optional[NextToken]
2201
2213
 
2202
2214
 
@@ -3456,8 +3468,10 @@ class CloudformationApi:
3456
3468
  def list_hook_results(
3457
3469
  self,
3458
3470
  context: RequestContext,
3459
- target_type: ListHookResultsTargetType,
3460
- target_id: HookResultId,
3471
+ target_type: ListHookResultsTargetType | None = None,
3472
+ target_id: HookResultId | None = None,
3473
+ type_arn: HookTypeArn | None = None,
3474
+ status: HookStatus | None = None,
3461
3475
  next_token: NextToken | None = None,
3462
3476
  **kwargs,
3463
3477
  ) -> ListHookResultsOutput:
@@ -16,7 +16,10 @@ AlarmRule = str
16
16
  AmazonResourceName = str
17
17
  AnomalyDetectorMetricStat = str
18
18
  AnomalyDetectorMetricTimezone = str
19
+ AttributeName = str
20
+ AttributeValue = str
19
21
  AwsQueryErrorMessage = str
22
+ ContributorId = str
20
23
  DashboardArn = str
21
24
  DashboardBody = str
22
25
  DashboardErrorMessage = str
@@ -136,6 +139,8 @@ class HistoryItemType(StrEnum):
136
139
  ConfigurationUpdate = "ConfigurationUpdate"
137
140
  StateUpdate = "StateUpdate"
138
141
  Action = "Action"
142
+ AlarmContributorStateUpdate = "AlarmContributorStateUpdate"
143
+ AlarmContributorAction = "AlarmContributorAction"
139
144
 
140
145
 
141
146
  class MetricStreamOutputFormat(StrEnum):
@@ -213,7 +218,7 @@ class ConcurrentModificationException(ServiceException):
213
218
  class ConflictException(ServiceException):
214
219
  code: str = "ConflictException"
215
220
  sender_fault: bool = False
216
- status_code: int = 400
221
+ status_code: int = 409
217
222
 
218
223
 
219
224
  class DashboardValidationMessage(TypedDict, total=False):
@@ -300,15 +305,28 @@ class ResourceNotFoundException(ServiceException):
300
305
 
301
306
 
302
307
  Timestamp = datetime
308
+ ContributorAttributes = Dict[AttributeName, AttributeValue]
309
+
310
+
311
+ class AlarmContributor(TypedDict, total=False):
312
+ ContributorId: ContributorId
313
+ ContributorAttributes: ContributorAttributes
314
+ StateReason: StateReason
315
+ StateTransitionedTimestamp: Optional[Timestamp]
316
+
317
+
318
+ AlarmContributors = List[AlarmContributor]
303
319
 
304
320
 
305
321
  class AlarmHistoryItem(TypedDict, total=False):
306
322
  AlarmName: Optional[AlarmName]
323
+ AlarmContributorId: Optional[ContributorId]
307
324
  AlarmType: Optional[AlarmType]
308
325
  Timestamp: Optional[Timestamp]
309
326
  HistoryItemType: Optional[HistoryItemType]
310
327
  HistorySummary: Optional[HistorySummary]
311
328
  HistoryData: Optional[HistoryData]
329
+ AlarmContributorAttributes: Optional[ContributorAttributes]
312
330
 
313
331
 
314
332
  AlarmHistoryItems = List[AlarmHistoryItem]
@@ -505,8 +523,19 @@ class DeleteMetricStreamOutput(TypedDict, total=False):
505
523
  pass
506
524
 
507
525
 
526
+ class DescribeAlarmContributorsInput(ServiceRequest):
527
+ AlarmName: AlarmName
528
+ NextToken: Optional[NextToken]
529
+
530
+
531
+ class DescribeAlarmContributorsOutput(TypedDict, total=False):
532
+ AlarmContributors: AlarmContributors
533
+ NextToken: Optional[NextToken]
534
+
535
+
508
536
  class DescribeAlarmHistoryInput(ServiceRequest):
509
537
  AlarmName: Optional[AlarmName]
538
+ AlarmContributorId: Optional[ContributorId]
510
539
  AlarmTypes: Optional[AlarmTypes]
511
540
  HistoryItemType: Optional[HistoryItemType]
512
541
  StartDate: Optional[Timestamp]
@@ -1179,11 +1208,22 @@ class CloudwatchApi:
1179
1208
  ) -> DeleteMetricStreamOutput:
1180
1209
  raise NotImplementedError
1181
1210
 
1211
+ @handler("DescribeAlarmContributors")
1212
+ def describe_alarm_contributors(
1213
+ self,
1214
+ context: RequestContext,
1215
+ alarm_name: AlarmName,
1216
+ next_token: NextToken | None = None,
1217
+ **kwargs,
1218
+ ) -> DescribeAlarmContributorsOutput:
1219
+ raise NotImplementedError
1220
+
1182
1221
  @handler("DescribeAlarmHistory")
1183
1222
  def describe_alarm_history(
1184
1223
  self,
1185
1224
  context: RequestContext,
1186
1225
  alarm_name: AlarmName | None = None,
1226
+ alarm_contributor_id: ContributorId | None = None,
1187
1227
  alarm_types: AlarmTypes | None = None,
1188
1228
  history_item_type: HistoryItemType | None = None,
1189
1229
  start_date: Timestamp | None = None,
@@ -291,12 +291,16 @@ class RemediationExecutionState(StrEnum):
291
291
  IN_PROGRESS = "IN_PROGRESS"
292
292
  SUCCEEDED = "SUCCEEDED"
293
293
  FAILED = "FAILED"
294
+ UNKNOWN = "UNKNOWN"
294
295
 
295
296
 
296
297
  class RemediationExecutionStepState(StrEnum):
297
298
  SUCCEEDED = "SUCCEEDED"
298
299
  PENDING = "PENDING"
299
300
  FAILED = "FAILED"
301
+ IN_PROGRESS = "IN_PROGRESS"
302
+ EXITED = "EXITED"
303
+ UNKNOWN = "UNKNOWN"
300
304
 
301
305
 
302
306
  class RemediationTargetType(StrEnum):
@@ -1,11 +1,10 @@
1
1
  import functools
2
+ from collections.abc import Callable
2
3
  from typing import (
3
4
  Any,
4
- Callable,
5
5
  NamedTuple,
6
6
  ParamSpec,
7
7
  Protocol,
8
- Type,
9
8
  TypedDict,
10
9
  TypeVar,
11
10
  )
@@ -14,6 +13,7 @@ from botocore.model import OperationModel, ServiceModel
14
13
  from rolo.gateway import RequestContext as RoloRequestContext
15
14
 
16
15
  from localstack.aws.connect import InternalRequestParameters
16
+ from localstack.aws.spec import ProtocolName
17
17
  from localstack.http import Request, Response
18
18
  from localstack.utils.strings import long_uid
19
19
 
@@ -42,7 +42,7 @@ class ServiceException(Exception):
42
42
  message: str
43
43
 
44
44
  def __init__(self, *args: Any, **kwargs: Any):
45
- super(ServiceException, self).__init__(*args)
45
+ super().__init__(*args)
46
46
 
47
47
  if len(args) >= 1:
48
48
  self.message = args[0]
@@ -61,13 +61,13 @@ class CommonServiceException(ServiceException):
61
61
  """
62
62
 
63
63
  def __init__(self, code: str, message: str, status_code: int = 400, sender_fault: bool = False):
64
- super(CommonServiceException, self).__init__(message)
64
+ super().__init__(message)
65
65
  self.code = code
66
66
  self.status_code = status_code
67
67
  self.sender_fault = sender_fault
68
68
 
69
69
 
70
- Operation = Type[ServiceRequest]
70
+ Operation = type[ServiceRequest]
71
71
 
72
72
 
73
73
  class ServiceOperation(NamedTuple):
@@ -89,6 +89,8 @@ class RequestContext(RoloRequestContext):
89
89
  """The underlying incoming HTTP request."""
90
90
  service: ServiceModel | None
91
91
  """The botocore ServiceModel of the service the request is made to."""
92
+ protocol: ProtocolName | None
93
+ """The botocore Protocol for the service the request is made to."""
92
94
  operation: OperationModel | None
93
95
  """The botocore OperationModel of the AWS operation being invoked."""
94
96
  region: str
@@ -113,6 +115,7 @@ class RequestContext(RoloRequestContext):
113
115
  def __init__(self, request: Request):
114
116
  super().__init__(request)
115
117
  self.service = None
118
+ self.protocol = None
116
119
  self.operation = None
117
120
  self.region = None # type: ignore[assignment] # type=str, because we know it will always be set downstream
118
121
  self.partition = "aws" # Sensible default - will be overwritten by region-handler
@@ -8,6 +8,7 @@ ArchivalReason = str
8
8
  AttributeName = str
9
9
  AutoScalingPolicyName = str
10
10
  AutoScalingRoleArn = str
11
+ AvailabilityErrorMessage = str
11
12
  Backfilling = bool
12
13
  BackupArn = str
13
14
  BackupName = str
@@ -61,10 +62,12 @@ PartiQLStatement = str
61
62
  PolicyRevisionId = str
62
63
  PositiveIntegerObject = int
63
64
  ProjectionExpression = str
65
+ Reason = str
64
66
  RecoveryPeriodInDays = int
65
67
  RegionName = str
66
68
  ReplicaStatusDescription = str
67
69
  ReplicaStatusPercentProgress = str
70
+ Resource = str
68
71
  ResourceArnString = str
69
72
  ResourcePolicy = str
70
73
  RestoreInProgress = bool
@@ -169,6 +172,11 @@ class ContributorInsightsAction(StrEnum):
169
172
  DISABLE = "DISABLE"
170
173
 
171
174
 
175
+ class ContributorInsightsMode(StrEnum):
176
+ ACCESSED_AND_THROTTLED_KEYS = "ACCESSED_AND_THROTTLED_KEYS"
177
+ THROTTLED_KEYS = "THROTTLED_KEYS"
178
+
179
+
172
180
  class ContributorInsightsStatus(StrEnum):
173
181
  ENABLING = "ENABLING"
174
182
  ENABLED = "ENABLED"
@@ -509,10 +517,19 @@ class PolicyNotFoundException(ServiceException):
509
517
  status_code: int = 400
510
518
 
511
519
 
520
+ class ThrottlingReason(TypedDict, total=False):
521
+ reason: Optional[Reason]
522
+ resource: Optional[Resource]
523
+
524
+
525
+ ThrottlingReasonList = List[ThrottlingReason]
526
+
527
+
512
528
  class ProvisionedThroughputExceededException(ServiceException):
513
529
  code: str = "ProvisionedThroughputExceededException"
514
530
  sender_fault: bool = False
515
531
  status_code: int = 400
532
+ ThrottlingReasons: Optional[ThrottlingReasonList]
516
533
 
517
534
 
518
535
  class ReplicaAlreadyExistsException(ServiceException):
@@ -537,6 +554,7 @@ class RequestLimitExceeded(ServiceException):
537
554
  code: str = "RequestLimitExceeded"
538
555
  sender_fault: bool = False
539
556
  status_code: int = 400
557
+ ThrottlingReasons: Optional[ThrottlingReasonList]
540
558
 
541
559
 
542
560
  class ResourceInUseException(ServiceException):
@@ -569,6 +587,13 @@ class TableNotFoundException(ServiceException):
569
587
  status_code: int = 400
570
588
 
571
589
 
590
+ class ThrottlingException(ServiceException):
591
+ code: str = "ThrottlingException"
592
+ sender_fault: bool = False
593
+ status_code: int = 400
594
+ throttlingReasons: Optional[ThrottlingReasonList]
595
+
596
+
572
597
  class CancellationReason(TypedDict, total=False):
573
598
  Item: Optional[AttributeMap]
574
599
  Code: Optional[Code]
@@ -981,6 +1006,7 @@ class ContributorInsightsSummary(TypedDict, total=False):
981
1006
  TableName: Optional[TableName]
982
1007
  IndexName: Optional[IndexName]
983
1008
  ContributorInsightsStatus: Optional[ContributorInsightsStatus]
1009
+ ContributorInsightsMode: Optional[ContributorInsightsMode]
984
1010
 
985
1011
 
986
1012
  ContributorInsightsSummaries = List[ContributorInsightsSummary]
@@ -1375,6 +1401,7 @@ class DescribeContributorInsightsOutput(TypedDict, total=False):
1375
1401
  ContributorInsightsStatus: Optional[ContributorInsightsStatus]
1376
1402
  LastUpdateDateTime: Optional[LastUpdateDateTime]
1377
1403
  FailureException: Optional[FailureException]
1404
+ ContributorInsightsMode: Optional[ContributorInsightsMode]
1378
1405
 
1379
1406
 
1380
1407
  class DescribeEndpointsRequest(ServiceRequest):
@@ -2200,12 +2227,14 @@ class UpdateContributorInsightsInput(ServiceRequest):
2200
2227
  TableName: TableArn
2201
2228
  IndexName: Optional[IndexName]
2202
2229
  ContributorInsightsAction: ContributorInsightsAction
2230
+ ContributorInsightsMode: Optional[ContributorInsightsMode]
2203
2231
 
2204
2232
 
2205
2233
  class UpdateContributorInsightsOutput(TypedDict, total=False):
2206
2234
  TableName: Optional[TableName]
2207
2235
  IndexName: Optional[IndexName]
2208
2236
  ContributorInsightsStatus: Optional[ContributorInsightsStatus]
2237
+ ContributorInsightsMode: Optional[ContributorInsightsMode]
2209
2238
 
2210
2239
 
2211
2240
  class UpdateGlobalTableInput(ServiceRequest):
@@ -2858,6 +2887,7 @@ class DynamodbApi:
2858
2887
  table_name: TableArn,
2859
2888
  contributor_insights_action: ContributorInsightsAction,
2860
2889
  index_name: IndexName | None = None,
2890
+ contributor_insights_mode: ContributorInsightsMode | None = None,
2861
2891
  **kwargs,
2862
2892
  ) -> UpdateContributorInsightsOutput:
2863
2893
  raise NotImplementedError