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
@@ -9,7 +9,7 @@ import time
9
9
  import zlib
10
10
  from enum import StrEnum
11
11
  from secrets import token_bytes
12
- from typing import Any, Dict, Literal, NamedTuple, Optional, Protocol, Tuple, Union
12
+ from typing import Any, Literal, NamedTuple, Protocol
13
13
  from urllib import parse as urlparser
14
14
  from zoneinfo import ZoneInfo
15
15
 
@@ -143,7 +143,7 @@ def get_owner_for_account_id(account_id: str):
143
143
 
144
144
  def extract_bucket_key_version_id_from_copy_source(
145
145
  copy_source: CopySource,
146
- ) -> tuple[BucketName, ObjectKey, Optional[ObjectVersionId]]:
146
+ ) -> tuple[BucketName, ObjectKey, ObjectVersionId | None]:
147
147
  """
148
148
  Utility to parse bucket name, object key and optionally its versionId. It accepts the CopySource format:
149
149
  - <bucket-name/<object-key>?versionId=<version-id>, used for example in CopySource for CopyObject
@@ -482,7 +482,7 @@ def is_valid_canonical_id(canonical_id: str) -> bool:
482
482
  return False
483
483
 
484
484
 
485
- def uses_host_addressing(headers: Dict[str, str]) -> str | None:
485
+ def uses_host_addressing(headers: dict[str, str]) -> str | None:
486
486
  """
487
487
  Determines if the request is targeting S3 with virtual host addressing
488
488
  :param headers: the request headers
@@ -522,7 +522,7 @@ def forwarded_from_virtual_host_addressed_request(headers: dict[str, str]) -> bo
522
522
 
523
523
  def extract_bucket_name_and_key_from_headers_and_path(
524
524
  headers: dict[str, str], path: str
525
- ) -> tuple[Optional[str], Optional[str]]:
525
+ ) -> tuple[str | None, str | None]:
526
526
  """
527
527
  Extract the bucket name and the object key from a request headers and path. This works with both virtual host
528
528
  and path style requests.
@@ -556,7 +556,7 @@ def normalize_bucket_name(bucket_name):
556
556
  return bucket_name
557
557
 
558
558
 
559
- def get_bucket_and_key_from_s3_uri(s3_uri: str) -> Tuple[str, str]:
559
+ def get_bucket_and_key_from_s3_uri(s3_uri: str) -> tuple[str, str]:
560
560
  """
561
561
  Extracts the bucket name and key from s3 uri
562
562
  """
@@ -564,7 +564,7 @@ def get_bucket_and_key_from_s3_uri(s3_uri: str) -> Tuple[str, str]:
564
564
  return output_bucket, output_key
565
565
 
566
566
 
567
- def get_bucket_and_key_from_presign_url(presign_url: str) -> Tuple[str, str]:
567
+ def get_bucket_and_key_from_presign_url(presign_url: str) -> tuple[str, str]:
568
568
  """
569
569
  Extracts the bucket name and key from s3 presign url
570
570
  """
@@ -575,7 +575,7 @@ def get_bucket_and_key_from_presign_url(presign_url: str) -> Tuple[str, str]:
575
575
 
576
576
 
577
577
  def _create_invalid_argument_exc(
578
- message: Union[str, None], name: str, value: str, host_id: str = None
578
+ message: str | None, name: str, value: str, host_id: str = None
579
579
  ) -> InvalidArgument:
580
580
  ex = InvalidArgument(message)
581
581
  ex.ArgumentName = name
@@ -589,7 +589,7 @@ def capitalize_header_name_from_snake_case(header_name: str) -> str:
589
589
  return "-".join([part.capitalize() for part in header_name.split("-")])
590
590
 
591
591
 
592
- def get_kms_key_arn(kms_key: str, account_id: str, bucket_region: str) -> Optional[str]:
592
+ def get_kms_key_arn(kms_key: str, account_id: str, bucket_region: str) -> str | None:
593
593
  """
594
594
  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
595
  It can also validate if the key is in the same region, and raise an exception.
