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
@@ -7,9 +7,10 @@ import logging
7
7
  import re
8
8
  import time
9
9
  import zlib
10
+ from collections.abc import Mapping
10
11
  from enum import StrEnum
11
12
  from secrets import token_bytes
12
- from typing import Any, Dict, Literal, NamedTuple, Optional, Protocol, Tuple, Union
13
+ from typing import Any, Literal, NamedTuple, Protocol
13
14
  from urllib import parse as urlparser
14
15
  from zoneinfo import ZoneInfo
15
16
 
@@ -50,6 +51,7 @@ from localstack.aws.api.s3 import (
50
51
  SSEKMSKeyId,
51
52
  TaggingHeader,
52
53
  TagSet,
54
+ UploadPartCopyRequest,
53
55
  UploadPartRequest,
54
56
  )
55
57
  from localstack.aws.api.s3 import Type as GranteeType
@@ -62,7 +64,6 @@ from localstack.services.s3.constants import (
62
64
  AUTHENTICATED_USERS_ACL_GRANTEE,
63
65
  CHECKSUM_ALGORITHMS,
64
66
  LOG_DELIVERY_ACL_GRANTEE,
65
- S3_VIRTUAL_HOST_FORWARDED_HEADER,
66
67
  SIGNATURE_V2_PARAMS,
67
68
  SIGNATURE_V4_PARAMS,
68
69
  SYSTEM_METADATA_SETTABLE_HEADERS,
@@ -143,7 +144,7 @@ def get_owner_for_account_id(account_id: str):
143
144
 
144
145
  def extract_bucket_key_version_id_from_copy_source(
145
146
  copy_source: CopySource,
146
- ) -> tuple[BucketName, ObjectKey, Optional[ObjectVersionId]]:
147
+ ) -> tuple[BucketName, ObjectKey, ObjectVersionId | None]:
147
148
  """
148
149
  Utility to parse bucket name, object key and optionally its versionId. It accepts the CopySource format:
149
150
  - <bucket-name/<object-key>?versionId=<version-id>, used for example in CopySource for CopyObject
@@ -403,6 +404,45 @@ def parse_copy_source_range_header(copy_source_range: str, object_size: int) ->
403
404
  )
404
405
 
405
406
 
407
+ def get_failed_upload_part_copy_source_preconditions(
408
+ request: UploadPartCopyRequest, last_modified: datetime.datetime, etag: ETag
409
+ ) -> str | None:
410
+ """
411
+ Utility which parses the conditions from a S3 UploadPartCopy request.
412
+ Note: The order in which these conditions are checked if used in conjunction matters
413
+
414
+ :param UploadPartCopyRequest request: The S3 UploadPartCopy request.
415
+ :param datetime last_modified: The time the source object was last modified.
416
+ :param ETag etag: The ETag of the source object.
417
+
418
+ :returns: The name of the failed precondition.
419
+ """
420
+ if_match = request.get("CopySourceIfMatch")
421
+ if_none_match = request.get("CopySourceIfNoneMatch")
422
+ if_unmodified_since = request.get("CopySourceIfUnmodifiedSince")
423
+ if_modified_since = request.get("CopySourceIfModifiedSince")
424
+
425
+ if if_match:
426
+ if if_match.strip('"') != etag.strip('"'):
427
+ return "x-amz-copy-source-If-Match"
428
+ if if_modified_since and if_modified_since > last_modified:
429
+ return "x-amz-copy-source-If-Modified-Since"
430
+ # CopySourceIfMatch is unaffected by CopySourceIfUnmodifiedSince so return early
431
+ if if_unmodified_since:
432
+ return None
433
+
434
+ if if_unmodified_since and if_unmodified_since < last_modified:
435
+ return "x-amz-copy-source-If-Unmodified-Since"
436
+
437
+ if if_none_match and if_none_match.strip('"') == etag.strip('"'):
438
+ return "x-amz-copy-source-If-None-Match"
439
+
440
+ if if_modified_since and last_modified < if_modified_since < datetime.datetime.now(
441
+ tz=_gmt_zone_info
442
+ ):
443
+ return "x-amz-copy-source-If-Modified-Since"
444
+
445
+
406
446
  def get_full_default_bucket_location(bucket_name: BucketName) -> str:
407
447
  host_definition = localstack_host()
408
448
  if host_definition.host != constants.LOCALHOST_HOSTNAME:
@@ -482,7 +522,7 @@ def is_valid_canonical_id(canonical_id: str) -> bool:
482
522
  return False
483
523
 
484
524
 
485
- def uses_host_addressing(headers: Dict[str, str]) -> str | None:
525
+ def uses_host_addressing(headers: Mapping[str, str]) -> str | None:
486
526
  """
