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,5 @@
1
1
  import logging
2
- from typing import NamedTuple, Optional, Set
2
+ from typing import NamedTuple
3
3
 
4
4
  from botocore.model import ServiceModel
5
5
  from werkzeug.exceptions import RequestEntityTooLarge
@@ -28,15 +28,15 @@ class _ServiceIndicators(NamedTuple):
28
28
 
29
29
  # AWS service's "signing name" - Contained in the Authorization header
30
30
  # (https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html)
31
- signing_name: Optional[str] = None
31
+ signing_name: str | None = None
32
32
  # Target prefix as defined in the service specs for non-rest protocols - Contained in the X-Amz-Target header
33
- target_prefix: Optional[str] = None
33
+ target_prefix: str | None = None
34
34
  # Targeted operation as defined in the service specs for non-rest protocols - Contained in the X-Amz-Target header
35
- operation: Optional[str] = None
35
+ operation: str | None = None
36
36
  # Host field of the HTTP request
37
- host: Optional[str] = None
37
+ host: str | None = None
38
38
  # Path of the HTTP request
39
- path: Optional[str] = None
39
+ path: str | None = None
40
40
 
41
41
 
42
42
  def _extract_service_indicators(request: Request) -> _ServiceIndicators:
@@ -111,7 +111,7 @@ signing_name_path_prefix_rules = {
111
111
  }
112
112
 
113
113
 
114
- def custom_signing_name_rules(signing_name: str, path: str) -> Optional[ServiceModelIdentifier]:
114
+ def custom_signing_name_rules(signing_name: str, path: str) -> ServiceModelIdentifier | None:
115
115
  """
116
116
  Rules which are based on the signing name (in the auth header) and the request path.
117
117
  """
