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.
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
@@ -4426,6 +4426,7 @@ class GetDeployablePatchSnapshotForInstanceRequest(ServiceRequest):
4426
4426
  InstanceId: InstanceId
4427
4427
  SnapshotId: SnapshotId
4428
4428
  BaselineOverride: Optional[BaselineOverride]
4429
+ UseS3DualStackEndpoint: Optional[Boolean]
4429
4430
 
4430
4431
 
4431
4432
  class GetDeployablePatchSnapshotForInstanceResult(TypedDict, total=False):
@@ -6749,6 +6750,7 @@ class SsmApi:
6749
6750
  instance_id: InstanceId,
6750
6751
  snapshot_id: SnapshotId,
6751
6752
  baseline_override: BaselineOverride | None = None,
6753
+ use_s3_dual_stack_endpoint: Boolean | None = None,
6752
6754
  **kwargs,
6753
6755
  ) -> GetDeployablePatchSnapshotForInstanceResult:
6754
6756
  raise NotImplementedError
@@ -501,15 +501,10 @@ class CloudWatchLogsLogGroup(TypedDict, total=False):
501
501
  logGroupArn: Optional[Arn]
502
502
 
503
503
 
504
- EncryptionConfiguration = TypedDict(
505
- "EncryptionConfiguration",
506
- {
507
- "kmsKeyId": Optional[KmsKeyId],
508
- "kmsDataKeyReusePeriodSeconds": Optional[KmsDataKeyReusePeriodSeconds],
509
- "type": EncryptionType,
510
- },
511
- total=False,
512
- )
504
+ class EncryptionConfiguration(TypedDict, total=False):
505
+ kmsKeyId: Optional[KmsKeyId]
506
+ kmsDataKeyReusePeriodSeconds: Optional[KmsDataKeyReusePeriodSeconds]
507
+ type: EncryptionType
513
508
 
514
509
 
515
510
  class Tag(TypedDict, total=False):
@@ -567,22 +562,17 @@ class LoggingConfiguration(TypedDict, total=False):
567
562
  destinations: Optional[LogDestinationList]
568
563
 
569
564
 
570
- CreateStateMachineInput = TypedDict(
571
- "CreateStateMachineInput",
572
- {
573
- "name": Name,
574
- "definition": Definition,
575
- "roleArn": Arn,
576
- "type": Optional[StateMachineType],
577
- "loggingConfiguration": Optional[LoggingConfiguration],
578
- "tags": Optional[TagList],
579
- "tracingConfiguration": Optional[TracingConfiguration],
580
- "publish": Optional[Publish],
581
- "versionDescription": Optional[VersionDescription],
582
- "encryptionConfiguration": Optional[EncryptionConfiguration],
583
- },
584
- total=False,
585
- )
565
+ class CreateStateMachineInput(TypedDict, total=False):
566
+ name: Name
567
+ definition: Definition
568
+ roleArn: Arn
569
+ type: Optional[StateMachineType]
570
+ loggingConfiguration: Optional[LoggingConfiguration]
571
+ tags: Optional[TagList]
572
+ tracingConfiguration: Optional[TracingConfiguration]
573
+ publish: Optional[Publish]
574
+ versionDescription: Optional[VersionDescription]
575
+ encryptionConfiguration: Optional[EncryptionConfiguration]
586
576
 
587
577
 
588
578
  class CreateStateMachineOutput(TypedDict, total=False):
@@ -756,26 +746,21 @@ class DescribeStateMachineInput(ServiceRequest):
756
746
  includedData: Optional[IncludedData]
757
747
 
758
748
 