@@ -762,7 +762,7 @@ def _match_lifecycle_filter(
762
762
 
763
763
  def parse_expiration_header(
764
764
  expiration_header: str,
765
- ) -> tuple[Optional[datetime.datetime], Optional[str]]:
765
+ ) -> tuple[datetime.datetime | None, str | None]:
766
766
  try:
767
767
  header_values = dict(
768
768
  (p.strip('"') for p in v.split("=")) for v in expiration_header.split('", ')
@@ -878,7 +878,7 @@ def get_retention_from_now(days: int = None, years: int = None) -> datetime.date
878
878
 
879
879
  def get_failed_precondition_copy_source(
880
880
  request: CopyObjectRequest, last_modified: datetime.datetime, etag: ETag
881
- ) -> Optional[str]:
881
+ ) -> str | None:
882
882
  """
883
883
  Validate if the source object LastModified and ETag matches a precondition, and if it does, return the failed
884
884
  precondition
@@ -1019,7 +1019,7 @@ def create_redirect_for_post_request(
1019
1019
  return urlparser.urlunparse(newparts)
1020
1020
 
1021
1021
 
1022
- def parse_post_object_tagging_xml(tagging: str) -> Optional[dict]:
1022
+ def parse_post_object_tagging_xml(tagging: str) -> dict | None:
1023
1023
  try:
1024
1024
  tag_set = {}
1025
1025
  tags = xmltodict.parse(tagging)
@@ -173,7 +173,7 @@ def validate_acl_acp(acp: AccessControlPolicy) -> None:
173
173
  continue
174
174
 
175
175
  elif grant_type == GranteeType.CanonicalUser and not is_valid_canonical_id(
176
- (grantee_id := grantee.get("ID", ""))
176
+ grantee_id := grantee.get("ID", "")
177
177
  ):
178
178
  ex = _create_invalid_argument_exc("Invalid id", "CanonicalUser/ID", grantee_id)
179
179
  raise ex
@@ -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:
@@ -223,7 +223,7 @@ class S3WebsiteHostingHandler:
223
223
  )
224
224
 
225
225
  @staticmethod
226
- def _get_response_headers_from_object(get_object_response: GetObjectOutput) -> Dict[str, str]:
226
+ def _get_response_headers_from_object(get_object_response: GetObjectOutput) -> dict[str, str]:
227
227
  """
228
228
  Only return some headers from the S3 Object
229
229
  :param get_object_response: the response from S3.GetObject
@@ -248,7 +248,7 @@ class S3WebsiteHostingHandler:
248
248
  @staticmethod