@@ -134,7 +134,7 @@ def custom_signing_name_rules(signing_name: str, path: str) -> Optional[ServiceM
134
134
  return rules.get("*", ServiceModelIdentifier(signing_name))
135
135
 
136
136
 
137
- def custom_host_addressing_rules(host: str) -> Optional[ServiceModelIdentifier]:
137
+ def custom_host_addressing_rules(host: str) -> ServiceModelIdentifier | None:
138
138
  """
139
139
  Rules based on the host header of the request, which is typically the data plane of a service.
140
140
 
@@ -147,7 +147,7 @@ def custom_host_addressing_rules(host: str) -> Optional[ServiceModelIdentifier]:
147
147
  return ServiceModelIdentifier("s3")
148
148
 
149
149
 
150
- def custom_path_addressing_rules(path: str) -> Optional[ServiceModelIdentifier]:
150
+ def custom_path_addressing_rules(path: str) -> ServiceModelIdentifier | None:
151
151
  """
152
152
  Rules which are only based on the request path.
153
153
  """
@@ -159,7 +159,7 @@ def custom_path_addressing_rules(path: str) -> Optional[ServiceModelIdentifier]:
159
159
  return ServiceModelIdentifier("lambda")
160
160
 
161
161
 
162
- def legacy_s3_rules(request: Request) -> Optional[ServiceModelIdentifier]:
162
+ def legacy_s3_rules(request: Request) -> ServiceModelIdentifier | None:
163
163
  """
164
164
  *Legacy* rules which allow us to fallback to S3 if no other service was matched.
165
165
  All rules which are implemented here should be removed once we make sure it would not break any use-cases.
@@ -228,7 +228,7 @@ def legacy_s3_rules(request: Request) -> Optional[ServiceModelIdentifier]:
228
228
 
229
229
 
230
230
  def resolve_conflicts(
231
- candidates: Set[ServiceModelIdentifier], request: Request
231
+ candidates: set[ServiceModelIdentifier], request: Request
232
232
  ) -> ServiceModelIdentifier:
233
233
  """
234
234
  Some service definitions are overlapping to a point where they are _not_ distinguishable at all
@@ -258,7 +258,7 @@ def resolve_conflicts(
258
258
 
259
259
  def determine_aws_service_model_for_data_plane(
260
260
  request: Request, services: ServiceCatalog = None
261
- ) -> Optional[ServiceModel]:
261
+ ) -> ServiceModel | None:
262
262
  """
263
263
  A stripped down version of ``determine_aws_service_model`` which only checks hostname indicators for
264
264
  the AWS data plane, such as s3 websites, lambda function URLs, or API gateway routes.
@@ -271,7 +271,7 @@ def determine_aws_service_model_for_data_plane(
271
271
 
272
272
  def determine_aws_service_model(
273
273
  request: Request, services: ServiceCatalog = None
274
- ) -> Optional[ServiceModel]:
274
+ ) -> ServiceModel | None:
275
275
  """
276
276
  Tries to determine the name of the AWS service an incoming request is targeting.
277
277
  :param request: to determine the target service name of
@@ -1,6 +1,6 @@
1
1
  """Slightly extends the ``botocore.validate`` package to provide better integration with our parser/serializer."""
2
2
 
3
- from typing import Any, Dict, List, NamedTuple
3
+ from typing import Any, NamedTuple
4
4
 
5
5
  from botocore.model import OperationModel, Shape
6
6
  from botocore.validate import ParamValidator as BotocoreParamValidator
@@ -22,7 +22,7 @@ class Error(NamedTuple):
22
22
 
23
23
  reason: str
24
24
  name: str
25
- attributes: Dict[str, Any]
25
+ attributes: dict[str, Any]
26
26
 
27
27
 
28
28
  class ParameterValidationError(Exception):
@@ -88,11 +88,11 @@ class EmptyInput(ParameterValidationError):
88
88
 
89
89
 
90
90
  class ValidationErrors(BotocoreValidationErrors):
91
- def __init__(self, shape: Shape, params: Dict[str, Any]):
91
+ def __init__(self, shape: Shape, params: dict[str, Any]):
92
92
  super().__init__()
93
93
  self.shape = shape
94
94
  self.params = params
95
- self._exceptions: List[ParameterValidationError] = []
95
+ self._exceptions: list[ParameterValidationError] = []
96
96
 
97
97
  @property
98
98
  def exceptions(self):
@@ -133,7 +133,7 @@ class ValidationErrors(BotocoreValidationErrors):
133
133
 
134
134
 
135
135
  class ParamValidator(BotocoreParamValidator):
136
- def validate(self, params: Dict[str, Any], shape: Shape):
136
+ def validate(self, params: dict[str, Any], shape: Shape):
137
137
  """Validate parameters against a shape model.
138
138
 
139
139
  This method will validate the parameters against a provided shape model.
@@ -1,10 +1,10 @@
1
1
  import io
2
2
  import keyword
3
3
  import re
4
+ from collections import OrderedDict
4
5
  from functools import cached_property
5
6
  from multiprocessing import Pool
6
7
  from pathlib import Path
7
- from typing import Dict, List, Optional, Set
8
8
 
9
9
  import click
10
10
  from botocore import xform_name
@@ -18,7 +18,6 @@ from botocore.model import (
18
18
  StringShape,
19
19
  StructureShape,
20
20
  )
21
- from typing_extensions import OrderedDict
22
21
 
23
22
  from localstack.aws.spec import load_service
24
23
  from localstack.utils.common import camel_to_snake_case, snake_to_camel_case
@@ -75,7 +74,7 @@ class ShapeNode:
75
74
  self.shape = shape
76
75
 
77
76
  @cached_property
78
- def request_operation(self) -> Optional[OperationModel]:
77
+ def request_operation(self) -> OperationModel | None:
79
78
  for operation_name in self.service.operation_names:
80
79
  operation = self.service.operation_model(operation_name)
81
80
  if operation.input_shape is None:
@@ -89,7 +88,7 @@ class ShapeNode:
89
88
  return None
90
89
 
91
90
  @cached_property
92
- def response_operation(self) -> Optional[OperationModel]:
91
+ def response_operation(self) -> OperationModel | None:
93
92
  for operation_name in self.service.operation_names:
94
93
  operation = self.service.operation_model(operation_name)
95
94
  if operation.output_shape is None:
@@ -128,7 +127,7 @@ class ShapeNode:
128
127
  return isinstance(self.shape, StringShape) and self.shape.enum
129
128
 
130
129
  @property
131
- def dependencies(self) -> List[str]:
130
+ def dependencies(self) -> list[str]:
132
131
  shape = self.shape
133
132
 
134
133
  if isinstance(shape, StructureShape):
@@ -327,7 +326,7 @@ def generate_service_types(output, service: ServiceModel, doc=True):
327
326
  output.write("\n")
328
327
 
329
328
  # ==================================== print type declarations
330
- nodes: Dict[str, ShapeNode] = {}
329
+ nodes: dict[str, ShapeNode] = {}
331
330
 
332
331
  for shape_name in service.shape_names:
333
332
  shape = service.shape_for(shape_name)
@@ -338,9 +337,9 @@ def generate_service_types(output, service: ServiceModel, doc=True):
338
337
  # output.write(f' "{name}",\n')
339
338
  # output.write("]\n")
340
339
 
341
- printed: Set[str] = set()
342
- visited: Set[str] = set()
343
- stack: List[str] = list(nodes.keys())
340
+ printed: set[str] = set()
341
+ visited: set[str] = set()
342
+ stack: list[str] = list(nodes.keys())
344
343
 
345
344
  stack = sorted(stack, key=lambda name: nodes[name].get_order())
346
345
  stack.reverse()
@@ -1,6 +1,5 @@
1
1
  import logging
2
2
  import threading
3
- from typing import List
4
3
 
5
4
  from rolo.gateway.wsgi import WsgiGateway
6
5
 
@@ -15,7 +14,7 @@ LOG = logging.getLogger(__name__)
15
14
 
16
15
 
17
16
  def serve_gateway(
18
- listen: HostAndPort | List[HostAndPort], use_ssl: bool, asynchronous: bool = False
17
+ listen: HostAndPort | list[HostAndPort], use_ssl: bool, asynchronous: bool = False
19
18
  ):
20
19
  """
21
20
  Implementation of the edge.do_start_edge_proxy interface to start a Hypercorn server instance serving the
@@ -37,7 +36,7 @@ def serve_gateway(
37
36
 
38
37
 
39
38
  def _serve_werkzeug(
40
- gateway: LocalstackAwsGateway, listen: List[HostAndPort], use_ssl: bool, asynchronous: bool
39
+ gateway: LocalstackAwsGateway, listen: list[HostAndPort], use_ssl: bool, asynchronous: bool
41
40
  ):
42
41
  from werkzeug.serving import ThreadedWSGIServer
43
42
 
@@ -57,7 +56,7 @@ def _serve_werkzeug(
57
56
  params["ssl_context"] = (cert_file_name, key_file_name)
58
57
 
59
58
  threads = []
60
- servers: List[ThreadedWSGIServer] = []
59
+ servers: list[ThreadedWSGIServer] = []
61
60
 
62
61
  for host_port in listen:
63
62
  kwargs = dict(params)
@@ -90,7 +89,7 @@ def _serve_werkzeug(
90
89
 
91
90
 
92
91
  def _serve_hypercorn(
93
- gateway: LocalstackAwsGateway, listen: List[HostAndPort], use_ssl: bool, asynchronous: bool
92
+ gateway: LocalstackAwsGateway, listen: list[HostAndPort], use_ssl: bool, asynchronous: bool
94
93
  ):
95
94
  from localstack.http.hypercorn import GatewayServer
96
95
 
@@ -112,7 +111,7 @@ def _serve_hypercorn(
112
111
 
113
112
 
114
113
  def _serve_twisted(
115
- gateway: LocalstackAwsGateway, listen: List[HostAndPort], use_ssl: bool, asynchronous: bool
114
+ gateway: LocalstackAwsGateway, listen: list[HostAndPort], use_ssl: bool, asynchronous: bool
116
115
  ):
117
116
  from .twisted import serve_gateway
118
117
 
@@ -1,5 +1,5 @@
1
1
  import asyncio
2
- from typing import Any, Optional, Tuple
2
+ from typing import Any
3
3
 
4
4
  from hypercorn import Config
5
5
  from hypercorn.asyncio import serve as serve_hypercorn
@@ -15,7 +15,7 @@ def serve(
15
15
  host: str = "localhost",
16
16
  port: int = constants.DEFAULT_PORT_EDGE,
17
17
  use_reloader: bool = True,
18
- ssl_creds: Optional[Tuple[Any, Any]] = None,
18
+ ssl_creds: tuple[Any, Any] | None = None,
19
19
  **kwargs,
20
20
  ) -> None:
21
21
  """
@@ -4,7 +4,6 @@ Bindings to serve LocalStack using twisted.
4
4
 
5
5
  import logging
6
6
  import time
7
- from typing import List
8
7
 
9
8
  from rolo.gateway import Gateway
10
9
  from rolo.serving.twisted import TwistedGateway
@@ -130,7 +129,7 @@ def stop_thread_pool(self: ThreadPool, stop, timeout: float = None):
130
129
 
131
130
 
132
131
  def serve_gateway(
133
- gateway: Gateway, listen: List[HostAndPort], use_ssl: bool, asynchronous: bool = False
132
+ gateway: Gateway, listen: list[HostAndPort], use_ssl: bool, asynchronous: bool = False
134
133
  ):
135
134
  """
136
135
  Serve a Gateway instance using twisted.
@@ -1,5 +1,5 @@
1
1
  import ssl
2
- from typing import TYPE_CHECKING, Any, Optional, Tuple
2
+ from typing import TYPE_CHECKING, Any
3
3
 
4
4
  from rolo.gateway import Gateway
5
5
  from rolo.gateway.wsgi import WsgiGateway
@@ -17,7 +17,7 @@ def serve(
17
17
  host: str = "localhost",
18
18
  port: int = constants.DEFAULT_PORT_EDGE,
19
19
  use_reloader: bool = True,
20
- ssl_creds: Optional[Tuple[Any, Any]] = None,
20
+ ssl_creds: tuple[Any, Any] | None = None,
21
21
  **kwargs,
22
22
  ) -> None:
23
23
  """
@@ -1,6 +1,7 @@
1
1
  import inspect
2
2
  import logging
3
- from typing import Any, Callable, Dict, NamedTuple, Optional, Union
3
+ from collections.abc import Callable
4
+ from typing import Any, NamedTuple
4
5
 
5
6
  from botocore import xform_name
6
7
  from botocore.model import ServiceModel
@@ -20,10 +21,10 @@ from localstack.utils.coverage_docs import get_coverage_link_for_service
20
21
 
21
22
  LOG = logging.getLogger(__name__)
22
23
 
23
- DispatchTable = Dict[str, ServiceRequestHandler]
24
+ DispatchTable = dict[str, ServiceRequestHandler]
24
25
 
25
26
 
26
- def create_skeleton(service: Union[str, ServiceModel], delegate: Any):
27
+ def create_skeleton(service: str | ServiceModel, delegate: Any):
27
28
  if isinstance(service, str):
28
29
  service = load_service(service)
29
30
 
@@ -49,7 +50,7 @@ def create_dispatch_table(delegate: object) -> DispatchTable:
49
50
  # scan class tree for @handler wrapped functions (reverse class tree so that inherited functions overwrite parent
50
51
  # functions)
51
52
  cls_tree = inspect.getmro(delegate.__class__)
52
- handlers: Dict[str, HandlerAttributes] = {}
53
+ handlers: dict[str, HandlerAttributes] = {}
53
54
  cls_tree = reversed(list(cls_tree))
54
55
  for cls in cls_tree:
55
56
  if cls == object:
@@ -98,9 +99,7 @@ class ServiceRequestDispatcher:
98
99
  self.pass_context = pass_context
99
100
  self.expand_parameters = expand_parameters
100
101
 
101
- def __call__(
102
- self, context: RequestContext, request: ServiceRequest
103
- ) -> Optional[ServiceResponse]:
102
+ def __call__(self, context: RequestContext, request: ServiceRequest) -> ServiceResponse | None:
104
103
  args = []
105
104
  kwargs = {}
106
105
 
@@ -122,7 +121,7 @@ class Skeleton:
122
121
  service: ServiceModel
123
122
  dispatch_table: DispatchTable
124
123
 
125
- def __init__(self, service: ServiceModel, implementation: Union[Any, DispatchTable]):
124
+ def __init__(self, service: ServiceModel, implementation: Any | DispatchTable):
126
125
  self.service = service
127
126
 
128
127
  if isinstance(implementation, dict):
localstack/aws/spec.py CHANGED
@@ -4,8 +4,9 @@ import logging
4
4
  import os
5
5
  import sys
6
6
  from collections import defaultdict
7
+ from collections.abc import Generator
7
8
  from functools import cached_property, lru_cache
8
- from typing import Dict, Generator, List, Literal, NamedTuple, Optional, Tuple
9
+ from typing import Literal, NamedTuple
9
10
 
10
11
  import botocore
11
12
  import jsonpatch
@@ -31,13 +32,13 @@ class ServiceModelIdentifier(NamedTuple):
31
32
  """
32
33
 
33
34
  name: ServiceName
34
- protocol: Optional[ProtocolName] = None
35
+ protocol: ProtocolName | None = None
35
36
 
36
37
 
37
38
  spec_patches_json = os.path.join(os.path.dirname(__file__), "spec-patches.json")
38
39
 
39
40
 
40
- def load_spec_patches() -> Dict[str, list]:
41
+ def load_spec_patches() -> dict[str, list]:
41
42
  if not os.path.exists(spec_patches_json):
42
43
  return {}
43
44
  with open(spec_patches_json) as fd:
@@ -59,9 +60,9 @@ class PatchingLoader(Loader):
59
60
  A custom botocore Loader that applies JSON patches from the given json patch file to the specs as they are loaded.
60
61
  """
61
62
 
62
- patches: Dict[str, list]
63
+ patches: dict[str, list]
63
64
 
64
- def __init__(self, patches: Dict[str, list], *args, **kwargs):
65
+ def __init__(self, patches: dict[str, list], *args, **kwargs):
65
66
  # add the builtin data path to the extra_search_paths to ensure they are discovered by the loader
66
67
  super().__init__(*args, **kwargs)
67
68
  self.patches = patches
@@ -94,12 +95,12 @@ class UnknownServiceProtocolError(UnknownServiceError):
94
95
  fmt = "Unknown service protocol: '{service_name}-{protocol}'."
95
96
 
96
97
 
97
- def list_services() -> List[ServiceModel]:
98
+ def list_services() -> list[ServiceModel]:
98
99
  return [load_service(service) for service in loader.list_available_services("service-2")]
99
100
 
100
101
 
101
102
  def load_service(
102
- service: ServiceName, version: Optional[str] = None, protocol: Optional[ProtocolName] = None
103
+ service: ServiceName, version: str | None = None, protocol: ProtocolName | None = None
103
104
  ) -> ServiceModel:
104
105
  """
105
106
  Loads a service
@@ -136,7 +137,7 @@ def load_service(
136
137
  return ServiceModel(service_description, service)
137
138
 
138
139
 
139
- def iterate_service_operations() -> Generator[Tuple[ServiceModel, OperationModel], None, None]:
140
+ def iterate_service_operations() -> Generator[tuple[ServiceModel, OperationModel], None, None]:
140
141
  """
141
142
  Returns one record per operation in the AWS service spec, where the first item is the service model the operation
142
143
  belongs to, and the second is the operation model.
@@ -154,11 +155,11 @@ class ServiceCatalogIndex:
154
155
  The ServiceCatalogIndex enables fast lookups for common operations to determine a service from service indicators.
155
156
  """
156
157
 
157
- service_names: List[ServiceName]
158
- target_prefix_index: Dict[str, List[ServiceModelIdentifier]]
159
- signing_name_index: Dict[str, List[ServiceModelIdentifier]]
160
- operations_index: Dict[str, List[ServiceModelIdentifier]]
161
- endpoint_prefix_index: Dict[str, List[ServiceModelIdentifier]]
158
+ service_names: list[ServiceName]
159
+ target_prefix_index: dict[str, list[ServiceModelIdentifier]]
160
+ signing_name_index: dict[str, list[ServiceModelIdentifier]]
161
+ operations_index: dict[str, list[ServiceModelIdentifier]]
162
+ endpoint_prefix_index: dict[str, list[ServiceModelIdentifier]]
162
163
 
163
164
 
164
165
  class LazyServiceCatalogIndex:
@@ -167,11 +168,11 @@ class LazyServiceCatalogIndex:
167
168
  """
168
169
 
169
170
  @cached_property
170
- def service_names(self) -> List[ServiceName]:
171
+ def service_names(self) -> list[ServiceName]:
171
172
  return list(self._services.keys())
172
173
 
173
174
  @cached_property
174
- def target_prefix_index(self) -> Dict[str, List[ServiceModelIdentifier]]:
175
+ def target_prefix_index(self) -> dict[str, list[ServiceModelIdentifier]]:
175
176
  result = defaultdict(list)
176
177
  for service_models in self._services.values():
177
178
  for service_model in service_models:
@@ -183,7 +184,7 @@ class LazyServiceCatalogIndex:
183
184
  return dict(result)
184
185
 
185
186
  @cached_property
186
- def signing_name_index(self) -> Dict[str, List[ServiceModelIdentifier]]:
187
+ def signing_name_index(self) -> dict[str, list[ServiceModelIdentifier]]:
187
188
  result = defaultdict(list)
188
189
  for service_models in self._services.values():
189
190
  for service_model in service_models:
@@ -193,7 +194,7 @@ class LazyServiceCatalogIndex:
193
194
  return dict(result)
194
195
 
195
196
  @cached_property
196
- def operations_index(self) -> Dict[str, List[ServiceModelIdentifier]]:
197
+ def operations_index(self) -> dict[str, list[ServiceModelIdentifier]]:
197
198
  result = defaultdict(list)
198
199
  for service_models in self._services.values():
199
200
  for service_model in service_models:
@@ -208,7 +209,7 @@ class LazyServiceCatalogIndex:
208
209
  return dict(result)
209
210
 
210
211
  @cached_property
211
- def endpoint_prefix_index(self) -> Dict[str, List[ServiceModelIdentifier]]:
212
+ def endpoint_prefix_index(self) -> dict[str, list[ServiceModelIdentifier]]:
212
213
  result = defaultdict(list)
213
214
  for service_models in self._services.values():
214
215
  for service_model in service_models:
@@ -218,7 +219,7 @@ class LazyServiceCatalogIndex:
218
219
  return dict(result)
219
220
 
220
221
  @cached_property
221
- def _services(self) -> Dict[ServiceName, List[ServiceModel]]:
222
+ def _services(self) -> dict[ServiceName, list[ServiceModel]]:
222
223
  services = defaultdict(list)
223
224
  for service in list_services():
224
225
  services[service.service_name].append(service)
@@ -232,38 +233,36 @@ class ServiceCatalog:
232
233
  self.index = index or LazyServiceCatalogIndex()
233
234
 
234
235
  @lru_cache(maxsize=512)
235
- def get(
236
- self, name: ServiceName, protocol: Optional[ProtocolName] = None
237
- ) -> Optional[ServiceModel]:
236
+ def get(self, name: ServiceName, protocol: ProtocolName | None = None) -> ServiceModel | None:
238
237
  return load_service(name, protocol=protocol)
239
238
 
240
239
  @property
241
- def service_names(self) -> List[ServiceName]:
240
+ def service_names(self) -> list[ServiceName]:
242
241
  return self.index.service_names
243
242
 
244
243
  @property
245
- def target_prefix_index(self) -> Dict[str, List[ServiceModelIdentifier]]:
244
+ def target_prefix_index(self) -> dict[str, list[ServiceModelIdentifier]]:
246
245
  return self.index.target_prefix_index
247
246
 
248
247
  @property
249
- def signing_name_index(self) -> Dict[str, List[ServiceModelIdentifier]]:
248
+ def signing_name_index(self) -> dict[str, list[ServiceModelIdentifier]]:
250
249
  return self.index.signing_name_index
251
250
 
252
251
  @property
253
- def operations_index(self) -> Dict[str, List[ServiceModelIdentifier]]:
252
+ def operations_index(self) -> dict[str, list[ServiceModelIdentifier]]:
254
253
  return self.index.operations_index
255
254
 
256
255
  @property
257
- def endpoint_prefix_index(self) -> Dict[str, List[ServiceModelIdentifier]]:
256
+ def endpoint_prefix_index(self) -> dict[str, list[ServiceModelIdentifier]]:
258
257
  return self.index.endpoint_prefix_index
259
258
 
260
- def by_target_prefix(self, target_prefix: str) -> List[ServiceModelIdentifier]:
259
+ def by_target_prefix(self, target_prefix: str) -> list[ServiceModelIdentifier]:
261
260
  return self.target_prefix_index.get(target_prefix, [])
262
261
 
263
- def by_signing_name(self, signing_name: str) -> List[ServiceModelIdentifier]:
262
+ def by_signing_name(self, signing_name: str) -> list[ServiceModelIdentifier]:
264
263
  return self.signing_name_index.get(signing_name, [])
265
264
 
266
- def by_operation(self, operation_name: str) -> List[ServiceModelIdentifier]:
265
+ def by_operation(self, operation_name: str) -> list[ServiceModelIdentifier]:
267
266
  return self.operations_index.get(operation_name, [])
268
267
 
269
268
 
@@ -3,7 +3,7 @@ import logging
3
3
  import os
4
4
  import sys
5
5
  import traceback
6
- from typing import Dict, List, Optional, Tuple, TypedDict
6
+ from typing import Optional, TypedDict
7
7
 
8
8
  import click
9
9
  import requests
@@ -405,7 +405,7 @@ def cmd_status_services(format_: str) -> None:
405
405
  raise CLIError(f"could not connect to LocalStack health endpoint at {url}")
406
406
 
407
407
 
408
- def _print_service_table(services: Dict[str, str]) -> None:
408
+ def _print_service_table(services: dict[str, str]) -> None:
409
409
  from rich.table import Table
410
410
 
411
411
  status_display = {
@@ -486,9 +486,9 @@ def cmd_start(
486
486
  no_banner: bool,
487
487
  detached: bool,
488
488
  network: str = None,
489
- env: Tuple = (),
490
- publish: Tuple = (),
491
- volume: Tuple = (),
489
+ env: tuple = (),
490
+ publish: tuple = (),
491
+ volume: tuple = (),
492
492
  host_dns: bool = False,
493
493
  stack: str = None,
494
494
  ) -> None:
@@ -825,7 +825,7 @@ def cmd_update_docker_images() -> None:
825
825
  update_images(localstack_images)
826
826
 
827
827
 
828
- def update_images(image_list: List[str]) -> None:
828
+ def update_images(image_list: list[str]) -> None:
829
829
  from rich.markup import escape
830
830
  from rich.progress import MofNCompleteColumn, Progress
831
831
 
localstack/cli/lpm.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import itertools
2
2
  import logging
3
3
  from multiprocessing.pool import ThreadPool
4
- from typing import List, Optional
4
+ from typing import Optional
5
5
 
6
6
  import click
7
7
  from rich.console import Console
@@ -74,7 +74,7 @@ def _do_install_package(package: Package, version: str = None, target: InstallTa
74
74
  help="target of the installation",
75
75
  )
76
76
  def install(
77
- package: List[str],
77
+ package: list[str],
78
78
  parallel: Optional[int] = 1,
79
79
  version: Optional[str] = None,
80
80
  target: Optional[str] = None,