759
- DescribeStateMachineOutput = TypedDict(
760
- "DescribeStateMachineOutput",
761
- {
762
- "stateMachineArn": Arn,
763
- "name": Name,
764
- "status": Optional[StateMachineStatus],
765
- "definition": Definition,
766
- "roleArn": Arn,
767
- "type": StateMachineType,
768
- "creationDate": Timestamp,
769
- "loggingConfiguration": Optional[LoggingConfiguration],
770
- "tracingConfiguration": Optional[TracingConfiguration],
771
- "label": Optional[MapRunLabel],
772
- "revisionId": Optional[RevisionId],
773
- "description": Optional[VersionDescription],
774
- "encryptionConfiguration": Optional[EncryptionConfiguration],
775
- "variableReferences": Optional[VariableReferences],
776
- },
777
- total=False,
778
- )
749
+ class DescribeStateMachineOutput(TypedDict, total=False):
750
+ stateMachineArn: Arn
751
+ name: Name
752
+ status: Optional[StateMachineStatus]
753
+ definition: Definition
754
+ roleArn: Arn
755
+ type: StateMachineType
756
+ creationDate: Timestamp
757
+ loggingConfiguration: Optional[LoggingConfiguration]
758
+ tracingConfiguration: Optional[TracingConfiguration]
759
+ label: Optional[MapRunLabel]
760
+ revisionId: Optional[RevisionId]
761
+ description: Optional[VersionDescription]
762
+ encryptionConfiguration: Optional[EncryptionConfiguration]
763
+ variableReferences: Optional[VariableReferences]
779
764
 
780
765
 
781
766
  class EvaluationFailedEventDetails(TypedDict, total=False):
@@ -987,55 +972,50 @@ class TaskFailedEventDetails(TypedDict, total=False):
987
972
  cause: Optional[SensitiveCause]
988
973
 
989
974
 