487
527
  Determines if the request is targeting S3 with virtual host addressing
488
528
  :param headers: the request headers
@@ -511,18 +551,9 @@ def get_system_metadata_from_request(request: dict) -> Metadata:
511
551
  return metadata
512
552
 
513
553
 
514
- def forwarded_from_virtual_host_addressed_request(headers: dict[str, str]) -> bool:
515
- """
516
- Determines if the request was forwarded from a v-host addressing style into a path one
517
- """
518
- # we can assume that the host header we are receiving here is actually the header we originally received
519
- # from the client (because the edge service is forwarding the request in memory)
520
- return S3_VIRTUAL_HOST_FORWARDED_HEADER in headers
521
-
522
-
523
554
  def extract_bucket_name_and_key_from_headers_and_path(
524
555
  headers: dict[str, str], path: str
525
- ) -> tuple[Optional[str], Optional[str]]:
556
+ ) -> tuple[str | None, str | None]:
526
557
  """
527
558
  Extract the bucket name and the object key from a request headers and path. This works with both virtual host
528
559
  and path style requests.
@@ -556,7 +587,7 @@ def normalize_bucket_name(bucket_name):
556
587
  return bucket_name
557
588
 
558
589
 
559
- def get_bucket_and_key_from_s3_uri(s3_uri: str) -> Tuple[str, str]:
590
+ def get_bucket_and_key_from_s3_uri(s3_uri: str) -> tuple[str, str]:
560
591
  """
561
592
  Extracts the bucket name and key from s3 uri
562
593
  """
@@ -564,7 +595,7 @@ def get_bucket_and_key_from_s3_uri(s3_uri: str) -> Tuple[str, str]:
564
595
  return output_bucket, output_key
565
596
 
566
597
 
567
- def get_bucket_and_key_from_presign_url(presign_url: str) -> Tuple[str, str]:
598
+ def get_bucket_and_key_from_presign_url(presign_url: str) -> tuple[str, str]:
568
599
  """
569
600
  Extracts the bucket name and key from s3 presign url
570
601
  """
@@ -574,22 +605,11 @@ def get_bucket_and_key_from_presign_url(presign_url: str) -> Tuple[str, str]:
574
605
  return bucket, key
575
606
 
576
607
 
577
- def _create_invalid_argument_exc(
578
- message: Union[str, None], name: str, value: str, host_id: str = None
579
- ) -> InvalidArgument:
580
- ex = InvalidArgument(message)
581
- ex.ArgumentName = name
582
- ex.ArgumentValue = value
583
- if host_id:
584
- ex.HostId = host_id
585
- return ex
586
-
587
-
588
608
  def capitalize_header_name_from_snake_case(header_name: str) -> str:
589
609
  return "-".join([part.capitalize() for part in header_name.split("-")])
590
610
 
591
611
 
592
- def get_kms_key_arn(kms_key: str, account_id: str, bucket_region: str) -> Optional[str]:
612
+ def get_kms_key_arn(kms_key: str, account_id: str, bucket_region: str) -> str | None:
593
613
  """
594
614
  In S3, the KMS key can be passed as a KeyId or a KeyArn. This method allows to always get the KeyArn from either.
595
615
  It can also validate if the key is in the same region, and raise an exception.
@@ -762,7 +782,7 @@ def _match_lifecycle_filter(
762
782
 
763
783
  def parse_expiration_header(
764
784
  expiration_header: str,
765
- ) -> tuple[Optional[datetime.datetime], Optional[str]]:
785
+ ) -> tuple[datetime.datetime | None, str | None]:
766
786
  try:
767
787
  header_values = dict(
768
788
  (p.strip('"') for p in v.split("=")) for v in expiration_header.split('", ')
@@ -878,7 +898,7 @@ def get_retention_from_now(days: int = None, years: int = None) -> datetime.date
878
898
 
879
899
  def get_failed_precondition_copy_source(
880
900
  request: CopyObjectRequest, last_modified: datetime.datetime, etag: ETag
881
- ) -> Optional[str]:
901
+ ) -> str | None:
882
902
  """
883
903
  Validate if the source object LastModified and ETag matches a precondition, and if it does, return the failed
884
904
  precondition
@@ -1019,7 +1039,7 @@ def create_redirect_for_post_request(
1019
1039
  return urlparser.urlunparse(newparts)
1020
1040
 
1021
1041
 
1022
- def parse_post_object_tagging_xml(tagging: str) -> Optional[dict]:
1042
+ def parse_post_object_tagging_xml(tagging: str) -> dict | None:
1023
1043
  try:
1024
1044
  tag_set = {}
1025
1045
  tags = xmltodict.parse(tagging)
@@ -38,7 +38,6 @@ from localstack.aws.api.s3 import Type as GranteeType
38
38
  from localstack.services.s3 import constants as s3_constants
39
39
  from localstack.services.s3.exceptions import InvalidRequest, MalformedACLError, MalformedXML
40
40
  from localstack.services.s3.utils import (
41
- _create_invalid_argument_exc,
42
41
  get_class_attrs_from_spec_class,
43
42
  get_permission_header_name,
44
43
  is_bucket_name_valid,
@@ -87,8 +86,11 @@ def validate_canned_acl(canned_acl: str) -> None:
87
86
  Validate the canned ACL value, or raise an Exception
88
87
  """
89
88
  if canned_acl and canned_acl not in VALID_CANNED_ACLS:
90
- ex = _create_invalid_argument_exc(None, "x-amz-acl", canned_acl)
91
- raise ex
89
+ raise InvalidArgument(
90
+ None,
91
+ ArgumentName="x-amz-acl",
92
+ ArgumentValue=canned_acl,
93
+ )
92
94
 
93
95
 
94
96
  def parse_grants_in_headers(permission: Permission, grantees: str) -> Grants:
@@ -98,16 +100,18 @@ def parse_grants_in_headers(permission: Permission, grantees: str) -> Grants:
98
100
  grantee_type, grantee_id = seralized_grantee.split("=")
99
101
  grantee_id = grantee_id.strip('"')
100
102
  if grantee_type not in ("uri", "id", "emailAddress"):
