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
@@ -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 StepFunctionsStateMachineProviderPlugin(CloudFormationResourceProviderPlug
10
8
  name = "AWS::StepFunctions::StateMachine"
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.stepfunctions.resource_providers.aws_stepfunctions_statemachine import (
@@ -1,6 +1,5 @@
1
1
  import base64
2
2
  import logging
3
- from typing import Dict
4
3
 
5
4
  from localstack.aws.api.stepfunctions import ValidationException
6
5
  from localstack.aws.connect import connect_to
@@ -11,7 +10,7 @@ from localstack.utils.strings import to_bytes, to_str
11
10
  LOG = logging.getLogger(__name__)
12
11
 
13
12
 
14
- def await_sfn_execution_result(execution_arn: str, timeout_secs: int = 60) -> Dict:
13
+ def await_sfn_execution_result(execution_arn: str, timeout_secs: int = 60) -> dict:
15
14
  """Wait until the given SFN execution ARN is no longer in RUNNING status, then return execution result."""
16
15
 
17
16
  arn_data = parse_arn(execution_arn)
@@ -30,9 +30,9 @@ While not recommended, store classes may define member helper functions and prop
30
30
  """
31
31
 
32
32
  import re
33
- from collections.abc import Callable
33
+ from collections.abc import Callable, Iterator
34
34
  from threading import RLock
35
- from typing import Any, Generic, Iterator, Type, TypeVar, Union
35
+ from typing import Any, Generic, TypeVar
36
36
 
37
37
  from localstack import config
38
38
  from localstack.utils.aws.aws_stack import get_valid_regions_for_service
@@ -52,7 +52,7 @@ class LocalAttribute:
52
52
  Descriptor protocol for marking store attributes as local to a region.
53
53
  """
54
54
 
55
- def __init__(self, default: Union[Callable, int, float, str, bool, None]):
55
+ def __init__(self, default: Callable | int | float | str | bool | None):
56
56
  """
57
57
  :param default: Default value assigned to the local attribute. Must be a scalar
58
58
  or a callable.
@@ -81,7 +81,7 @@ class CrossRegionAttribute:
81
81
  Descriptor protocol for marking store attributes as shared across all regions.
82
82
  """
83
83
 
84
- def __init__(self, default: Union[Callable, int, float, str, bool, None]):
84
+ def __init__(self, default: Callable | int | float | str | bool | None):
85
85
  """
86
86
  :param default: The default value assigned to the cross-region attribute.
87
87
  This must be a scalar or a callable.
@@ -122,7 +122,7 @@ class CrossAccountAttribute:
122
122
  This should be used for resources that are identified by ARNs.
123
123
  """
124
124
 
125
- def __init__(self, default: Union[Callable, int, float, str, bool, None]):
125
+ def __init__(self, default: Callable | int | float | str | bool | None):
126
126
  """
127
127
  :param default: The default value assigned to the cross-account attribute.
128
128
  This must be a scalar or a callable.
@@ -198,7 +198,7 @@ class RegionBundle(dict, Generic[BaseStoreType]):
198
198
  def __init__(
199
199
  self,
200
200
  service_name: str,
201
- store: Type[BaseStoreType],
201
+ store: type[BaseStoreType],
202
202
  account_id: str,
203
203
  validate: bool = True,
204
204
  lock: RLock = None,
@@ -286,7 +286,7 @@ class AccountRegionBundle(dict, Generic[BaseStoreType]):
286
286
  Encapsulation for all stores for all AWS account IDs.
287
287
  """
288
288
 
289
- def __init__(self, service_name: str, store: Type[BaseStoreType], validate: bool = True):
289
+ def __init__(self, service_name: str, store: type[BaseStoreType], validate: bool = True):
290
290
  """
291
291
  :param service_name: Name of the service. Must be a valid service defined in botocore.
292
292
  :param store: Class definition of the Store
@@ -1,5 +1,3 @@
1
- from typing import List
2
-
3
1
  from localstack.packages import Package
4
2
  from localstack.packages.core import PythonPackageInstaller
5
3
 
@@ -13,7 +11,7 @@ class VoskPackage(Package[PythonPackageInstaller]):
13
11
  def _get_installer(self, version: str) -> PythonPackageInstaller:
14
12
  return VoskPackageInstaller(version)
15
13
 
16
- def get_versions(self) -> List[str]:
14
+ def get_versions(self) -> list[str]:
17
15
  return [_VOSK_DEFAULT_VERSION]
18
16
 
19
17
 
@@ -5,7 +5,7 @@ import threading
5
5
  import wave
6
6
  from functools import cache
7
7
  from pathlib import Path
8
- from typing import Any, Tuple
8
+ from typing import Any
9
9
  from zipfile import ZipFile
10
10
 
11
11
  from localstack import config
@@ -277,7 +277,7 @@ class TranscribeProvider(TranscribeApi):
277
277
  # Threads
278
278
  #
279
279
 
280
- def _run_transcription_job(self, args: Tuple[TranscribeStore, str]) -> None:
280
+ def _run_transcription_job(self, args: tuple[TranscribeStore, str]) -> None:
281
281
  store, job_name = args
282
282
 
283
283
  job = store.transcription_jobs[job_name]
@@ -3,7 +3,7 @@
3
3
  import importlib
4
4
  import logging
5
5
  from functools import singledispatchmethod
6
- from typing import Any, Dict, Optional, TypedDict
6
+ from typing import Any, TypedDict
7
7
 
8
8
  from moto.core.base_backend import BackendDict
9
9
 
@@ -17,14 +17,14 @@ class ServiceBackend(TypedDict, total=False):
17
17
  """Wrapper of the possible type of backends that a service can use."""
18
18
 
19
19
  localstack: AccountRegionBundle | None
20
- moto: BackendDict | Dict | None
20
+ moto: BackendDict | dict | None
21
21
 
22
22
 
23
23
  class ServiceBackendCollectorVisitor(StateVisitor):
24
24
  """Implementation of StateVisitor meant to collect the backends that a given service use to hold its state."""
25
25
 
26
26
  store: AccountRegionBundle | None
27
- backend_dict: BackendDict | Dict | None
27
+ backend_dict: BackendDict | dict | None
28
28
 
29
29
  def __init__(self) -> None:
30
30
  self.store = None
@@ -60,7 +60,7 @@ class ReflectionStateLocator:
60
60
 
61
61
  provider: Any
62
62
 
63
- def __init__(self, provider: Optional[Any] = None, service: Optional[str] = None):
63
+ def __init__(self, provider: Any | None = None, service: str | None = None):
64
64
  self.provider = provider
65
65
  self.service = service or provider.service
66
66
 
@@ -29,7 +29,8 @@ https://dill.readthedocs.io/en/latest/index.html?highlight=register#dill.Pickler
29
29
  """
30
30
 
31
31
  import inspect
32
- from typing import IO, Any, BinaryIO, Callable, Generic, Type, TypeVar
32
+ from collections.abc import Callable
33
+ from typing import IO, Any, BinaryIO, Generic, TypeVar
33
34
 
34
35
  import dill
35
36
  import jsonpickle
@@ -45,7 +46,7 @@ PythonPickler = Any
45
46
  """Type placeholder for pickle._Pickler (which has for instance the save_reduce method)"""
46
47
 
47
48
 
48
- def register(cls: Type = None, subclasses: bool = False):
49
+ def register(cls: type = None, subclasses: bool = False):
49
50
  """
50
51
  Decorator to register a custom type or type tree into the dill pickling dispatcher table.
51
52
 
@@ -70,7 +71,7 @@ def register(cls: Type = None, subclasses: bool = False):
70
71
  return _wrapper
71
72
 
72
73
 
73
- def reducer(cls: Type, restore: Callable = None, subclasses: bool = False):
74
+ def reducer(cls: type, restore: Callable = None, subclasses: bool = False):
74
75
  """
75
76
  Convenience decorator to simplify the following pattern::
76
77
 
@@ -118,14 +119,14 @@ def reducer(cls: Type, restore: Callable = None, subclasses: bool = False):
118
119
 
119
120
 
120
121
  def add_dispatch_entry(
121
- cls: Type, fn: Callable[[PythonPickler, Any], None], subclasses: bool = False
122
+ cls: type, fn: Callable[[PythonPickler, Any], None], subclasses: bool = False
122
123
  ):
123
124
  Pickler.dispatch_overwrite[cls] = fn
124
125
  if subclasses:
125
126
  Pickler.match_subclasses_of.add(cls)
126
127
 
127
128
 
128
- def remove_dispatch_entry(cls: Type):
129
+ def remove_dispatch_entry(cls: type):
129
130
  try:
130
131
  del Pickler.dispatch_overwrite[cls]
131
132
  except KeyError:
@@ -190,7 +191,7 @@ class _SuperclassMatchingTypeDict(MetaCatchingDict):
190
191
 
191
192
  """
192
193
 
193
- def __init__(self, seq=None, match_subclasses_of: set[Type] = None):
194
+ def __init__(self, seq=None, match_subclasses_of: set[type] = None):
194
195
  if seq is not None:
195
196
  super().__init__(seq)
196
197
  else:
@@ -215,8 +216,8 @@ class Pickler(dill.Pickler):
215
216
  Custom dill pickler that considers dispatchers and subclass dispatchers registered via ``register``.
216
217
  """
217
218
 
218
- match_subclasses_of: set[Type] = set()
219
- dispatch_overwrite: dict[Type, Callable] = {}
219
+ match_subclasses_of: set[type] = set()
220
+ dispatch_overwrite: dict[type, Callable] = {}
220
221
 
221
222
  def __init__(self, *args, **kwargs):
222
223
  super().__init__(*args, **kwargs)
@@ -234,9 +235,9 @@ class PickleEncoder(Encoder):
234
235
  extended with custom serializers.
235
236
  """
236
237
 
237
- pickler_class: Type[dill.Pickler]
238
+ pickler_class: type[dill.Pickler]
238
239
 
239
- def __init__(self, pickler_class: Type[dill.Pickler] = None):
240
+ def __init__(self, pickler_class: type[dill.Pickler] = None):
240
241
  self.pickler_class = pickler_class or Pickler
241
242
 
242
243
  def encode(self, obj: Any, file: BinaryIO):
@@ -249,9 +250,9 @@ class PickleDecoder(Decoder):
249
250
  extended with custom serializers.
250
251
  """
251
252
 
252
- unpickler_class: Type[dill.Unpickler]
253
+ unpickler_class: type[dill.Unpickler]
253
254
 
254
- def __init__(self, unpickler_class: Type[dill.Unpickler] = None):
255
+ def __init__(self, unpickler_class: type[dill.Unpickler] = None):
255
256
  self.unpickler_class = unpickler_class or dill.Unpickler
256
257
 
257
258
  def decode(self, file: BinaryIO) -> Any:
@@ -263,7 +264,7 @@ class JsonEncoder(Encoder):
263
264
  An Encoder that uses ``jsonpickle`` under the hood.
264
265
  """
265
266
 
266
- def __init__(self, pickler_class: Type[jsonpickle.Pickler] = None):
267
+ def __init__(self, pickler_class: type[jsonpickle.Pickler] = None):
267
268
  self.pickler_class = pickler_class or jsonpickle.Pickler()
268
269
 
269
270
  def encode(self, obj: Any, file: IO[bytes]):
@@ -276,9 +277,9 @@ class JsonDecoder(Decoder):
276
277
  A Decoder that uses ``jsonpickle`` under the hood.
277
278
  """
278
279
 
279
- unpickler_class: Type[jsonpickle.Unpickler]
280
+ unpickler_class: type[jsonpickle.Unpickler]
280
281
 
281
- def __init__(self, unpickler_class: Type[jsonpickle.Unpickler] = None):
282
+ def __init__(self, unpickler_class: type[jsonpickle.Unpickler] = None):
282
283
  self.unpickler_class = unpickler_class or jsonpickle.Unpickler()
283
284
 
284
285
  def decode(self, file: IO[bytes]) -> Any:
@@ -3,12 +3,13 @@ import importlib.util
3
3
  import inspect
4
4
  import pkgutil
5
5
  import re
6
+ from re import Pattern
6
7
  from types import FunctionType, ModuleType, NoneType, UnionType
7
- from typing import Optional, Pattern, Union, get_args, get_origin
8
+ from typing import Union, get_args, get_origin
8
9
 
9
10
 
10
11
  def _import_submodules(
11
- package_name: str, module_regex: Optional[Pattern] = None, recursive: bool = True
12
+ package_name: str, module_regex: Pattern | None = None, recursive: bool = True
12
13
  ) -> dict[str, ModuleType]:
13
14
  """
14
15
  Imports all submodules of the given package with the defined (optional) module_suffix.
@@ -4,8 +4,9 @@ import logging
4
4
  import os
5
5
  import subprocess
6
6
  import zipfile
7
+ from collections.abc import Mapping, Sequence
7
8
  from pathlib import Path
8
- from typing import TYPE_CHECKING, Literal, Mapping, Optional, Sequence, overload
9
+ from typing import TYPE_CHECKING, Literal, Optional, overload
9
10
 
10
11
  from localstack import config
11
12
  from localstack.services.lambda_.runtimes import RUNTIMES_AGGREGATED
@@ -176,27 +177,27 @@ class ParametrizedLambda:
176
177
  def create_function(
177
178
  self,
178
179
  *,
179
- FunctionName: Optional[str] = None,
180
- Role: Optional[str] = None,
180
+ FunctionName: str | None = None,
181
+ Role: str | None = None,
181
182
  Code: Optional["FunctionCodeTypeDef"] = None,
182
183
  Runtime: Optional["RuntimeType"] = None,
183
- Handler: Optional[str] = None,
184
- Description: Optional[str] = None,
185
- Timeout: Optional[int] = None,
186
- MemorySize: Optional[int] = None,
187
- Publish: Optional[bool] = None,
184
+ Handler: str | None = None,
185
+ Description: str | None = None,
186
+ Timeout: int | None = None,
187
+ MemorySize: int | None = None,
188
+ Publish: bool | None = None,
188
189
  VpcConfig: Optional["VpcConfigTypeDef"] = None,
189
190
  PackageType: Optional["PackageTypeType"] = None,
190
191
  DeadLetterConfig: Optional["DeadLetterConfigTypeDef"] = None,
191
192
  Environment: Optional["EnvironmentTypeDef"] = None,
192
- KMSKeyArn: Optional[str] = None,
193
+ KMSKeyArn: str | None = None,
193
194
  TracingConfig: Optional["TracingConfigTypeDef"] = None,
194
- Tags: Optional[Mapping[str, str]] = None,
195
- Layers: Optional[Sequence[str]] = None,
196
- FileSystemConfigs: Optional[Sequence["FileSystemConfigTypeDef"]] = None,
195
+ Tags: Mapping[str, str] | None = None,
196
+ Layers: Sequence[str] | None = None,
197
+ FileSystemConfigs: Sequence["FileSystemConfigTypeDef"] | None = None,
197
198
  ImageConfig: Optional["ImageConfigTypeDef"] = None,
198
- CodeSigningConfigArn: Optional[str] = None,
199
- Architectures: Optional[Sequence["ArchitectureType"]] = None,
199
+ CodeSigningConfigArn: str | None = None,
200
+ Architectures: Sequence["ArchitectureType"] | None = None,
200
201
  EphemeralStorage: Optional["EphemeralStorageTypeDef"] = None,
201
202
  ) -> "FunctionConfigurationResponseMetadataTypeDef": ...
202
203
 
@@ -1,6 +1,7 @@
1
1
  import functools
2
2
  import os
3
- from typing import Callable, Dict, TypeVar
3
+ from collections.abc import Callable
4
+ from typing import TypeVar
4
5
 
5
6
  import boto3
6
7
  import botocore
@@ -80,7 +81,7 @@ def wait_for_user(keys, region_name: str):
80
81
 
81
82
  def create_client_with_keys(
82
83
  service: str,
83
- keys: Dict[str, str],
84
+ keys: dict[str, str],
84
85
  region_name: str,
85
86
  client_config: Config = None,
86
87
  ):
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  from collections import defaultdict
3
- from typing import Callable, Generator, Optional, TypedDict
3
+ from collections.abc import Generator
4
+ from typing import Callable, Optional, TypedDict
4
5
 
5
6
  import pytest
6
7
  from botocore.exceptions import WaiterError
@@ -111,7 +112,7 @@ def capture_per_resource_events(
111
112
 
112
113
  def _normalise_describe_change_set_output(value: DescribeChangeSetOutput) -> None:
113
114
  value.get("Changes", list()).sort(
114
- key=lambda change: change.get("ResourceChange", dict()).get("LogicalResourceId", str())
115
+ key=lambda change: change.get("ResourceChange", dict()).get("LogicalResourceId", "")
115
116
  )
116
117
 
117
118
 
@@ -126,7 +127,12 @@ def capture_update_process(aws_client_no_retry, cleanups, capture_per_resource_e
126
127
  change_set_name = f"cs-{short_uid()}"
127
128
 
128
129
  def inner(
129
- snapshot, t1: dict | str, t2: dict | str, p1: dict | None = None, p2: dict | None = None
130
+ snapshot,
131
+ t1: dict | str,
132
+ t2: dict | str,
133
+ p1: dict | None = None,
134
+ p2: dict | None = None,
135
+ custom_update_step: Callable[[], None] | None = None,
130
136
  ) -> str:
131
137
  """
132
138
  :return: stack id
@@ -209,6 +215,10 @@ def capture_update_process(aws_client_no_retry, cleanups, capture_per_resource_e
209
215
  ]
210
216
  snapshot.match("post-create-1-describe", describe)
211
217
 
218
+ # run any custom steps if present
219
+ if custom_update_step:
220
+ custom_update_step()
221
+
212
222
  # update stack
213
223
  change_set_details = aws_client_no_retry.cloudformation.create_change_set(
214
224
  StackName=stack_name,
@@ -2,7 +2,8 @@ import logging
2
2
  import os
3
3
  import shlex
4
4
  import threading
5
- from typing import Callable, Generator, List, Optional
5
+ from collections.abc import Generator
6
+ from typing import Callable, Optional
6
7
 
7
8
  import pytest
8
9
 
@@ -31,14 +32,14 @@ ENV_TEST_CONTAINER_MOUNT_DEPENDENCIES = "TEST_CONTAINER_MOUNT_DEPENDENCIES"
31
32
 
32
33
  class ContainerFactory:
33
34
  def __init__(self):
34
- self._containers: List[Container] = []
35
+ self._containers: list[Container] = []
35
36
 
36
37
  def __call__(
37
38
  self,
38
39
  # convenience properties
39
40
  pro: bool = False,
40
- publish: Optional[List[int]] = None,
41
- configurators: Optional[List[ContainerConfigurator]] = None,
41
+ publish: Optional[list[int]] = None,
42
+ configurators: Optional[list[ContainerConfigurator]] = None,
42
43
  # ContainerConfig properties
43
44
  **kwargs,
44
45
  ) -> Container:
@@ -1,5 +1,3 @@
1
- from typing import List
2
-
3
1
  import pytest
4
2
  from _pytest.config import Config, PytestPluginManager
5
3
  from _pytest.config.argparsing import Parser
@@ -13,7 +11,7 @@ def pytest_addoption(parser: Parser, pluginmanager: PytestPluginManager):
13
11
 
14
12
 
15
13
  @pytest.hookimpl
16
- def pytest_collection_modifyitems(session: Session, config: Config, items: List[Item]):
14
+ def pytest_collection_modifyitems(session: Session, config: Config, items: list[Item]):
17
15
  filter_fixtures_option = config.getoption("--filter-fixtures")
18
16
  if filter_fixtures_option:
19
17
  # TODO: add more sophisticated combinations (=> like pytest -m and -k)
@@ -6,7 +6,7 @@ import os
6
6
  import re
7
7
  import textwrap
8
8
  import time
9
- from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple, Unpack
9
+ from typing import TYPE_CHECKING, Any, Callable, Optional, Unpack
10
10
 
11
11
  import botocore.auth
12
12
  import botocore.config
@@ -593,7 +593,7 @@ def sns_allow_topic_sqs_queue(aws_client):
593
593
  def sns_create_sqs_subscription(sns_allow_topic_sqs_queue, sqs_get_queue_arn, aws_client):
594
594
  subscriptions = []
595
595
 
596
- def _factory(topic_arn: str, queue_url: str, **kwargs) -> Dict[str, str]:
596
+ def _factory(topic_arn: str, queue_url: str, **kwargs) -> dict[str, str]:
597
597
  queue_arn = sqs_get_queue_arn(queue_url)
598
598
 
599
599
  # connect sns topic to sqs
@@ -630,7 +630,7 @@ def sns_create_http_endpoint(sns_create_topic, sns_subscription, aws_client):
630
630
 
631
631
  def _create_http_endpoint(
632
632
  raw_message_delivery: bool = False,
633
- ) -> Tuple[str, str, str, HTTPServer]:
633
+ ) -> tuple[str, str, str, HTTPServer]:
634
634
  server = HTTPServer()
635
635
  server.start()
636
636
  http_servers.append(server)
@@ -1004,7 +1004,7 @@ def opensearch_document_path(opensearch_endpoint, aws_client):
1004
1004
  # Cleanup fixtures
1005
1005
  @pytest.fixture
1006
1006
  def cleanup_stacks(aws_client):
1007
- def _cleanup_stacks(stacks: List[str]) -> None:
1007
+ def _cleanup_stacks(stacks: list[str]) -> None:
1008
1008
  stacks = ensure_list(stacks)
1009
1009
  for stack in stacks:
1010
1010
  try:
@@ -1018,7 +1018,7 @@ def cleanup_stacks(aws_client):
1018
1018
 
1019
1019
  @pytest.fixture
1020
1020
  def cleanup_changesets(aws_client):
1021
- def _cleanup_changesets(changesets: List[str]) -> None:
1021
+ def _cleanup_changesets(changesets: list[str]) -> None:
1022
1022
  changesets = ensure_list(changesets)
1023
1023
  for cs in changesets:
1024
1024
  try:
@@ -1039,7 +1039,7 @@ class DeployResult:
1039
1039
  stack_id: str
1040
1040
  stack_name: str
1041
1041
  change_set_name: str
1042
- outputs: Dict[str, str]
1042
+ outputs: dict[str, str]
1043
1043
 
1044
1044
  destroy: Callable[[], None]
1045
1045
 
@@ -1089,8 +1089,8 @@ def deploy_cfn_template(
1089
1089
  change_set_name: Optional[str] = None,
1090
1090
  template: Optional[str] = None,
1091
1091
  template_path: Optional[str | os.PathLike] = None,
1092
- template_mapping: Optional[Dict[str, Any]] = None,
1093
- parameters: Optional[Dict[str, str]] = None,
1092
+ template_mapping: Optional[dict[str, Any]] = None,
1093
+ parameters: Optional[dict[str, str]] = None,
1094
1094
  role_arn: Optional[str] = None,
1095
1095
  max_wait: Optional[int] = None,
1096
1096
  delay_between_polls: Optional[int] = 2,
@@ -1238,7 +1238,7 @@ def is_stack_deleted(aws_client):
1238
1238
  return _has_stack_status(aws_client.cloudformation, ["DELETE_COMPLETE"])
1239
1239
 
1240
1240
 
1241
- def _has_stack_status(cfn_client, statuses: List[str]):
1241
+ def _has_stack_status(cfn_client, statuses: list[str]):
1242
1242
  def _has_status(stack_id: str):
1243
1243
  def _inner():
1244
1244
  resp = cfn_client.describe_stacks(StackName=stack_id)
@@ -1514,7 +1514,7 @@ def create_event_source_mapping(aws_client):
1514
1514
 
1515
1515
  @pytest.fixture
1516
1516
  def check_lambda_logs(aws_client):
1517
- def _check_logs(func_name: str, expected_lines: List[str] = None) -> List[str]:
1517
+ def _check_logs(func_name: str, expected_lines: list[str] = None) -> list[str]:
1518
1518
  if not expected_lines:
1519
1519
  expected_lines = []
1520
1520
  log_events = get_lambda_logs(func_name, logs_client=aws_client.logs)
@@ -2290,7 +2290,7 @@ def echo_http_server_post(echo_http_server):
2290
2290
  return f"{echo_http_server}post"
2291
2291
 
2292
2292
 
2293
- def create_policy_doc(effect: str, actions: List, resource=None) -> Dict:
2293
+ def create_policy_doc(effect: str, actions: list, resource=None) -> dict:
2294
2294
  actions = ensure_list(actions)
2295
2295
  resource = resource or "*"
2296
2296
  return {
@@ -3,7 +3,7 @@ Custom pytest mark typings
3
3
  """
4
4
 
5
5
  import os
6
- from typing import TYPE_CHECKING, Callable, List, Optional
6
+ from typing import TYPE_CHECKING, Callable, Optional
7
7
 
8
8
  import pytest
9
9
  from _pytest.config import PytestPluginManager
@@ -36,13 +36,13 @@ class SkipSnapshotVerifyMarker:
36
36
  def __call__(
37
37
  self,
38
38
  *,
39
- paths: "Optional[List[str]]" = None,
39
+ paths: "Optional[list[str]]" = None,
40
40
  condition: "Optional[Callable[[...], bool]]" = None,
41
41
  ): ...
42
42
 
43
43
 
44
44
  class MultiRuntimeMarker:
45
- def __call__(self, *, scenario: str, runtimes: Optional[List[str]] = None): ...
45
+ def __call__(self, *, scenario: str, runtimes: Optional[list[str]] = None): ...
46
46
 
47
47
 
48
48
  class SnapshotMarkers:
@@ -82,7 +82,7 @@ def pytest_addoption(parser: Parser, pluginmanager: PytestPluginManager):
82
82
  )
83
83
 
84
84
 
85
- def enforce_single_aws_marker(items: List[pytest.Item]):
85
+ def enforce_single_aws_marker(items: list[pytest.Item]):
86
86
  """Enforce that each test has exactly one aws compatibility marker"""
87
87
  marker_errors = []
88
88
 
@@ -107,7 +107,7 @@ def enforce_single_aws_marker(items: List[pytest.Item]):
107
107
  raise pytest.UsageError(*marker_errors)
108
108
 
109
109
 
110
- def filter_by_markers(config: "Config", items: List[pytest.Item]):
110
+ def filter_by_markers(config: "Config", items: list[pytest.Item]):
111
111
  """Filter tests by markers."""
112
112
  from localstack import config as localstack_config
113
113
  from localstack.utils.bootstrap import in_ci
@@ -154,7 +154,7 @@ def filter_by_markers(config: "Config", items: List[pytest.Item]):
154
154
 
155
155
  @pytest.hookimpl
156
156
  def pytest_collection_modifyitems(
157
- session: pytest.Session, config: "Config", items: List[pytest.Item]
157
+ session: pytest.Session, config: "Config", items: list[pytest.Item]
158
158
  ) -> None:
159
159
  enforce_single_aws_marker(items)
160
160
  filter_by_markers(config, items)
@@ -49,7 +49,7 @@ def pytest_collection_modifyitems(config, items):
49
49
  if not os.path.exists(pathfilter_file):
50
50
  raise ValueError(f"Pathfilter file does not exist: {pathfilter_file}")
51
51
 
52
- with open(pathfilter_file, "r") as f:
52
+ with open(pathfilter_file) as f:
53
53
  pathfilter_substrings = [line.strip() for line in f.readlines() if line.strip()]
54
54
 
55
55
  if not pathfilter_substrings:
@@ -342,7 +342,7 @@ def is_execution_logs_list_complete(
342
342
 
343
343
  def _await_on_execution_log_stream_created(target_aws_client, log_group_name: str) -> str:
344
344
  logs_client = target_aws_client.logs
345
- log_stream_name = str()
345
+ log_stream_name = ""
346
346
 
347
347
  def _run_check():
348
348
  nonlocal log_stream_name
@@ -9,7 +9,7 @@ import datetime
9
9
  import json
10
10
  import os
11
11
  from pathlib import Path
12
- from typing import Dict, Optional
12
+ from typing import Optional
13
13
 
14
14
  import pytest
15
15
  from pluggy import Result
@@ -17,7 +17,7 @@ from pytest import StashKey, TestReport
17
17
 
18
18
  from localstack.testing.aws.util import is_aws_cloud
19
19
 
20
- durations_key = StashKey[Dict[str, float]]()
20
+ durations_key = StashKey[dict[str, float]]()
21
21
  """
22
22
  Stores phase durations on the test node between execution phases.
23
23
  See https://docs.pytest.org/en/latest/reference/reference.html#pytest.Stash
@@ -35,7 +35,7 @@ def find_validation_data_for_item(item: pytest.Item) -> Optional[dict]:
35
35
  if not os.path.exists(snapshot_path):
36
36
  return None
37
37
 
38
- with open(snapshot_path, "r") as fd:
38
+ with open(snapshot_path) as fd:
39
39
  file_content = json.load(fd)
40
40
  return file_content.get(item.nodeid)
41
41