990
- HistoryEvent = TypedDict(
991
- "HistoryEvent",
992
- {
993
- "timestamp": Timestamp,
994
- "type": HistoryEventType,
995
- "id": EventId,
996
- "previousEventId": Optional[EventId],
997
- "activityFailedEventDetails": Optional[ActivityFailedEventDetails],
998
- "activityScheduleFailedEventDetails": Optional[ActivityScheduleFailedEventDetails],
999
- "activityScheduledEventDetails": Optional[ActivityScheduledEventDetails],
1000
- "activityStartedEventDetails": Optional[ActivityStartedEventDetails],
1001
- "activitySucceededEventDetails": Optional[ActivitySucceededEventDetails],
1002
- "activityTimedOutEventDetails": Optional[ActivityTimedOutEventDetails],
1003
- "taskFailedEventDetails": Optional[TaskFailedEventDetails],
1004
- "taskScheduledEventDetails": Optional[TaskScheduledEventDetails],
1005
- "taskStartFailedEventDetails": Optional[TaskStartFailedEventDetails],
1006
- "taskStartedEventDetails": Optional[TaskStartedEventDetails],
1007
- "taskSubmitFailedEventDetails": Optional[TaskSubmitFailedEventDetails],
1008
- "taskSubmittedEventDetails": Optional[TaskSubmittedEventDetails],
1009
- "taskSucceededEventDetails": Optional[TaskSucceededEventDetails],
1010
- "taskTimedOutEventDetails": Optional[TaskTimedOutEventDetails],
1011
- "executionFailedEventDetails": Optional[ExecutionFailedEventDetails],
1012
- "executionStartedEventDetails": Optional[ExecutionStartedEventDetails],
1013
- "executionSucceededEventDetails": Optional[ExecutionSucceededEventDetails],
1014
- "executionAbortedEventDetails": Optional[ExecutionAbortedEventDetails],
1015
- "executionTimedOutEventDetails": Optional[ExecutionTimedOutEventDetails],
1016
- "executionRedrivenEventDetails": Optional[ExecutionRedrivenEventDetails],
1017
- "mapStateStartedEventDetails": Optional[MapStateStartedEventDetails],
1018
- "mapIterationStartedEventDetails": Optional[MapIterationEventDetails],
1019
- "mapIterationSucceededEventDetails": Optional[MapIterationEventDetails],
1020
- "mapIterationFailedEventDetails": Optional[MapIterationEventDetails],
1021
- "mapIterationAbortedEventDetails": Optional[MapIterationEventDetails],
1022
- "lambdaFunctionFailedEventDetails": Optional[LambdaFunctionFailedEventDetails],
1023
- "lambdaFunctionScheduleFailedEventDetails": Optional[
1024
- LambdaFunctionScheduleFailedEventDetails
1025
- ],
1026
- "lambdaFunctionScheduledEventDetails": Optional[LambdaFunctionScheduledEventDetails],
1027
- "lambdaFunctionStartFailedEventDetails": Optional[LambdaFunctionStartFailedEventDetails],
1028
- "lambdaFunctionSucceededEventDetails": Optional[LambdaFunctionSucceededEventDetails],
1029
- "lambdaFunctionTimedOutEventDetails": Optional[LambdaFunctionTimedOutEventDetails],
1030
- "stateEnteredEventDetails": Optional[StateEnteredEventDetails],
1031
- "stateExitedEventDetails": Optional[StateExitedEventDetails],
1032
- "mapRunStartedEventDetails": Optional[MapRunStartedEventDetails],
1033
- "mapRunFailedEventDetails": Optional[MapRunFailedEventDetails],
1034
- "mapRunRedrivenEventDetails": Optional[MapRunRedrivenEventDetails],
1035
- "evaluationFailedEventDetails": Optional[EvaluationFailedEventDetails],
1036
- },
1037
- total=False,
1038
- )
975
+ class HistoryEvent(TypedDict, total=False):
976
+ timestamp: Timestamp
977
+ type: HistoryEventType
978
+ id: EventId
979
+ previousEventId: Optional[EventId]
980
+ activityFailedEventDetails: Optional[ActivityFailedEventDetails]
981
+ activityScheduleFailedEventDetails: Optional[ActivityScheduleFailedEventDetails]
982
+ activityScheduledEventDetails: Optional[ActivityScheduledEventDetails]
983
+ activityStartedEventDetails: Optional[ActivityStartedEventDetails]
984
+ activitySucceededEventDetails: Optional[ActivitySucceededEventDetails]
985
+ activityTimedOutEventDetails: Optional[ActivityTimedOutEventDetails]
986
+ taskFailedEventDetails: Optional[TaskFailedEventDetails]
987
+ taskScheduledEventDetails: Optional[TaskScheduledEventDetails]
988
+ taskStartFailedEventDetails: Optional[TaskStartFailedEventDetails]
989
+ taskStartedEventDetails: Optional[TaskStartedEventDetails]
990
+ taskSubmitFailedEventDetails: Optional[TaskSubmitFailedEventDetails]
991
+ taskSubmittedEventDetails: Optional[TaskSubmittedEventDetails]
992
+ taskSucceededEventDetails: Optional[TaskSucceededEventDetails]
993
+ taskTimedOutEventDetails: Optional[TaskTimedOutEventDetails]
994
+ executionFailedEventDetails: Optional[ExecutionFailedEventDetails]
995
+ executionStartedEventDetails: Optional[ExecutionStartedEventDetails]
996
+ executionSucceededEventDetails: Optional[ExecutionSucceededEventDetails]
997
+ executionAbortedEventDetails: Optional[ExecutionAbortedEventDetails]
998
+ executionTimedOutEventDetails: Optional[ExecutionTimedOutEventDetails]
999
+ executionRedrivenEventDetails: Optional[ExecutionRedrivenEventDetails]
1000
+ mapStateStartedEventDetails: Optional[MapStateStartedEventDetails]
1001
+ mapIterationStartedEventDetails: Optional[MapIterationEventDetails]
1002
+ mapIterationSucceededEventDetails: Optional[MapIterationEventDetails]
1003
+ mapIterationFailedEventDetails: Optional[MapIterationEventDetails]
1004
+ mapIterationAbortedEventDetails: Optional[MapIterationEventDetails]
1005
+ lambdaFunctionFailedEventDetails: Optional[LambdaFunctionFailedEventDetails]
1006
+ lambdaFunctionScheduleFailedEventDetails: Optional[LambdaFunctionScheduleFailedEventDetails]
1007
+ lambdaFunctionScheduledEventDetails: Optional[LambdaFunctionScheduledEventDetails]
1008
+ lambdaFunctionStartFailedEventDetails: Optional[LambdaFunctionStartFailedEventDetails]
1009
+ lambdaFunctionSucceededEventDetails: Optional[LambdaFunctionSucceededEventDetails]
1010
+ lambdaFunctionTimedOutEventDetails: Optional[LambdaFunctionTimedOutEventDetails]
1011
+ stateEnteredEventDetails: Optional[StateEnteredEventDetails]
1012
+ stateExitedEventDetails: Optional[StateExitedEventDetails]
1013
+ mapRunStartedEventDetails: Optional[MapRunStartedEventDetails]
1014
+ mapRunFailedEventDetails: Optional[MapRunFailedEventDetails]
1015
+ mapRunRedrivenEventDetails: Optional[MapRunRedrivenEventDetails]
1016
+ evaluationFailedEventDetails: Optional[EvaluationFailedEventDetails]
1017
+
1018
+
1039
1019
  HistoryEventList = List[HistoryEvent]
