localstack-core 4.7.1.dev22__py3-none-any.whl → 4.7.1.dev24__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 (545) hide show
  1. localstack/aws/api/apigateway/__init__.py +87 -110
  2. localstack/aws/api/core.py +2 -3
  3. localstack/aws/api/events/__init__.py +12 -16
  4. localstack/aws/api/logs/__init__.py +5 -8
  5. localstack/aws/api/pipes/__init__.py +24 -32
  6. localstack/aws/api/scheduler/__init__.py +14 -16
  7. localstack/aws/api/stepfunctions/__init__.py +88 -114
  8. localstack/aws/api/support/__init__.py +8 -9
  9. localstack/aws/chain.py +2 -2
  10. localstack/aws/client.py +7 -9
  11. localstack/aws/connect.py +40 -39
  12. localstack/aws/forwarder.py +5 -4
  13. localstack/aws/gateway.py +1 -3
  14. localstack/aws/handlers/analytics.py +1 -2
  15. localstack/aws/handlers/cors.py +4 -5
  16. localstack/aws/handlers/logging.py +1 -2
  17. localstack/aws/handlers/metric_handler.py +3 -4
  18. localstack/aws/handlers/service.py +5 -5
  19. localstack/aws/mocking.py +15 -24
  20. localstack/aws/protocol/op_router.py +11 -10
  21. localstack/aws/protocol/parser.py +16 -17
  22. localstack/aws/protocol/serializer.py +37 -40
  23. localstack/aws/protocol/service_router.py +13 -13
  24. localstack/aws/protocol/validate.py +5 -5
  25. localstack/aws/scaffold.py +8 -9
  26. localstack/aws/serving/edge.py +5 -6
  27. localstack/aws/serving/hypercorn.py +2 -2
  28. localstack/aws/serving/twisted.py +1 -2
  29. localstack/aws/serving/werkzeug.py +2 -2
  30. localstack/aws/skeleton.py +7 -8
  31. localstack/aws/spec.py +29 -30
  32. localstack/cli/localstack.py +6 -6
  33. localstack/cli/lpm.py +2 -2
  34. localstack/config.py +14 -15
  35. localstack/deprecations.py +5 -5
  36. localstack/dev/run/__main__.py +4 -4
  37. localstack/dev/run/paths.py +5 -5
  38. localstack/dns/models.py +2 -1
  39. localstack/dns/server.py +3 -2
  40. localstack/http/dispatcher.py +1 -2
  41. localstack/http/response.py +2 -2
  42. localstack/http/router.py +1 -1
  43. localstack/http/trace.py +2 -1
  44. localstack/logging/format.py +3 -3
  45. localstack/packages/api.py +5 -5
  46. localstack/packages/core.py +3 -3
  47. localstack/packages/debugpy.py +1 -3
  48. localstack/packages/ffmpeg.py +1 -2
  49. localstack/packages/java.py +1 -2
  50. localstack/packages/terraform.py +1 -2
  51. localstack/runtime/init.py +6 -7
  52. localstack/runtime/shutdown.py +2 -1
  53. localstack/services/apigateway/exporter.py +1 -2
  54. localstack/services/apigateway/helpers.py +6 -6
  55. localstack/services/apigateway/legacy/context.py +21 -21
  56. localstack/services/apigateway/legacy/helpers.py +20 -20
  57. localstack/services/apigateway/legacy/integration.py +7 -7
  58. localstack/services/apigateway/legacy/router_asf.py +2 -2
  59. localstack/services/apigateway/legacy/templates.py +5 -5
  60. localstack/services/apigateway/models.py +16 -16
  61. localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
  62. localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
  63. localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
  64. localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
  65. localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +1 -1
  66. localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
  67. localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
  68. localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +6 -6
  69. localstack/services/apigateway/next_gen/execute_api/integrations/http.py +9 -9
  70. localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
  71. localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
  72. localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
  73. localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
  74. localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
  75. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
  76. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
  77. localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
  78. localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
  79. localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
  80. localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
  81. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
  82. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
  83. localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
  84. localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
  85. localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
  86. localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
  87. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
  88. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
  89. localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +5 -5
  90. localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
  91. localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
  92. localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
  93. localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
  94. localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
  95. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
  96. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
  97. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
  98. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
  99. localstack/services/cdk/resource_providers/cdk_metadata.py +2 -2
  100. localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
  101. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
  102. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
  103. localstack/services/cloudformation/cfn_utils.py +1 -1
  104. localstack/services/cloudformation/deployment_utils.py +2 -2
  105. localstack/services/cloudformation/engine/changes.py +3 -3
  106. localstack/services/cloudformation/engine/entities.py +12 -12
  107. localstack/services/cloudformation/engine/parameters.py +3 -3
  108. localstack/services/cloudformation/engine/template_deployer.py +9 -10
  109. localstack/services/cloudformation/engine/transformers.py +5 -4
  110. localstack/services/cloudformation/engine/types.py +5 -4
  111. localstack/services/cloudformation/engine/v2/change_set_model.py +31 -9
  112. localstack/services/cloudformation/engine/v2/change_set_model_describer.py +6 -6
  113. localstack/services/cloudformation/engine/v2/change_set_model_executor.py +62 -80
  114. localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +15 -14
  115. localstack/services/cloudformation/engine/v2/change_set_model_transform.py +5 -5
  116. localstack/services/cloudformation/provider_utils.py +2 -2
  117. localstack/services/cloudformation/resource_provider.py +10 -9
  118. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
  119. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
  120. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
  121. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
  122. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
  123. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
  124. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
  125. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
  126. localstack/services/cloudformation/scaffolding/__main__.py +8 -7
  127. localstack/services/cloudformation/scaffolding/propgen.py +2 -2
  128. localstack/services/cloudformation/stores.py +2 -3
  129. localstack/services/cloudformation/v2/entities.py +57 -36
  130. localstack/services/cloudformation/v2/provider.py +155 -29
  131. localstack/services/cloudwatch/alarm_scheduler.py +7 -7
  132. localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
  133. localstack/services/cloudwatch/models.py +5 -7
  134. localstack/services/cloudwatch/provider.py +12 -12
  135. localstack/services/cloudwatch/provider_v2.py +2 -4
  136. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
  137. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
  138. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
  139. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
  140. localstack/services/dynamodb/packages.py +1 -2
  141. localstack/services/dynamodb/provider.py +7 -8
  142. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
  143. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
  144. localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
  145. localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
  146. localstack/services/dynamodb/utils.py +13 -14
  147. localstack/services/dynamodb/v2/provider.py +6 -7
  148. localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
  149. localstack/services/dynamodbstreams/models.py +1 -3
  150. localstack/services/ec2/patches.py +4 -5
  151. localstack/services/ec2/provider.py +3 -3
  152. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
  153. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
  154. localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
  155. localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
  156. localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
  157. localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
  158. localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
  159. localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
  160. localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
  161. localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
  162. localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
  163. localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
  164. localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
  165. localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
  166. localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
  167. localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
  168. localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
  169. localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
  170. localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
  171. localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
  172. localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
  173. localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
  174. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
  175. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
  176. localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
  177. localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
  178. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
  179. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
  180. localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
  181. localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
  182. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +13 -13
  183. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
  184. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
  185. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
  186. localstack/services/ecr/resource_providers/aws_ecr_repository.py +17 -17
  187. localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
  188. localstack/services/edge.py +5 -5
  189. localstack/services/es/provider.py +19 -19
  190. localstack/services/events/archive.py +2 -2
  191. localstack/services/events/connection.py +5 -5
  192. localstack/services/events/event_bus.py +9 -9
  193. localstack/services/events/models.py +25 -25
  194. localstack/services/events/provider.py +12 -12
  195. localstack/services/events/replay.py +3 -3
  196. localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
  197. localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
  198. localstack/services/events/resource_providers/aws_events_connection.py +27 -27
  199. localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
  200. localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
  201. localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
  202. localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
  203. localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
  204. localstack/services/events/resource_providers/aws_events_rule.py +82 -82
  205. localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
  206. localstack/services/events/rule.py +15 -15
  207. localstack/services/events/target.py +5 -5
  208. localstack/services/events/utils.py +7 -7
  209. localstack/services/events/v1/models.py +1 -3
  210. localstack/services/events/v1/provider.py +10 -10
  211. localstack/services/firehose/models.py +1 -3
  212. localstack/services/firehose/provider.py +11 -12
  213. localstack/services/iam/iam_patches.py +5 -6
  214. localstack/services/iam/provider.py +4 -4
  215. localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
  216. localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
  217. localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
  218. localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
  219. localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
  220. localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
  221. localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
  222. localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
  223. localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
  224. localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
  225. localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
  226. localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
  227. localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
  228. localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
  229. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
  230. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
  231. localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
  232. localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
  233. localstack/services/kinesis/kinesis_mock_server.py +7 -8
  234. localstack/services/kinesis/models.py +2 -3
  235. localstack/services/kinesis/packages.py +3 -3
  236. localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
  237. localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
  238. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
  239. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
  240. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
  241. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
  242. localstack/services/kms/models.py +14 -17
  243. localstack/services/kms/provider.py +2 -3
  244. localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
  245. localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
  246. localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
  247. localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
  248. localstack/services/kms/utils.py +3 -2
  249. localstack/services/lambda_/api_utils.py +12 -12
  250. localstack/services/lambda_/custom_endpoints.py +2 -2
  251. localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +1 -1
  252. localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
  253. localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
  254. localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
  255. localstack/services/lambda_/invocation/assignment.py +1 -2
  256. localstack/services/lambda_/invocation/docker_runtime_executor.py +5 -4
  257. localstack/services/lambda_/invocation/execution_environment.py +4 -4
  258. localstack/services/lambda_/invocation/executor_endpoint.py +5 -5
  259. localstack/services/lambda_/invocation/internal_sqs_queue.py +1 -1
  260. localstack/services/lambda_/invocation/lambda_models.py +23 -23
  261. localstack/services/lambda_/invocation/lambda_service.py +4 -4
  262. localstack/services/lambda_/invocation/logs.py +2 -3
  263. localstack/services/lambda_/invocation/runtime_executor.py +3 -3
  264. localstack/services/lambda_/ldm.py +2 -3
  265. localstack/services/lambda_/packages.py +2 -3
  266. localstack/services/lambda_/provider.py +3 -3
  267. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
  268. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
  269. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
  270. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
  271. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
  272. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
  273. localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
  274. localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
  275. localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
  276. localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
  277. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
  278. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
  279. localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
  280. localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
  281. localstack/services/lambda_/resource_providers/aws_lambda_url.py +14 -14
  282. localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
  283. localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
  284. localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
  285. localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
  286. localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
  287. localstack/services/lambda_/runtimes.py +1 -3
  288. localstack/services/logs/models.py +1 -3
  289. localstack/services/logs/provider.py +3 -3
  290. localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
  291. localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
  292. localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
  293. localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
  294. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
  295. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
  296. localstack/services/moto.py +3 -3
  297. localstack/services/opensearch/cluster.py +13 -13
  298. localstack/services/opensearch/cluster_manager.py +13 -14
  299. localstack/services/opensearch/models.py +1 -3
  300. localstack/services/opensearch/packages.py +1 -2
  301. localstack/services/opensearch/provider.py +7 -8
  302. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
  303. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
  304. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
  305. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
  306. localstack/services/opensearch/versions.py +1 -3
  307. localstack/services/plugins.py +26 -25
  308. localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
  309. localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
  310. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
  311. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
  312. localstack/services/route53/models.py +1 -3
  313. localstack/services/route53/provider.py +1 -2
  314. localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
  315. localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
  316. localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
  317. localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
  318. localstack/services/route53resolver/models.py +8 -10
  319. localstack/services/route53resolver/provider.py +12 -12
  320. localstack/services/s3/codec.py +2 -2
  321. localstack/services/s3/cors.py +4 -4
  322. localstack/services/s3/models.py +72 -72
  323. localstack/services/s3/notifications.py +19 -19
  324. localstack/services/s3/presigned_url.py +6 -5
  325. localstack/services/s3/provider.py +13 -14
  326. localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
  327. localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
  328. localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
  329. localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
  330. localstack/services/s3/storage/core.py +4 -3
  331. localstack/services/s3/storage/ephemeral.py +7 -6
  332. localstack/services/s3/utils.py +11 -11
  333. localstack/services/s3/validation.py +1 -1
  334. localstack/services/s3/website_hosting.py +5 -5
  335. localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
  336. localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
  337. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
  338. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
  339. localstack/services/secretsmanager/provider.py +9 -11
  340. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
  341. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
  342. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
  343. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
  344. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
  345. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
  346. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
  347. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
  348. localstack/services/ses/provider.py +8 -8
  349. localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
  350. localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
  351. localstack/services/sns/models.py +25 -25
  352. localstack/services/sns/provider.py +1 -2
  353. localstack/services/sns/publisher.py +6 -7
  354. localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
  355. localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
  356. localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
  357. localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
  358. localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
  359. localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
  360. localstack/services/sqs/models.py +21 -22
  361. localstack/services/sqs/provider.py +19 -18
  362. localstack/services/sqs/query_api.py +2 -3
  363. localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
  364. localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
  365. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +4 -4
  366. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
  367. localstack/services/sqs/utils.py +3 -3
  368. localstack/services/ssm/provider.py +2 -3
  369. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
  370. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
  371. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
  372. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
  373. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
  374. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
  375. localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
  376. localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
  377. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
  378. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
  379. localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
  380. localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
  381. localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
  382. localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
  383. localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
  384. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
  385. localstack/services/stepfunctions/asl/component/common/path/input_path.py +3 -3
  386. localstack/services/stepfunctions/asl/component/common/path/output_path.py +3 -3
  387. localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
  388. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
  389. localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
  390. localstack/services/stepfunctions/asl/component/common/string/string_expression.py +2 -2
  391. localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
  392. localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
  393. localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +3 -3
  394. localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +2 -2
  395. localstack/services/stepfunctions/asl/component/program/program.py +8 -8
  396. localstack/services/stepfunctions/asl/component/state/state.py +10 -11
  397. localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
  398. localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
  399. localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +1 -3
  400. localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +8 -8
  401. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +6 -6
  402. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
  403. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
  404. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
  405. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
  406. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
  407. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
  408. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
  409. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
  410. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
  411. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
  412. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
  413. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
  414. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
  415. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
  416. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
  417. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +10 -11
  418. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
  419. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +4 -4
  420. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +1 -2
  421. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +6 -6
  422. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
  423. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
  424. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +15 -15
  425. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +5 -4
  426. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
  427. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
  428. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
  429. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
  430. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
  431. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
  432. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
  433. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
  434. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
  435. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +2 -2
  436. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
  437. localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +2 -4
  438. localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +3 -5
  439. localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
  440. localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
  441. localstack/services/stepfunctions/asl/eval/environment.py +15 -17
  442. localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
  443. localstack/services/stepfunctions/asl/eval/event/event_manager.py +9 -9
  444. localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
  445. localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
  446. localstack/services/stepfunctions/asl/eval/states.py +11 -11
  447. localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
  448. localstack/services/stepfunctions/asl/eval/variable_store.py +3 -3
  449. localstack/services/stepfunctions/asl/jsonata/jsonata.py +5 -4
  450. localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +1 -2
  451. localstack/services/stepfunctions/asl/parse/preprocessor.py +30 -30
  452. localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
  453. localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
  454. localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
  455. localstack/services/stepfunctions/backend/activity.py +4 -4
  456. localstack/services/stepfunctions/backend/alias.py +6 -6
  457. localstack/services/stepfunctions/backend/execution.py +25 -27
  458. localstack/services/stepfunctions/backend/execution_worker.py +7 -7
  459. localstack/services/stepfunctions/backend/state_machine.py +26 -26
  460. localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
  461. localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
  462. localstack/services/stepfunctions/mocking/mock_config.py +5 -5
  463. localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
  464. localstack/services/stepfunctions/provider.py +27 -37
  465. localstack/services/stepfunctions/quotas.py +2 -3
  466. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
  467. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
  468. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
  469. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
  470. localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
  471. localstack/services/stores.py +7 -7
  472. localstack/services/transcribe/packages.py +1 -3
  473. localstack/services/transcribe/provider.py +2 -2
  474. localstack/state/inspect.py +4 -4
  475. localstack/state/pickle.py +16 -15
  476. localstack/testing/aws/asf_utils.py +3 -2
  477. localstack/testing/aws/lambda_utils.py +15 -14
  478. localstack/testing/aws/util.py +3 -2
  479. localstack/testing/pytest/cloudformation/fixtures.py +13 -3
  480. localstack/testing/pytest/container.py +5 -4
  481. localstack/testing/pytest/filters.py +1 -3
  482. localstack/testing/pytest/fixtures.py +11 -11
  483. localstack/testing/pytest/marking.py +6 -6
  484. localstack/testing/pytest/path_filter.py +1 -1
  485. localstack/testing/pytest/stepfunctions/utils.py +1 -1
  486. localstack/testing/pytest/validation_tracking.py +3 -3
  487. localstack/testing/scenario/provisioning.py +11 -10
  488. localstack/testing/snapshots/transformer_utility.py +2 -2
  489. localstack/testing/testselection/matching.py +2 -2
  490. localstack/testing/testselection/opt_out.py +1 -1
  491. localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
  492. localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
  493. localstack/testing/testselection/testselection.py +2 -2
  494. localstack/utils/analytics/cli.py +2 -3
  495. localstack/utils/analytics/client.py +5 -5
  496. localstack/utils/analytics/events.py +2 -2
  497. localstack/utils/analytics/metrics/registry.py +1 -1
  498. localstack/utils/analytics/publisher.py +4 -4
  499. localstack/utils/analytics/service_request_aggregator.py +3 -3
  500. localstack/utils/aws/arns.py +2 -2
  501. localstack/utils/aws/aws_responses.py +14 -21
  502. localstack/utils/aws/aws_stack.py +7 -11
  503. localstack/utils/aws/dead_letter_queue.py +3 -4
  504. localstack/utils/aws/message_forwarding.py +9 -11
  505. localstack/utils/aws/request_context.py +4 -4
  506. localstack/utils/aws/templating.py +3 -3
  507. localstack/utils/batch_policy.py +2 -2
  508. localstack/utils/bootstrap.py +19 -20
  509. localstack/utils/collections.py +16 -23
  510. localstack/utils/config_listener.py +2 -2
  511. localstack/utils/container_networking.py +3 -3
  512. localstack/utils/container_utils/container_client.py +72 -75
  513. localstack/utils/container_utils/docker_cmd_client.py +33 -33
  514. localstack/utils/container_utils/docker_sdk_client.py +35 -35
  515. localstack/utils/crypto.py +2 -3
  516. localstack/utils/diagnose.py +11 -11
  517. localstack/utils/docker_utils.py +4 -4
  518. localstack/utils/files.py +1 -2
  519. localstack/utils/functions.py +2 -2
  520. localstack/utils/http.py +6 -6
  521. localstack/utils/iputils.py +2 -1
  522. localstack/utils/json.py +1 -1
  523. localstack/utils/net.py +10 -9
  524. localstack/utils/objects.py +10 -10
  525. localstack/utils/patch.py +5 -5
  526. localstack/utils/platform.py +2 -2
  527. localstack/utils/run.py +7 -7
  528. localstack/utils/scheduler.py +3 -2
  529. localstack/utils/strings.py +2 -2
  530. localstack/utils/tagging.py +3 -3
  531. localstack/utils/testutil.py +9 -9
  532. localstack/utils/threads.py +2 -2
  533. localstack/utils/xml.py +1 -1
  534. localstack/version.py +2 -2
  535. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/METADATA +1 -1
  536. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/RECORD +544 -544
  537. localstack_core-4.7.1.dev24.dist-info/plux.json +1 -0
  538. localstack_core-4.7.1.dev22.dist-info/plux.json +0 -1
  539. {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack +0 -0
  540. {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack-supervisor +0 -0
  541. {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack.bat +0 -0
  542. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/WHEEL +0 -0
  543. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/entry_points.txt +0 -0
  544. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/licenses/LICENSE.txt +0 -0
  545. {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/top_level.txt +0 -0
@@ -5,9 +5,10 @@ import logging
5
5
  import re
6
6
  import threading
7
7
  import time
8
+ from collections.abc import Iterable
8
9
  from concurrent.futures.thread import ThreadPoolExecutor
9
10
  from itertools import islice
10
- from typing import Dict, Iterable, List, Literal, Optional, Tuple
11
+ from typing import Literal
11
12
 
12
13
  from botocore.utils import InvalidArnException
13
14
  from moto.sqs.models import BINARY_TYPE_FIELD_INDEX, STRING_TYPE_FIELD_INDEX
@@ -310,7 +311,7 @@ class CloudwatchPublishWorker:
310
311
  def __init__(self) -> None:
311
312
  super().__init__()
312
313
  self.scheduler = Scheduler()
313
- self.thread: Optional[FuncThread] = None
314
+ self.thread: FuncThread | None = None
314
315
 
315
316
  def publish_approximate_cloudwatch_metrics(self):
316
317
  """Publishes the metrics for ApproximateNumberOfMessagesVisible, ApproximateNumberOfMessagesNotVisible
@@ -391,7 +392,7 @@ class QueueUpdateWorker:
391
392
  def __init__(self) -> None:
392
393
  super().__init__()
393
394
  self.scheduler = Scheduler()
394
- self.thread: Optional[FuncThread] = None
395
+ self.thread: FuncThread | None = None
395
396
  self.mutex = threading.RLock()
396
397
 
397
398
  def iter_queues(self) -> Iterable[SqsQueue]:
@@ -744,7 +745,7 @@ class SqsDeveloperEndpoints:
744
745
 
745
746
  def _collect_messages(
746
747
  self, queue: SqsQueue, show_invisible: bool = False, show_delayed: bool = False
747
- ) -> List[Message]:
748
+ ) -> list[Message]:
748
749
  """
749
750
  Retrieves from a given SqsQueue all visible messages without causing any side effects (not setting any
750
751
  receive timestamps, receive counts, or visibility state).
@@ -756,7 +757,7 @@ class SqsDeveloperEndpoints:
756
757
  """
757
758
  receipt_handle = "SQS/BACKDOOR/ACCESS" # dummy receipt handle
758
759
 
759
- sqs_messages: List[SqsMessage] = []
760
+ sqs_messages: list[SqsMessage] = []
760
761
 
761
762
  if show_invisible:
762
763
  sqs_messages.extend(queue.inflight)
@@ -811,7 +812,7 @@ class SqsProvider(SqsApi, ServiceLifecycleHook):
811
812
  - UntagQueue
812
813
  """
813
814
 
814
- queues: Dict[str, SqsQueue]
815
+ queues: dict[str, SqsQueue]
815
816
 
816
817
  def __init__(self) -> None:
817
818
  super().__init__()
@@ -877,8 +878,8 @@ class SqsProvider(SqsApi, ServiceLifecycleHook):
877
878
  def _resolve_queue(
878
879
  self,
879
880
  context: RequestContext,
880
- queue_name: Optional[str] = None,
881
- queue_url: Optional[str] = None,
881
+ queue_name: str | None = None,
882
+ queue_url: str | None = None,
882
883
  ) -> SqsQueue:
883
884
  """
884
885
  Determines the name of the queue from available information (request context, queue URL) to return the respective queue,
@@ -1670,8 +1671,8 @@ class SqsProvider(SqsApi, ServiceLifecycleHook):
1670
1671
  self,
1671
1672
  context: RequestContext,
1672
1673
  message_system_attributes: MessageBodySystemAttributeMap = None,
1673
- ) -> Dict[MessageSystemAttributeName, str]:
1674
- result: Dict[MessageSystemAttributeName, str] = {
1674
+ ) -> dict[MessageSystemAttributeName, str]:
1675
+ result: dict[MessageSystemAttributeName, str] = {
1675
1676
  MessageSystemAttributeName.SenderId: context.account_id, # not the account ID in AWS
1676
1677
  MessageSystemAttributeName.SentTimestamp: str(now(millis=True)),
1677
1678
  }
@@ -1705,7 +1706,7 @@ class SqsProvider(SqsApi, ServiceLifecycleHook):
1705
1706
 
1706
1707
  def _assert_batch(
1707
1708
  self,
1708
- batch: List,
1709
+ batch: list,
1709
1710
  *,
1710
1711
  require_fifo_queue_params: bool = False,
1711
1712
  require_message_deduplication_id: bool = False,
@@ -1741,7 +1742,7 @@ class SqsProvider(SqsApi, ServiceLifecycleHook):
1741
1742
  else:
1742
1743
  visited.add(entry_id)
1743
1744
 
1744
- def _assert_valid_batch_size(self, batch: List, max_message_size: int):
1745
+ def _assert_valid_batch_size(self, batch: list, max_message_size: int):
1745
1746
  batch_message_size = sum(
1746
1747
  _message_body_size(entry.get("MessageBody"))
1747
1748
  + _message_attributes_size(entry.get("MessageAttributes"))
@@ -1752,7 +1753,7 @@ class SqsProvider(SqsApi, ServiceLifecycleHook):
1752
1753
  error += f" You have sent {batch_message_size} bytes."
1753
1754
  raise BatchRequestTooLong(error)
1754
1755
 
1755
- def _assert_valid_message_ids(self, batch: List):
1756
+ def _assert_valid_message_ids(self, batch: list):
1756
1757
  batch_id_regex = r"^[\w-]{1,80}$"
1757
1758
  for message in batch:
1758
1759
  if not re.match(batch_id_regex, message.get("Id", "")):
@@ -1782,7 +1783,7 @@ class SqsProvider(SqsApi, ServiceLifecycleHook):
1782
1783
 
1783
1784
 
1784
1785
  # Method from moto's attribute_md5 of moto/sqs/models.py, separated from the Message Object
1785
- def _create_message_attribute_hash(message_attributes) -> Optional[str]:
1786
+ def _create_message_attribute_hash(message_attributes) -> str | None:
1786
1787
  # To avoid the need to check for dict conformity everytime we invoke this function
1787
1788
  if not isinstance(message_attributes, dict):
1788
1789
  return
@@ -1810,8 +1811,8 @@ def _create_message_attribute_hash(message_attributes) -> Optional[str]:
1810
1811
 
1811
1812
 
1812
1813
  def resolve_queue_location(
1813
- context: RequestContext, queue_name: Optional[str] = None, queue_url: Optional[str] = None
1814
- ) -> Tuple[str, Optional[str], str]:
1814
+ context: RequestContext, queue_name: str | None = None, queue_url: str | None = None
1815
+ ) -> tuple[str, str | None, str]:
1815
1816
  """
1816
1817
  Resolves a queue location from the given information.
1817
1818
 
@@ -1868,7 +1869,7 @@ def to_sqs_api_message(
1868
1869
  return message
1869
1870
 
1870
1871
 
1871
- def message_filter_attributes(message: Message, names: Optional[AttributeNameList]):
1872
+ def message_filter_attributes(message: Message, names: AttributeNameList | None):
1872
1873
  """
1873
1874
  Utility function filter from the given message (in-place) the system attributes from the given list. It will
1874
1875
  apply all rules according to:
@@ -1892,7 +1893,7 @@ def message_filter_attributes(message: Message, names: Optional[AttributeNameLis
1892
1893
  del message["Attributes"][k]
1893
1894
 
1894
1895
 
1895
- def message_filter_message_attributes(message: Message, names: Optional[MessageAttributeNameList]):
1896
+ def message_filter_message_attributes(message: Message, names: MessageAttributeNameList | None):
1896
1897
  """
1897
1898
  Utility function filter from the given message (in-place) the message attributes from the given list. It will
1898
1899
  apply all rules according to:
@@ -4,7 +4,6 @@ generic implementation that creates from Query API requests the respective AWS r
4
4
  to make the request."""
5
5
 
6
6
  import logging
7
- from typing import Dict, Optional, Tuple
8
7
  from urllib.parse import urlencode
9
8
 
10
9
  from botocore.exceptions import ClientError
@@ -179,7 +178,7 @@ def handle_request(request: Request, region: str) -> Response:
179
178
  )
180
179
 
181
180
 
182
- def try_call_sqs(request: Request, region: str) -> Tuple[Dict, OperationModel]:
181
+ def try_call_sqs(request: Request, region: str) -> tuple[dict, OperationModel]:
183
182
  action = request.values.get("Action")
184
183
  if not action:
185
184
  raise UnknownOperationException()
@@ -209,7 +208,7 @@ def try_call_sqs(request: Request, region: str) -> Tuple[Dict, OperationModel]:
209
208
  # Extract from auth header to allow cross-account operations
210
209
  # TODO: permissions encoded in URL as AUTHPARAMS cannot be accounted for in this method, which is not a big
211
210
  # problem yet since we generally don't enforce permissions.
212
- account_id: Optional[str] = extract_access_key_id_from_auth_header(headers)
211
+ account_id: str | None = extract_access_key_id_from_auth_header(headers)
213
212
 
214
213
  client = connect_to(
215
214
  region_name=region,
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  import json
5
5
  from pathlib import Path
6
- from typing import Optional, TypedDict
6
+ from typing import TypedDict
7
7
 
8
8
  import localstack.services.cloudformation.provider_utils as util
9
9
  from localstack.services.cloudformation.resource_provider import (
@@ -15,29 +15,29 @@ from localstack.services.cloudformation.resource_provider import (
15
15
 
16
16
 
17
17
  class SQSQueueProperties(TypedDict):
18
- Arn: Optional[str]
19
- ContentBasedDeduplication: Optional[bool]
20
- DeduplicationScope: Optional[str]
21
- DelaySeconds: Optional[int]
22
- FifoQueue: Optional[bool]
23
- FifoThroughputLimit: Optional[str]
24
- KmsDataKeyReusePeriodSeconds: Optional[int]
25
- KmsMasterKeyId: Optional[str]
26
- MaximumMessageSize: Optional[int]
27
- MessageRetentionPeriod: Optional[int]
28
- QueueName: Optional[str]
29
- QueueUrl: Optional[str]
30
- ReceiveMessageWaitTimeSeconds: Optional[int]
31
- RedriveAllowPolicy: Optional[dict | str]
32
- RedrivePolicy: Optional[dict | str]
33
- SqsManagedSseEnabled: Optional[bool]
34
- Tags: Optional[list[Tag]]
35
- VisibilityTimeout: Optional[int]
18
+ Arn: str | None
19
+ ContentBasedDeduplication: bool | None
20
+ DeduplicationScope: str | None
21
+ DelaySeconds: int | None
22
+ FifoQueue: bool | None
23
+ FifoThroughputLimit: str | None
24
+ KmsDataKeyReusePeriodSeconds: int | None
25
+ KmsMasterKeyId: str | None
26
+ MaximumMessageSize: int | None
27
+ MessageRetentionPeriod: int | None
28
+ QueueName: str | None
29
+ QueueUrl: str | None
30
+ ReceiveMessageWaitTimeSeconds: int | None
31
+ RedriveAllowPolicy: dict | str | None
32
+ RedrivePolicy: dict | str | None
33
+ SqsManagedSseEnabled: bool | None
34
+ Tags: list[Tag] | None
35
+ VisibilityTimeout: int | None
36
36
 
37
37
 
38
38
  class Tag(TypedDict):
39
- Key: Optional[str]
40
- Value: Optional[str]
39
+ Key: str | None
40
+ Value: str | None
41
41
 
42
42
 
43
43
  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 SQSQueueProviderPlugin(CloudFormationResourceProviderPlugin):
10
8
  name = "AWS::SQS::Queue"
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.sqs.resource_providers.aws_sqs_queue import SQSQueueProvider
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  import json
5
5
  from pathlib import Path
6
- from typing import Optional, TypedDict
6
+ from typing import TypedDict
7
7
 
8
8
  import localstack.services.cloudformation.provider_utils as util
9
9
  from localstack.services.cloudformation.resource_provider import (
@@ -15,9 +15,9 @@ from localstack.services.cloudformation.resource_provider import (
15
15
 
16
16
 
17
17
  class SQSQueuePolicyProperties(TypedDict):
18
- PolicyDocument: Optional[dict]
19
- Queues: Optional[list[str]]
20
- Id: Optional[str]
18
+ PolicyDocument: dict | None
19
+ Queues: list[str] | None
20
+ Id: str | None
21
21
 
22
22
 
23
23
  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 SQSQueuePolicyProviderPlugin(CloudFormationResourceProviderPlugin):
10
8
  name = "AWS::SQS::QueuePolicy"
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.sqs.resource_providers.aws_sqs_queuepolicy import (
@@ -3,7 +3,7 @@ import itertools
3
3
  import json
4
4
  import re
5
5
  import time
6
- from typing import Literal, NamedTuple, Optional, Tuple
6
+ from typing import Literal, NamedTuple
7
7
  from urllib.parse import urlparse
8
8
 
9
9
  from localstack.aws.api.sqs import QueueAttributeName, ReceiptHandleIsInvalid
@@ -36,7 +36,7 @@ def is_sqs_queue_url(url: str) -> bool:
36
36
 
37
37
  def guess_endpoint_strategy_and_host(
38
38
  host: str,
39
- ) -> Tuple[Literal["standard", "domain", "path"], str]:
39
+ ) -> tuple[Literal["standard", "domain", "path"], str]:
40
40
  """
41
41
  This method is used for the dynamic endpoint strategy. It heuristically determines a tuple where the first
42
42
  element is the endpoint strategy, and the second is the part of the host after the endpoint prefix and region.
@@ -77,7 +77,7 @@ def is_fifo_queue(queue):
77
77
  return "true" == queue.attributes.get(QueueAttributeName.FifoQueue, "false").lower()
78
78
 
79
79
 
80
- def parse_queue_url(queue_url: str) -> Tuple[str, Optional[str], str]:
80
+ def parse_queue_url(queue_url: str) -> tuple[str, str | None, str]:
81
81
  """
82
82
  Parses an SQS Queue URL and returns a triple of account_id, region and queue_name.
83
83
 
@@ -3,7 +3,6 @@ import json
3
3
  import logging
4
4
  import time
5
5
  from abc import ABC
6
- from typing import Dict, Optional
7
6
 
8
7
  from localstack.aws.api import CommonServiceException, RequestContext
9
8
  from localstack.aws.api.ssm import (
@@ -339,7 +338,7 @@ class SsmProvider(SsmApi, ABC):
339
338
  # utility methods below
340
339
 
341
340
  @staticmethod
342
- def _denormalize_param_name_in_response(param_result: Dict, param_name: str):
341
+ def _denormalize_param_name_in_response(param_result: dict, param_name: str):
343
342
  result_name = param_result["Name"]
344
343
  if result_name != param_name and result_name.lstrip("/") == param_name.lstrip("/"):
345
344
  param_result["Name"] = param_name
@@ -373,7 +372,7 @@ class SsmProvider(SsmApi, ABC):
373
372
  @staticmethod
374
373
  def _get_secrets_information(
375
374
  account_id: str, region_name: str, name: ParameterName, resource_name: str
376
- ) -> Optional[GetParameterResult]:
375
+ ) -> GetParameterResult | None:
377
376
  client = connect_to(aws_access_key_id=account_id, region_name=region_name).secretsmanager
378
377
  try:
379
378
  secret_info = client.get_secret_value(SecretId=resource_name)
@@ -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,23 +14,23 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class SSMMaintenanceWindowProperties(TypedDict):
17
- AllowUnassociatedTargets: Optional[bool]
18
- Cutoff: Optional[int]
19
- Duration: Optional[int]
20
- Name: Optional[str]
21
- Schedule: Optional[str]
22
- Description: Optional[str]
23
- EndDate: Optional[str]
24
- Id: Optional[str]
25
- ScheduleOffset: Optional[int]
26
- ScheduleTimezone: Optional[str]
27
- StartDate: Optional[str]
28
- Tags: Optional[list[Tag]]
17
+ AllowUnassociatedTargets: bool | None
18
+ Cutoff: int | None
19
+ Duration: int | None
20
+ Name: str | None
21
+ Schedule: str | None
22
+ Description: str | None
23
+ EndDate: str | None
24
+ Id: str | None
25
+ ScheduleOffset: int | None
26
+ ScheduleTimezone: str | None
27
+ StartDate: str | None
28
+ Tags: list[Tag] | None
29
29
 
30
30
 
31
31
  class Tag(TypedDict):
32
- Key: Optional[str]
33
- Value: Optional[str]
32
+ Key: str | None
33
+ Value: str | None
34
34
 
35
35
 
36
36
  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 SSMMaintenanceWindowProviderPlugin(CloudFormationResourceProviderPlugin):
10
8
  name = "AWS::SSM::MaintenanceWindow"
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.ssm.resource_providers.aws_ssm_maintenancewindow 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,18 +14,18 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class SSMMaintenanceWindowTargetProperties(TypedDict):
17
- ResourceType: Optional[str]
18
- Targets: Optional[list[Targets]]
19
- WindowId: Optional[str]
20
- Description: Optional[str]
21
- Id: Optional[str]
22
- Name: Optional[str]
23
- OwnerInformation: Optional[str]
17
+ ResourceType: str | None
18
+ Targets: list[Targets] | None
19
+ WindowId: str | None
20
+ Description: str | None
21
+ Id: str | None
22
+ Name: str | None
23
+ OwnerInformation: str | None
24
24
 
25
25
 
26
26
  class Targets(TypedDict):
27
- Key: Optional[str]
28
- Values: Optional[list[str]]
27
+ Key: str | None
28
+ Values: list[str] | None
29
29
 
30
30
 
31
31
  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 SSMMaintenanceWindowTargetProviderPlugin(CloudFormationResourceProviderPlu
10
8
  name = "AWS::SSM::MaintenanceWindowTarget"
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.ssm.resource_providers.aws_ssm_maintenancewindowtarget 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,80 +14,80 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class SSMMaintenanceWindowTaskProperties(TypedDict):
17
- Priority: Optional[int]
18
- TaskArn: Optional[str]
19
- TaskType: Optional[str]
20
- WindowId: Optional[str]
21
- CutoffBehavior: Optional[str]
22
- Description: Optional[str]
23
- Id: Optional[str]
24
- LoggingInfo: Optional[LoggingInfo]
25
- MaxConcurrency: Optional[str]
26
- MaxErrors: Optional[str]
27
- Name: Optional[str]
28
- ServiceRoleArn: Optional[str]
29
- Targets: Optional[list[Target]]
30
- TaskInvocationParameters: Optional[TaskInvocationParameters]
31
- TaskParameters: Optional[dict]
17
+ Priority: int | None
18
+ TaskArn: str | None
19
+ TaskType: str | None
20
+ WindowId: str | None
21
+ CutoffBehavior: str | None
22
+ Description: str | None
23
+ Id: str | None
24
+ LoggingInfo: LoggingInfo | None
25
+ MaxConcurrency: str | None
26
+ MaxErrors: str | None
27
+ Name: str | None
28
+ ServiceRoleArn: str | None
29
+ Targets: list[Target] | None
30
+ TaskInvocationParameters: TaskInvocationParameters | None
31
+ TaskParameters: dict | None
32
32
 
33
33
 
34
34
  class Target(TypedDict):
35
- Key: Optional[str]
36
- Values: Optional[list[str]]
35
+ Key: str | None
36
+ Values: list[str] | None
37
37
 
38
38
 
39
39
  class MaintenanceWindowStepFunctionsParameters(TypedDict):
40
- Input: Optional[str]
41
- Name: Optional[str]
40
+ Input: str | None
41
+ Name: str | None
42
42
 
43
43
 
44
44
  class CloudWatchOutputConfig(TypedDict):
45
- CloudWatchLogGroupName: Optional[str]
46
- CloudWatchOutputEnabled: Optional[bool]
45
+ CloudWatchLogGroupName: str | None
46
+ CloudWatchOutputEnabled: bool | None
47
47
 
48
48
 
49
49
  class NotificationConfig(TypedDict):
50
- NotificationArn: Optional[str]
51
- NotificationEvents: Optional[list[str]]
52
- NotificationType: Optional[str]
50
+ NotificationArn: str | None
51
+ NotificationEvents: list[str] | None
52
+ NotificationType: str | None
53
53
 
54
54
 
55
55
  class MaintenanceWindowRunCommandParameters(TypedDict):
56
- CloudWatchOutputConfig: Optional[CloudWatchOutputConfig]
57
- Comment: Optional[str]
58
- DocumentHash: Optional[str]
59
- DocumentHashType: Optional[str]
60
- DocumentVersion: Optional[str]
61
- NotificationConfig: Optional[NotificationConfig]
62
- OutputS3BucketName: Optional[str]
63
- OutputS3KeyPrefix: Optional[str]
64
- Parameters: Optional[dict]
65
- ServiceRoleArn: Optional[str]
66
- TimeoutSeconds: Optional[int]
56
+ CloudWatchOutputConfig: CloudWatchOutputConfig | None
57
+ Comment: str | None
58
+ DocumentHash: str | None
59
+ DocumentHashType: str | None
60
+ DocumentVersion: str | None
61
+ NotificationConfig: NotificationConfig | None
62
+ OutputS3BucketName: str | None
63
+ OutputS3KeyPrefix: str | None
64
+ Parameters: dict | None
65
+ ServiceRoleArn: str | None
66
+ TimeoutSeconds: int | None
67
67
 
68
68
 
69
69
  class MaintenanceWindowLambdaParameters(TypedDict):
70
- ClientContext: Optional[str]
71
- Payload: Optional[str]
72
- Qualifier: Optional[str]
70
+ ClientContext: str | None
71
+ Payload: str | None
72
+ Qualifier: str | None
73
73
 
74
74
 
75
75
  class MaintenanceWindowAutomationParameters(TypedDict):
76
- DocumentVersion: Optional[str]
77
- Parameters: Optional[dict]
76
+ DocumentVersion: str | None
77
+ Parameters: dict | None
78
78
 
79
79
 
80
80
  class TaskInvocationParameters(TypedDict):
81
- MaintenanceWindowAutomationParameters: Optional[MaintenanceWindowAutomationParameters]
82
- MaintenanceWindowLambdaParameters: Optional[MaintenanceWindowLambdaParameters]
83
- MaintenanceWindowRunCommandParameters: Optional[MaintenanceWindowRunCommandParameters]
84
- MaintenanceWindowStepFunctionsParameters: Optional[MaintenanceWindowStepFunctionsParameters]
81
+ MaintenanceWindowAutomationParameters: MaintenanceWindowAutomationParameters | None
82
+ MaintenanceWindowLambdaParameters: MaintenanceWindowLambdaParameters | None
83
+ MaintenanceWindowRunCommandParameters: MaintenanceWindowRunCommandParameters | None
84
+ MaintenanceWindowStepFunctionsParameters: MaintenanceWindowStepFunctionsParameters | None
85
85
 
86
86
 
87
87
  class LoggingInfo(TypedDict):
88
- Region: Optional[str]
89
- S3Bucket: Optional[str]
90
- S3Prefix: Optional[str]
88
+ Region: str | None
89
+ S3Bucket: str | None
90
+ S3Prefix: str | None
91
91
 
92
92
 
93
93
  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 SSMMaintenanceWindowTaskProviderPlugin(CloudFormationResourceProviderPlugi
10
8
  name = "AWS::SSM::MaintenanceWindowTask"
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.ssm.resource_providers.aws_ssm_maintenancewindowtask 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,15 +14,15 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class SSMParameterProperties(TypedDict):
17
- Type: Optional[str]
18
- Value: Optional[str]
19
- AllowedPattern: Optional[str]
20
- DataType: Optional[str]
21
- Description: Optional[str]
22
- Name: Optional[str]
23
- Policies: Optional[str]
24
- Tags: Optional[dict]
25
- Tier: Optional[str]
17
+ Type: str | None
18
+ Value: str | None
19
+ AllowedPattern: str | None
20
+ DataType: str | None
21
+ Description: str | None
22
+ Name: str | None
23
+ Policies: str | None
24
+ Tags: dict | None
25
+ Tier: str | None
26
26
 
27
27
 
28
28
  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 SSMParameterProviderPlugin(CloudFormationResourceProviderPlugin):
10
8
  name = "AWS::SSM::Parameter"
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.ssm.resource_providers.aws_ssm_parameter import (