249
249
  def _find_matching_rule(
250
250
  routing_rules: RoutingRules, object_key: ObjectKey, error_code: int = None
251
- ) -> Union[RoutingRule, None]:
251
+ ) -> RoutingRule | None:
252
252
  """
253
253
  Iterate over the routing rules set in the configuration, and return the first that match the key name and/or the
254
254
  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 (
@@ -5,7 +5,7 @@ import json
5
5
  import logging
6
6
  import re
7
7
  import time
8
- from typing import Any, Final, Optional, Union
8
+ from typing import Any, Final
9
9
 
10
10
  import moto.secretsmanager.exceptions as moto_exception
11
11
  from botocore.utils import InvalidArnException
@@ -135,7 +135,7 @@ class SecretsmanagerProvider(SecretsmanagerApi):
135
135
  return bool(re.match(r"^[A-Za-z0-9/_+=.@-]+\Z", secret_id))
136
136
 
137
137
  @staticmethod
138
- def _raise_if_invalid_secret_id(secret_id: Union[SecretIdType, NameType]):
138
+ def _raise_if_invalid_secret_id(secret_id: SecretIdType | NameType):
139
139
  # Patches moto's implementation for which secret_ids are not validated, by raising a ValidationException.
140
140
  # Skips this check if the secret_id provided appears to be an arn (starting with 'arn:').
141
141
  if not re.match(
@@ -149,12 +149,10 @@ class SecretsmanagerProvider(SecretsmanagerApi):
149
149
 
150
150
  @staticmethod
151
151
  def _raise_if_missing_client_req_token(
152
- request: Union[
153
- CreateSecretRequest,
154
- PutSecretValueRequest,
155
- RotateSecretRequest,
156
- UpdateSecretRequest,
157
- ],
152
+ request: CreateSecretRequest
153
+ | PutSecretValueRequest
154
+ | RotateSecretRequest
155
+ | UpdateSecretRequest,
158
156
  ):
159
157
  if "ClientRequestToken" not in request:
160
158
  raise InvalidRequestException(
@@ -201,8 +199,8 @@ class SecretsmanagerProvider(SecretsmanagerApi):
201
199
  ) -> DeleteSecretResponse:
202
200
  secret_id: str = request["SecretId"]
203
201
  self._raise_if_invalid_secret_id(secret_id)
204
- recovery_window_in_days: Optional[int] = request.get("RecoveryWindowInDays")
205
- force_delete_without_recovery: Optional[bool] = request.get("ForceDeleteWithoutRecovery")
202
+ recovery_window_in_days: int | None = request.get("RecoveryWindowInDays")
203
+ force_delete_without_recovery: bool | None = request.get("ForceDeleteWithoutRecovery")
206
204
 
207
205
  backend = SecretsmanagerProvider.get_moto_backend_for_resource(secret_id, context)
208
206
  try:
@@ -495,7 +493,7 @@ def moto_smb_get_secret_value(fn, self, secret_id, version_id, version_stage):
495
493
  def moto_smb_create_secret(fn, self, name, *args, **kwargs):
496
494
  # Creating a secret with a SecretId equal to one that is scheduled for
497
495
  # deletion should raise an 'InvalidRequestException'.
498
- secret: Optional[FakeSecret] = self.secrets.get(name)
496
+ secret: FakeSecret | None = self.secrets.get(name)
499
497
  if secret is not None and secret.deleted_date is not None:
500
498
  raise InvalidRequestException(AWS_INVALID_REQUEST_MESSAGE_CREATE_WITH_SCHEDULED_DELETION)
501
499
 
@@ -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,10 +15,10 @@ from localstack.services.cloudformation.resource_provider import (
15
15
 
16
16
 
17
17
  class SecretsManagerResourcePolicyProperties(TypedDict):
18
- ResourcePolicy: Optional[dict]
19
- SecretId: Optional[str]
20
- BlockPublicPolicy: Optional[bool]
21
- Id: Optional[str]
18
+ ResourcePolicy: dict | None
19
+ SecretId: str | None
20
+ BlockPublicPolicy: bool | None
21
+ Id: str | None
22
22
 
23
23
 
24
24
  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 SecretsManagerResourcePolicyProviderPlugin(CloudFormationResourceProviderP
10
8
  name = "AWS::SecretsManager::ResourcePolicy"
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.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy 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,32 +14,32 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class SecretsManagerRotationScheduleProperties(TypedDict):
17
- SecretId: Optional[str]
18
- HostedRotationLambda: Optional[HostedRotationLambda]
19
- Id: Optional[str]
20
- RotateImmediatelyOnUpdate: Optional[bool]
21
- RotationLambdaARN: Optional[str]
22
- RotationRules: Optional[RotationRules]
17
+ SecretId: str | None
18
+ HostedRotationLambda: HostedRotationLambda | None
19
+ Id: str | None
20
+ RotateImmediatelyOnUpdate: bool | None
21
+ RotationLambdaARN: str | None
22
+ RotationRules: RotationRules | None
23
23
 
24
24
 
25
25
  class RotationRules(TypedDict):
26
- AutomaticallyAfterDays: Optional[int]
27
- Duration: Optional[str]
28
- ScheduleExpression: Optional[str]
26
+ AutomaticallyAfterDays: int | None
27
+ Duration: str | None
28
+ ScheduleExpression: str | None
29
29
 
30
30
 
31
31
  class HostedRotationLambda(TypedDict):
32
- RotationType: Optional[str]
33
- ExcludeCharacters: Optional[str]
34
- KmsKeyArn: Optional[str]
35
- MasterSecretArn: Optional[str]
36
- MasterSecretKmsKeyArn: Optional[str]
37
- RotationLambdaName: Optional[str]
38
- Runtime: Optional[str]
39
- SuperuserSecretArn: Optional[str]
40
- SuperuserSecretKmsKeyArn: Optional[str]
41
- VpcSecurityGroupIds: Optional[str]
42
- VpcSubnetIds: Optional[str]
32
+ RotationType: str | None
33
+ ExcludeCharacters: str | None
34
+ KmsKeyArn: str | None
35
+ MasterSecretArn: str | None
36
+ MasterSecretKmsKeyArn: str | None
37
+ RotationLambdaName: str | None
38
+ Runtime: str | None
39
+ SuperuserSecretArn: str | None
40
+ SuperuserSecretKmsKeyArn: str | None
41
+ VpcSecurityGroupIds: str | None
42
+ VpcSubnetIds: str | None
43
43
 
44
44
 
45
45
  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 SecretsManagerRotationScheduleProviderPlugin(CloudFormationResourceProvide
10
8
  name = "AWS::SecretsManager::RotationSchedule"
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.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule import (
@@ -6,7 +6,7 @@ import logging
6
6
  import random
7
7
  import string
8
8
  from pathlib import Path
9
- from typing import Optional, TypedDict
9
+ from typing import TypedDict
10
10
 
11
11
  import localstack.services.cloudformation.provider_utils as util
12
12
  from localstack.services.cloudformation.resource_provider import (
@@ -20,37 +20,37 @@ LOG = logging.getLogger(__name__)
20
20
 
21
21
 
22
22
  class SecretsManagerSecretProperties(TypedDict):
23
- Description: Optional[str]
24
- GenerateSecretString: Optional[GenerateSecretString]
25
- Id: Optional[str]
26
- KmsKeyId: Optional[str]
27
- Name: Optional[str]
28
- ReplicaRegions: Optional[list[ReplicaRegion]]
29
- SecretString: Optional[str]
30
- Tags: Optional[list[Tag]]
23
+ Description: str | None
24
+ GenerateSecretString: GenerateSecretString | None
25
+ Id: str | None
26
+ KmsKeyId: str | None
27
+ Name: str | None
28
+ ReplicaRegions: list[ReplicaRegion] | None
29
+ SecretString: str | None
30
+ Tags: list[Tag] | None
31
31
 
32
32
 
33
33
  class GenerateSecretString(TypedDict):
34
- ExcludeCharacters: Optional[str]
35
- ExcludeLowercase: Optional[bool]
36
- ExcludeNumbers: Optional[bool]
37
- ExcludePunctuation: Optional[bool]
38
- ExcludeUppercase: Optional[bool]
39
- GenerateStringKey: Optional[str]
40
- IncludeSpace: Optional[bool]
41
- PasswordLength: Optional[int]
42
- RequireEachIncludedType: Optional[bool]
43
- SecretStringTemplate: Optional[str]
34
+ ExcludeCharacters: str | None
35
+ ExcludeLowercase: bool | None
36
+ ExcludeNumbers: bool | None
37
+ ExcludePunctuation: bool | None
38
+ ExcludeUppercase: bool | None
39
+ GenerateStringKey: str | None
40
+ IncludeSpace: bool | None
41
+ PasswordLength: int | None
42
+ RequireEachIncludedType: bool | None
43
+ SecretStringTemplate: str | None
44
44
 
45
45
 
46
46
  class ReplicaRegion(TypedDict):
47
- Region: Optional[str]
48
- KmsKeyId: Optional[str]
47
+ Region: str | None
48
+ KmsKeyId: str | None
49
49
 
50
50
 
51
51
  class Tag(TypedDict):
52
- Key: Optional[str]
53
- Value: Optional[str]
52
+ Key: str | None
53
+ Value: str | None
54
54
 
55
55
 
56
56
  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 SecretsManagerSecretProviderPlugin(CloudFormationResourceProviderPlugin):
10
8
  name = "AWS::SecretsManager::Secret"
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.secretsmanager.resource_providers.aws_secretsmanager_secret import (