1040
1020
 
1041
1021
 
@@ -1162,16 +1142,13 @@ class ListStateMachinesInput(ServiceRequest):
1162
1142
  nextToken: Optional[PageToken]
1163
1143
 
1164
1144
 
1165
- StateMachineListItem = TypedDict(
1166
- "StateMachineListItem",
1167
- {
1168
- "stateMachineArn": Arn,
1169
- "name": Name,
1170
- "type": StateMachineType,
1171
- "creationDate": Timestamp,
1172
- },
1173
- total=False,
1174
- )
1145
+ class StateMachineListItem(TypedDict, total=False):
1146
+ stateMachineArn: Arn
1147
+ name: Name
1148
+ type: StateMachineType
1149
+ creationDate: Timestamp
1150
+
1151
+
1175
1152
  StateMachineList = List[StateMachineListItem]
1176
1153
 
1177
1154
 
@@ -1367,16 +1344,13 @@ class ValidateStateMachineDefinitionDiagnostic(TypedDict, total=False):
1367
1344
 
1368
1345
 
1369
1346
  ValidateStateMachineDefinitionDiagnosticList = List[ValidateStateMachineDefinitionDiagnostic]
1370
- ValidateStateMachineDefinitionInput = TypedDict(
1371
- "ValidateStateMachineDefinitionInput",
1372
- {
1373
- "definition": Definition,
1374
- "type": Optional[StateMachineType],
1375
- "severity": Optional[ValidateStateMachineDefinitionSeverity],
1376
- "maxResults": Optional[ValidateStateMachineDefinitionMaxResult],
1377
- },
1378
- total=False,
1379
- )
1347
+
1348
+
1349
+ class ValidateStateMachineDefinitionInput(TypedDict, total=False):
1350
+ definition: Definition
1351
+ type: Optional[StateMachineType]
1352
+ severity: Optional[ValidateStateMachineDefinitionSeverity]
1353
+ maxResults: Optional[ValidateStateMachineDefinitionMaxResult]
1380
1354
 
1381
1355
 
1382
1356
  class ValidateStateMachineDefinitionOutput(TypedDict, total=False):
@@ -209,15 +209,14 @@ class SupportedHour(TypedDict, total=False):
209
209
 
210
210
 
211
211
  SupportedHoursList = List[SupportedHour]
212
- CommunicationTypeOptions = TypedDict(
213
- "CommunicationTypeOptions",
214
- {
215
- "type": Optional[Type],
216
- "supportedHours": Optional[SupportedHoursList],
217
- "datesWithoutSupport": Optional[DatesWithoutSupportList],
218
- },
219
- total=False,
220
- )
212
+
213
+
214
+ class CommunicationTypeOptions(TypedDict, total=False):
215
+ type: Optional[Type]
216
+ supportedHours: Optional[SupportedHoursList]
217
+ datesWithoutSupport: Optional[DatesWithoutSupportList]
218
+
219
+
221
220
  CommunicationTypeOptionsList = List[CommunicationTypeOptions]
222
221
 
223
222
 
@@ -254,6 +254,12 @@ class PiiEntityType(StrEnum):
254
254
  ALL = "ALL"
255
255
 
256
256
 
257
+ class Pronouns(StrEnum):
258
+ HE_HIM = "HE_HIM"
259
+ SHE_HER = "SHE_HER"
260
+ THEY_THEM = "THEY_THEM"
261
+
262
+
257
263
  class RedactionOutput(StrEnum):
258
264
  redacted = "redacted"
259
265
  redacted_and_unredacted = "redacted_and_unredacted"
@@ -736,6 +742,7 @@ class MedicalScribeJob(TypedDict, total=False):
736
742
  Settings: Optional[MedicalScribeSettings]
737
743
  DataAccessRoleArn: Optional[DataAccessRoleArn]
738
744
  ChannelDefinitions: Optional[MedicalScribeChannelDefinitions]
745
+ MedicalScribeContextProvided: Optional[Boolean]
739
746
  Tags: Optional[TagList]
740
747
 
741
748
 
@@ -1097,6 +1104,14 @@ class ListVocabularyFiltersResponse(TypedDict, total=False):
1097
1104
  VocabularyFilters: Optional[VocabularyFilters]
1098
1105
 
1099
1106
 