101
- ex = _create_invalid_argument_exc(
103
+ raise InvalidArgument(
102
104
  "Argument format not recognized",
103
- get_permission_header_name(permission),
104
- seralized_grantee,
105
+ ArgumentName=get_permission_header_name(permission),
106
+ ArgumentValue=seralized_grantee,
105
107
  )
106
- raise ex
107
108
  elif grantee_type == "uri":
108
109
  if grantee_id not in s3_constants.VALID_ACL_PREDEFINED_GROUPS:
109
- ex = _create_invalid_argument_exc("Invalid group uri", "uri", grantee_id)
110
- raise ex
110
+ raise InvalidArgument(
111
+ "Invalid group uri",
112
+ ArgumentName="uri",
113
+ ArgumentValue=grantee_id,
114
+ )
111
115
  grantee = Grantee(
112
116
  Type=GranteeType.Group,
113
117
  URI=grantee_id,
@@ -115,8 +119,11 @@ def parse_grants_in_headers(permission: Permission, grantees: str) -> Grants:
115
119
 
116
120
  elif grantee_type == "id":
117
121
  if not is_valid_canonical_id(grantee_id):
118
- ex = _create_invalid_argument_exc("Invalid id", "id", grantee_id)
119
- raise ex
122
+ raise InvalidArgument(
123
+ "Invalid id",
124
+ ArgumentName="id",
125
+ ArgumentValue=grantee_id,
126
+ )
120
127
  grantee = Grantee(
121
128
  Type=GranteeType.CanonicalUser,
122
129
  ID=grantee_id,
@@ -141,8 +148,11 @@ def validate_acl_acp(acp: AccessControlPolicy) -> None:
141
148
  )
142
149
 
143
150
  if not is_valid_canonical_id(owner_id := acp["Owner"].get("ID", "")):
144
- ex = _create_invalid_argument_exc("Invalid id", "CanonicalUser/ID", owner_id)
145
- raise ex
151
+ raise InvalidArgument(
152
+ "Invalid id",
153
+ ArgumentName="CanonicalUser/ID",
154
+ ArgumentValue=owner_id,
155
+ )
146
156
 
147
157
  for grant in acp["Grants"]:
148
158
  if grant.get("Permission") not in s3_constants.VALID_GRANTEE_PERMISSIONS:
@@ -165,18 +175,24 @@ def validate_acl_acp(acp: AccessControlPolicy) -> None:
165
175
  and (grant_uri := grantee.get("URI", ""))
166
176
  not in s3_constants.VALID_ACL_PREDEFINED_GROUPS
167
177
  ):
168
- ex = _create_invalid_argument_exc("Invalid group uri", "Group/URI", grant_uri)
169
- raise ex
178
+ raise InvalidArgument(
179
+ "Invalid group uri",
180
+ ArgumentName="Group/URI",
181
+ ArgumentValue=grant_uri,
182
+ )
170
183
 
171
184
  elif grant_type == GranteeType.AmazonCustomerByEmail:
172
185
  # TODO: add validation here
173
186
  continue
174
187
 
175
188
  elif grant_type == GranteeType.CanonicalUser and not is_valid_canonical_id(
176
- (grantee_id := grantee.get("ID", ""))
189
+ grantee_id := grantee.get("ID", "")
177
190
  ):
178
- ex = _create_invalid_argument_exc("Invalid id", "CanonicalUser/ID", grantee_id)
179
- raise ex
191
+ raise InvalidArgument(
192
+ "Invalid id",
193
+ ArgumentName="CanonicalUser/ID",
194
+ ArgumentValue=grantee_id,
195
+ )
180
196
 
181
197
 
182
198
  def validate_lifecycle_configuration(lifecycle_conf: BucketLifecycleConfiguration) -> None:
@@ -242,12 +258,12 @@ def validate_website_configuration(website_config: WebsiteConfiguration) -> None
242
258
  """
243
259
  if redirect_all_req := website_config.get("RedirectAllRequestsTo", {}):
244
260
  if len(website_config) > 1:
245
- ex = _create_invalid_argument_exc(
246
- message="RedirectAllRequestsTo cannot be provided in conjunction with other Routing Rules.",
247
- name="RedirectAllRequestsTo",
248
- value="not null",
261
+ raise InvalidArgument(
262
+ "RedirectAllRequestsTo cannot be provided in conjunction with other Routing Rules.",
263
+ ArgumentName="RedirectAllRequestsTo",
264
+ ArgumentValue="not null",
249
265
  )
250
- raise ex
266
+
251
267
  if "HostName" not in redirect_all_req:
252
268
  raise MalformedXML()
253
269
 
@@ -261,20 +277,18 @@ def validate_website_configuration(website_config: WebsiteConfiguration) -> None
261
277
  # required
262
278
  # https://docs.aws.amazon.com/AmazonS3/latest/API/API_IndexDocument.html
263
279
  if not (index_configuration := website_config.get("IndexDocument")):
264
- ex = _create_invalid_argument_exc(
265
- message="A value for IndexDocument Suffix must be provided if RedirectAllRequestsTo is empty",
266
- name="IndexDocument",
267
- value="null",
280
+ raise InvalidArgument(
281
+ "A value for IndexDocument Suffix must be provided if RedirectAllRequestsTo is empty",
282
+ ArgumentName="IndexDocument",
283
+ ArgumentValue="null",
268
284
  )
269
- raise ex
270
285
 
271
286
  if not (index_suffix := index_configuration.get("Suffix")) or "/" in index_suffix:
272
- ex = _create_invalid_argument_exc(
273
- message="The IndexDocument Suffix is not well formed",
274
- name="IndexDocument",
275
- value=index_suffix or None,
287
+ raise InvalidArgument(
288
+ "The IndexDocument Suffix is not well formed",
289
+ ArgumentName="IndexDocument",
290
+ ArgumentValue=index_suffix or None,
276
291
  )
277
- raise ex
278
292
 
279
293
  if "ErrorDocument" in website_config and not website_config.get("ErrorDocument", {}).get("Key"):
280
294
  raise MalformedXML()
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
  import re
3
+ from collections.abc import Callable
3
4
  from functools import wraps
4
- from typing import Callable, Dict, Optional, Union
5
5
  from urllib.parse import urlparse
6
6
 
7
7
  from werkzeug.datastructures import Headers
@@ -32,8 +32,8 @@ class NoSuchKeyFromErrorDocument(NoSuchKey):
32
32
  code: str = "NoSuchKey"
33
33
  sender_fault: bool = False
34
34
  status_code: int = 404
35
- Key: Optional[ObjectKey]
36
- ErrorDocumentKey: Optional[ObjectKey]
35
+ Key: ObjectKey | None
36
+ ErrorDocumentKey: ObjectKey | None
37
37
 
38
38
 
39
39
  class S3WebsiteHostingHandler:
@@ -93,8 +93,10 @@ class S3WebsiteHostingHandler:
93
93
  return Response(response_body, status=e.response["ResponseMetadata"]["HTTPStatusCode"])
94
94
 
95
95
  except Exception:
96
- LOG.exception(
97
- "Exception encountered while trying to serve s3-website at %s", request.url
96
+ LOG.error(
97
+ "Exception encountered while trying to serve s3-website at %s",
98
+ request.url,
99
+ exc_info=LOG.isEnabledFor(logging.DEBUG),
98
100
  )
99
101
  return Response(_create_500_error_string(), status=500)
100
102
 
@@ -223,7 +225,7 @@ class S3WebsiteHostingHandler:
223
225
  )
224
226
 
225
227
  @staticmethod
226
- def _get_response_headers_from_object(get_object_response: GetObjectOutput) -> Dict[str, str]:
228
+ def _get_response_headers_from_object(get_object_response: GetObjectOutput) -> dict[str, str]:
227
229
  """
228
230
  Only return some headers from the S3 Object
229
231
  :param get_object_response: the response from S3.GetObject
@@ -248,7 +250,7 @@ class S3WebsiteHostingHandler:
248
250
  @staticmethod
249
251
  def _find_matching_rule(
250
252
  routing_rules: RoutingRules, object_key: ObjectKey, error_code: int = None
251
- ) -> Union[RoutingRule, None]:
253
+ ) -> RoutingRule | None:
252
254
  """
253
255
  Iterate over the routing rules set in the configuration, and return the first that match the key name and/or the
254
256
  error code (in the 4XX range).
@@ -2,7 +2,7 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  from pathlib import Path
5
- from typing import Optional, TypedDict
5
+ from typing import TypedDict
6
6
 
7
7
  import localstack.services.cloudformation.provider_utils as util
8
8
  from localstack.services.cloudformation.resource_provider import (
@@ -14,110 +14,110 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class SchedulerScheduleProperties(TypedDict):
17
- FlexibleTimeWindow: Optional[FlexibleTimeWindow]
18
- ScheduleExpression: Optional[str]
19
- Target: Optional[Target]
20
- Arn: Optional[str]
21
- Description: Optional[str]
22
- EndDate: Optional[str]
23
- GroupName: Optional[str]
24
- KmsKeyArn: Optional[str]
25
- Name: Optional[str]
26
- ScheduleExpressionTimezone: Optional[str]
27
- StartDate: Optional[str]
28
- State: Optional[str]
17
+ FlexibleTimeWindow: FlexibleTimeWindow | None
18
+ ScheduleExpression: str | None
19
+ Target: Target | None
20
+ Arn: str | None
21
+ Description: str | None
22
+ EndDate: str | None
23
+ GroupName: str | None
24
+ KmsKeyArn: str | None
25
+ Name: str | None
26
+ ScheduleExpressionTimezone: str | None
27
+ StartDate: str | None
28
+ State: str | None
29
29
 
30
30
 
31
31
  class FlexibleTimeWindow(TypedDict):
32
- Mode: Optional[str]
33
- MaximumWindowInMinutes: Optional[float]
32
+ Mode: str | None
33
+ MaximumWindowInMinutes: float | None
34
34
 
35
35
 
36
36
  class DeadLetterConfig(TypedDict):
37
- Arn: Optional[str]
37
+ Arn: str | None
38
38
 
39
39
 
40
40
  class RetryPolicy(TypedDict):
41
- MaximumEventAgeInSeconds: Optional[float]
42
- MaximumRetryAttempts: Optional[float]
41
+ MaximumEventAgeInSeconds: float | None
42
+ MaximumRetryAttempts: float | None
43
43
 
44
44
 
45
45
  class AwsVpcConfiguration(TypedDict):
46
- Subnets: Optional[list[str]]
47
- AssignPublicIp: Optional[str]
48
- SecurityGroups: Optional[list[str]]
46
+ Subnets: list[str] | None
47
+ AssignPublicIp: str | None
48
+ SecurityGroups: list[str] | None
49
49
 
50
50
 
51
51
  class NetworkConfiguration(TypedDict):
52
- AwsvpcConfiguration: Optional[AwsVpcConfiguration]
52
+ AwsvpcConfiguration: AwsVpcConfiguration | None
53
53
 
54
54
 
55
55
  class CapacityProviderStrategyItem(TypedDict):
56
- CapacityProvider: Optional[str]
57
- Base: Optional[float]
58
- Weight: Optional[float]
56
+ CapacityProvider: str | None
57
+ Base: float | None
58
+ Weight: float | None
59
59
 
60
60
 
61
61
  class PlacementConstraint(TypedDict):
62
- Expression: Optional[str]
63
- Type: Optional[str]
62
+ Expression: str | None
63
+ Type: str | None
64
64
 
65
65
 
66
66
  class PlacementStrategy(TypedDict):
67
- Field: Optional[str]
68
- Type: Optional[str]
67
+ Field: str | None
68
+ Type: str | None
69
69
 
70
70
 
71
71
  class EcsParameters(TypedDict):
72
- TaskDefinitionArn: Optional[str]
73
- CapacityProviderStrategy: Optional[list[CapacityProviderStrategyItem]]
74
- EnableECSManagedTags: Optional[bool]
75
- EnableExecuteCommand: Optional[bool]
76
- Group: Optional[str]
77
- LaunchType: Optional[str]
78
- NetworkConfiguration: Optional[NetworkConfiguration]
79
- PlacementConstraints: Optional[list[PlacementConstraint]]
80
- PlacementStrategy: Optional[list[PlacementStrategy]]
81
- PlatformVersion: Optional[str]
82
- PropagateTags: Optional[str]
83
- ReferenceId: Optional[str]
84
- Tags: Optional[list[dict]]
85
- TaskCount: Optional[float]
72
+ TaskDefinitionArn: str | None
73
+ CapacityProviderStrategy: list[CapacityProviderStrategyItem] | None
74
+ EnableECSManagedTags: bool | None
75
+ EnableExecuteCommand: bool | None
76
+ Group: str | None
77
+ LaunchType: str | None
78
+ NetworkConfiguration: NetworkConfiguration | None
79
+ PlacementConstraints: list[PlacementConstraint] | None
80
+ PlacementStrategy: list[PlacementStrategy] | None
81
+ PlatformVersion: str | None
82
+ PropagateTags: str | None
83
+ ReferenceId: str | None
84
+ Tags: list[dict] | None
85
+ TaskCount: float | None
86
86
 
87
87
 
88
88
  class EventBridgeParameters(TypedDict):
89
- DetailType: Optional[str]
90
- Source: Optional[str]
89
+ DetailType: str | None
90
+ Source: str | None
91
91
 
92
92
 
93
93
  class KinesisParameters(TypedDict):
94
- PartitionKey: Optional[str]
94
+ PartitionKey: str | None
95
95
 
96
96
 
97
97
  class SageMakerPipelineParameter(TypedDict):
98
- Name: Optional[str]
99
- Value: Optional[str]
98
+ Name: str | None
99
+ Value: str | None
100
100
 
101
101
 
102
102
  class SageMakerPipelineParameters(TypedDict):
103
- PipelineParameterList: Optional[list[SageMakerPipelineParameter]]
103
+ PipelineParameterList: list[SageMakerPipelineParameter] | None
104
104
 
105
105
 
106
106
  class SqsParameters(TypedDict):
107
- MessageGroupId: Optional[str]
107
+ MessageGroupId: str | None
108
108
 
109
109
 
110
110
  class Target(TypedDict):
111
- Arn: Optional[str]
112
- RoleArn: Optional[str]
113
- DeadLetterConfig: Optional[DeadLetterConfig]
114
- EcsParameters: Optional[EcsParameters]
115
- EventBridgeParameters: Optional[EventBridgeParameters]
116
- Input: Optional[str]
117
- KinesisParameters: Optional[KinesisParameters]
118
- RetryPolicy: Optional[RetryPolicy]
119
- SageMakerPipelineParameters: Optional[SageMakerPipelineParameters]
120
- SqsParameters: Optional[SqsParameters]
111
+ Arn: str | None
112
+ RoleArn: str | None
113
+ DeadLetterConfig: DeadLetterConfig | None
114
+ EcsParameters: EcsParameters | None
115
+ EventBridgeParameters: EventBridgeParameters | None
116
+ Input: str | None
117
+ KinesisParameters: KinesisParameters | None
118
+ RetryPolicy: RetryPolicy | None
119
+ SageMakerPipelineParameters: SageMakerPipelineParameters | None
120
+ SqsParameters: SqsParameters | None
121
121
 
122
122
 
123
123
  REPEATED_INVOCATION = "repeated_invocation"
@@ -1,5 +1,3 @@
1
- from typing import Optional, Type
2
-
3
1
  from localstack.services.cloudformation.resource_provider import (
4
2
  CloudFormationResourceProviderPlugin,
5
3
  ResourceProvider,
@@ -10,7 +8,7 @@ class SchedulerScheduleProviderPlugin(CloudFormationResourceProviderPlugin):
10
8
  name = "AWS::Scheduler::Schedule"
11
9
 
12
10
  def __init__(self):
13
- self.factory: Optional[Type[ResourceProvider]] = None
11
+ self.factory: type[ResourceProvider] | None = None
14
12
 
15
13
  def load(self):
16
14
  from localstack.services.scheduler.resource_providers.aws_scheduler_schedule import (
@@ -2,7 +2,7 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  from pathlib import Path
5
- from typing import Optional, TypedDict
5
+ from typing import TypedDict
6
6
 
7
7
  import localstack.services.cloudformation.provider_utils as util
8
8
  from localstack.services.cloudformation.resource_provider import (
@@ -14,17 +14,17 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class SchedulerScheduleGroupProperties(TypedDict):
17
- Arn: Optional[str]
18
- CreationDate: Optional[str]
19
- LastModificationDate: Optional[str]
20
- Name: Optional[str]
21
- State: Optional[str]
22
- Tags: Optional[list[Tag]]
17
+ Arn: str | None
18
+ CreationDate: str | None
19
+ LastModificationDate: str | None
20
+ Name: str | None
21
+ State: str | None
22
+ Tags: list[Tag] | None
23
23
 
24
24
 
25
25
  class Tag(TypedDict):
26
- Key: Optional[str]
27
- Value: Optional[str]
26
+ Key: str | None
27
+ Value: str | None
28
28
 
29
29
 
30
30
  REPEATED_INVOCATION = "repeated_invocation"
@@ -1,5 +1,3 @@
1
- from typing import Optional, Type
2
-
3
1
  from localstack.services.cloudformation.resource_provider import (
4
2
  CloudFormationResourceProviderPlugin,
5
3
  ResourceProvider,
@@ -10,7 +8,7 @@ class SchedulerScheduleGroupProviderPlugin(CloudFormationResourceProviderPlugin)
10
8
  name = "AWS::Scheduler::ScheduleGroup"
11
9
 
12
10
  def __init__(self):
13
- self.factory: Optional[Type[ResourceProvider]] = None
11
+ self.factory: type[ResourceProvider] | None = None
14
12
 
15
13
  def load(self):
16
14
  from localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup import (