1107
+ class MedicalScribePatientContext(TypedDict, total=False):
1108
+ Pronouns: Optional[Pronouns]
1109
+
1110
+
1111
+ class MedicalScribeContext(TypedDict, total=False):
1112
+ PatientContext: Optional[MedicalScribePatientContext]
1113
+
1114
+
1100
1115
  class StartCallAnalyticsJobRequest(ServiceRequest):
1101
1116
  CallAnalyticsJobName: CallAnalyticsJobName
1102
1117
  Media: Media
@@ -1122,6 +1137,7 @@ class StartMedicalScribeJobRequest(ServiceRequest):
1122
1137
  Settings: MedicalScribeSettings
1123
1138
  ChannelDefinitions: Optional[MedicalScribeChannelDefinitions]
1124
1139
  Tags: Optional[TagList]
1140
+ MedicalScribeContext: Optional[MedicalScribeContext]
1125
1141
 
1126
1142
 
1127
1143
  class StartMedicalScribeJobResponse(TypedDict, total=False):
@@ -1576,6 +1592,7 @@ class TranscribeApi:
1576
1592
  kms_encryption_context: KMSEncryptionContextMap | None = None,
1577
1593
  channel_definitions: MedicalScribeChannelDefinitions | None = None,
1578
1594
  tags: TagList | None = None,
1595
+ medical_scribe_context: MedicalScribeContext | None = None,
1579
1596
  **kwargs,
1580
1597
  ) -> StartMedicalScribeJobResponse:
1581
1598
  raise NotImplementedError
localstack/aws/chain.py CHANGED
@@ -5,7 +5,7 @@ The core concepts of the HandlerChain.
5
5
  from __future__ import annotations
6
6
 
7
7
  import logging
8
- from typing import Callable, Type
8
+ from collections.abc import Callable
9
9
 
10
10
  from rolo.gateway import (
11
11
  CompositeExceptionHandler,
@@ -29,7 +29,7 @@ ExceptionHandler = Callable[["HandlerChain", Exception, RequestContext, Response
29
29
  was raised by the request handler, the RequestContext, and the Response object to be populated."""
30
30
 
31
31
 
32
- HandlerChain: Type[RoloHandlerChain[RequestContext]] = RoloHandlerChain
32
+ HandlerChain: type[RoloHandlerChain[RequestContext]] = RoloHandlerChain
33
33
 
34
34
  __all__ = [
35
35
  "HandlerChain",
localstack/aws/client.py CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  import io
4
4
  import logging
5
- from datetime import datetime, timezone
6
- from typing import Dict, Iterable, Optional
5
+ from collections.abc import Iterable
6
+ from datetime import UTC, datetime
7
7
  from urllib.parse import urlsplit
8
8
 
9
9
  from botocore import awsrequest
@@ -21,6 +21,7 @@ from localstack.utils.strings import to_str
21
21
  from .api import CommonServiceException, RequestContext, ServiceException, ServiceResponse
22
22
  from .connect import get_service_endpoint
23
23
  from .gateway import Gateway
24
+ from .spec import ProtocolName
24
25
 
25
26
  LOG = logging.getLogger(__name__)
26
27
 
@@ -130,8 +131,8 @@ class _RawStream:
130
131
 
131
132
 
132
133
  def _add_modeled_error_fields(
133
- response_dict: Dict,
134
- parsed_response: Dict,
134
+ response_dict: dict,
135
+ parsed_response: dict,
135
136
  operation_model: OperationModel,
136
137
  parser: ResponseParser,
137
138
  ):
@@ -217,7 +218,7 @@ def _patch_cbor2():
217
218
  # AWS breaks the CBOR spec by using the millis (instead of seconds with floating point support for millis)
218
219
  # https://github.com/aws/aws-sdk-java-v2/issues/4661
219
220
  value = value / 1000
220
- tmp = datetime.fromtimestamp(value, timezone.utc)
221
+ tmp = datetime.fromtimestamp(value, UTC)
221
222
  except (OverflowError, OSError, ValueError) as exc:
222
223
  raise CBORDecodeValueError("error decoding datetime from epoch") from exc
223
224
 
@@ -284,13 +285,17 @@ def _patch_botocore_endpoint_in_memory():
284
285
 
285
286
 
286
287
  def parse_response(
287
- operation: OperationModel, response: Response, include_response_metadata: bool = True
288
+ operation: OperationModel,
289
+ protocol: ProtocolName,
290
+ response: Response,
291
+ include_response_metadata: bool = True,
288
292
  ) -> ServiceResponse:
289
293
  """
290
294
  Parses an HTTP Response object into an AWS response object using botocore. It does this by adapting the
291
295
  procedure of ``botocore.endpoint.convert_to_response_dict`` to work with Werkzeug's server-side response object.
292
296
 
293
297
  :param operation: the operation of the original request
298
+ :param protocol: the protocol of the original request
294
299
  :param response: the HTTP response object containing the response of the operation
295
300
  :param include_response_metadata: True if the ResponseMetadata (typical for boto response dicts) should be included
296
301
  :return: a parsed dictionary as it is returned by botocore
@@ -322,7 +327,7 @@ def parse_response(
322
327
  timestamp_parser=_cbor_timestamp_parser, blob_parser=_cbor_blob_parser
323
328
  )
324
329
 
325
- parser = factory.create_parser(operation.service_model.protocol)
330
+ parser = factory.create_parser(protocol)
326
331
  parsed_response = parser.parse(response_dict, operation.output_shape)
327
332
 
328
333
  if response.status_code >= 301:
@@ -335,9 +340,7 @@ def parse_response(
335
340
  return parsed_response
336
341
 
337
342
 
338
- def parse_service_exception(
339
- response: Response, parsed_response: Dict
340
- ) -> Optional[ServiceException]:
343
+ def parse_service_exception(response: Response, parsed_response: dict) -> ServiceException | None:
341
344
  """
342
345
  Creates a ServiceException (one ASF can handle) from a parsed response (one that botocore would return).
343
346
  It does not automatically raise the exception (see #raise_service_exception).
@@ -363,7 +366,7 @@ def parse_service_exception(
363
366
  return service_exception
364
367
 
365
368
 
366
- def raise_service_exception(response: Response, parsed_response: Dict) -> None:
369
+ def raise_service_exception(response: Response, parsed_response: dict) -> None:
367
370
  """
368
371
  Creates and raises a ServiceException from a parsed response (one that botocore would return).
369
372
  :param response: Un-parsed response
localstack/aws/connect.py CHANGED
@@ -10,10 +10,11 @@ import logging
10
10
  import re
11
11
  import threading
12
12
  from abc import ABC, abstractmethod
13
+ from collections.abc import Callable
13
14
  from functools import lru_cache, partial
14
15
  from random import choice
15
16
  from socket import socket
16
- from typing import Any, Callable, Generic, Optional, TypedDict, TypeVar
17
+ from typing import Any, Generic, TypedDict, TypeVar
17
18
 
18
19
  import dns.message
19
20
  import dns.query
@@ -88,8 +89,8 @@ def make_hash(o):
88
89
  return hash(frozenset(sorted(new_o.items())))
89
90
 
90
91
 
91
- def config_equality_patch(self, other: object):
92
- return type(self) == type(other) and self._user_provided_options == other._user_provided_options
92
+ def config_equality_patch(self, other: object) -> bool:
93
+ return type(self) is type(other) and self._user_provided_options == other._user_provided_options
93
94
 
94
95
 
95
96
  def config_hash_patch(self):
@@ -277,10 +278,10 @@ class ClientFactory(ABC):
277
278
  def __call__(
278
279
  self,
279
280
  *,
280
- region_name: Optional[str] = None,
281
- aws_access_key_id: Optional[str] = None,
282
- aws_secret_access_key: Optional[str] = None,
283
- aws_session_token: Optional[str] = None,
281
+ region_name: str | None = None,
282
+ aws_access_key_id: str | None = None,
283
+ aws_secret_access_key: str | None = None,
284
+ aws_session_token: str | None = None,
284
285
  endpoint_url: str = None,
285
286
  config: Config = None,
286
287
  ) -> ServiceLevelClientFactory:
@@ -318,11 +319,11 @@ class ClientFactory(ABC):
318
319
  self,
319
320
  *,
320
321
  role_arn: str,
321
- service_principal: Optional[ServicePrincipal] = None,
322
- session_name: Optional[str] = None,
323
- region_name: Optional[str] = None,
324
- endpoint_url: Optional[str] = None,
325
- config: Optional[Config] = None,
322
+ service_principal: ServicePrincipal | None = None,
323
+ session_name: str | None = None,
324
+ region_name: str | None = None,
325
+ endpoint_url: str | None = None,
326
+ config: Config | None = None,
326
327
  ) -> ServiceLevelClientFactory:
327
328
  """
328
329
  Create a service level client factory with credentials from assuming the given role ARN.
@@ -362,12 +363,12 @@ class ClientFactory(ABC):
362
363
  def get_client(
363
364
  self,
364
365
  service_name: str,
365
- region_name: Optional[str] = None,
366
- aws_access_key_id: Optional[str] = None,
367
- aws_secret_access_key: Optional[str] = None,
368
- aws_session_token: Optional[str] = None,
369
- endpoint_url: Optional[str] = None,
370
- config: Optional[Config] = None,
366
+ region_name: str | None = None,
367
+ aws_access_key_id: str | None = None,
368
+ aws_secret_access_key: str | None = None,
369
+ aws_session_token: str | None = None,
370
+ endpoint_url: str | None = None,
371
+ config: Config | None = None,
371
372
  ):
372
373
  raise NotImplementedError()
373
374
 
@@ -389,11 +390,11 @@ class ClientFactory(ABC):
389
390
  service_name: str,
390
391
  region_name: str,
391
392
  use_ssl: bool,
392
- verify: Optional[bool],
393
- endpoint_url: Optional[str],
394
- aws_access_key_id: Optional[str],
395
- aws_secret_access_key: Optional[str],
396
- aws_session_token: Optional[str],
393
+ verify: bool | None,
394
+ endpoint_url: str | None,
395
+ aws_access_key_id: str | None,
396
+ aws_secret_access_key: str | None,
397
+ aws_session_token: str | None,
397
398
  config: Config,
398
399
  ) -> BaseClient:
399
400
  """
@@ -480,12 +481,12 @@ class InternalClientFactory(ClientFactory):
480
481
  def get_client(
481
482
  self,
482
483
  service_name: str,
483
- region_name: Optional[str] = None,
484
- aws_access_key_id: Optional[str] = None,
485
- aws_secret_access_key: Optional[str] = None,
486
- aws_session_token: Optional[str] = None,
487
- endpoint_url: Optional[str] = None,
488
- config: Optional[Config] = None,
484
+ region_name: str | None = None,
485
+ aws_access_key_id: str | None = None,
486
+ aws_secret_access_key: str | None = None,
487
+ aws_session_token: str | None = None,
488
+ endpoint_url: str | None = None,
489
+ config: Config | None = None,
489
490
  ) -> BaseClient:
490
491
  """
491
492
  Build and return client for connections originating within LocalStack.
@@ -535,12 +536,12 @@ class ExternalClientFactory(ClientFactory):
535
536
  def get_client(
536
537
  self,
537
538
  service_name: str,
538
- region_name: Optional[str] = None,
539
- aws_access_key_id: Optional[str] = None,
540
- aws_secret_access_key: Optional[str] = None,
541
- aws_session_token: Optional[str] = None,
542
- endpoint_url: Optional[str] = None,
543
- config: Optional[Config] = None,
539
+ region_name: str | None = None,
540
+ aws_access_key_id: str | None = None,
541
+ aws_secret_access_key: str | None = None,
542
+ aws_session_token: str | None = None,
543
+ endpoint_url: str | None = None,
544
+ config: Config | None = None,
544
545
  ) -> BaseClient:
545
546
  """
546
547
  Build and return client for connections originating outside LocalStack and targeting Localstack.
@@ -604,12 +605,12 @@ class ExternalAwsClientFactory(ClientFactory):
604
605
  def get_client(
605
606
  self,
606
607
  service_name: str,
607
- region_name: Optional[str] = None,
608
- aws_access_key_id: Optional[str] = None,
609
- aws_secret_access_key: Optional[str] = None,
610
- aws_session_token: Optional[str] = None,
611
- endpoint_url: Optional[str] = None,
612
- config: Optional[Config] = None,
608
+ region_name: str | None = None,
609
+ aws_access_key_id: str | None = None,
610
+ aws_secret_access_key: str | None = None,
611
+ aws_session_token: str | None = None,
612
+ endpoint_url: str | None = None,
613
+ config: Config | None = None,
613
614
  ) -> BaseClient:
614
615
  """
615
616
  Build and return client for connections originating outside LocalStack and targeting AWS.