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,7 +1,7 @@
1
1
  import base64
2
2
  import json
3
3
  from enum import Enum
4
- from typing import Any, Dict, List, Optional, Union
4
+ from typing import Any
5
5
 
6
6
  from responses import Response
7
7
 
@@ -10,7 +10,7 @@ from localstack.utils.aws.aws_responses import parse_query_string
10
10
  from localstack.utils.strings import short_uid, to_str
11
11
 
12
12
  # type definition for data parameters (i.e., invocation payloads)
13
- InvocationPayload = Union[Dict, str, bytes]
13
+ InvocationPayload = dict | str | bytes
14
14
 
15
15
 
16
16
  class ApiGatewayVersion(Enum):
@@ -25,15 +25,15 @@ class ApiInvocationContext:
25
25
  method: str
26
26
  path: str
27
27
  data: InvocationPayload
28
- headers: Dict[str, str]
28
+ headers: dict[str, str]
29
29
 
30
30
  # raw URI (including query string) retired from werkzeug "RAW_URI" environment variable
31
31
  raw_uri: str
32
32
 
33
33
  # invocation context
34
- context: Dict[str, Any]
34
+ context: dict[str, Any]
35
35
  # authentication info for this invocation
36
- auth_context: Dict[str, Any]
36
+ auth_context: dict[str, Any]
37
37
 
38
38
  # target API/resource details extracted from the invocation
39
39
  apigw_version: ApiGatewayVersion
@@ -43,24 +43,24 @@ class ApiInvocationContext:
43
43
  region_name: str
44
44
  # resource path, including any path parameter placeholders (e.g., "/my/path/{id}")
45
45
  resource_path: str
46
- integration: Dict
47
- resource: Dict
46
+ integration: dict
47
+ resource: dict
48
48
  # Invocation path with query string, e.g., "/my/path?test". Defaults to "path", can be used
49
49
  # to overwrite the actual API path, in case the path format "../_user_request_/.." is used.
50
50
  _path_with_query_string: str
51
51
 
52
52
  # response templates to be applied to the invocation result
53
- response_templates: Dict
53
+ response_templates: dict
54
54
 
55
- route: Dict
55
+ route: dict
56
56
  connection_id: str
57
- path_params: Dict
57
+ path_params: dict
58
58
 
59
59
  # response object
60
60
  response: Response
61
61
 
62
62
  # dict of stage variables (mapping names to values)
63
- stage_variables: Dict[str, str]
63
+ stage_variables: dict[str, str]
64
64
 
65
65
  # websockets route selection
66
66
  ws_route: str
@@ -69,12 +69,12 @@ class ApiInvocationContext:
69
69
  self,
70
70
  method: str,
71
71
  path: str,
72
- data: Union[str, bytes],
73
- headers: Dict[str, str],
72
+ data: str | bytes,
73
+ headers: dict[str, str],
74
74
  api_id: str = None,
75
75
  stage: str = None,
76
- context: Dict[str, Any] = None,
77
- auth_context: Dict[str, Any] = None,
76
+ context: dict[str, Any] = None,
77
+ auth_context: dict[str, Any] = None,
78
78
  ):
79
79
  self.method = method
80
80
  self._path = path
@@ -109,7 +109,7 @@ class ApiInvocationContext:
109
109
  self._path = new_path
110
110
 
111
111
  @property
112
- def resource_id(self) -> Optional[str]:
112
+ def resource_id(self) -> str | None:
113
113
  return (self.resource or {}).get("id")
114
114
 
115
115
  @property
@@ -130,18 +130,18 @@ class ApiInvocationContext:
130
130
  new_path = "/" + new_path.lstrip("/")
131
131
  self._path_with_query_string = new_path
132
132
 
133
- def query_params(self) -> Dict[str, str]:
133
+ def query_params(self) -> dict[str, str]:
134
134
  """Extract the query parameters from the target URL or path in this request context."""
135
135
  query_string = self.path_with_query_string.partition("?")[2]
136
136
  return parse_query_string(query_string)
137
137
 
138
138
  @property
139
- def integration_uri(self) -> Optional[str]:
139
+ def integration_uri(self) -> str | None:
140
140
  integration = self.integration or {}
141
141
  return integration.get("uri") or integration.get("integrationUri")
142
142
 
143
143
  @property
144
- def auth_identity(self) -> Optional[Dict]:
144
+ def auth_identity(self) -> dict | None:
145
145
  if isinstance(self.auth_context, dict):
146
146
  if self.auth_context.get("identity") is None:
147
147
  self.auth_context["identity"] = {}
@@ -153,7 +153,7 @@ class ApiInvocationContext:
153
153
  return self.auth_context.get("authorizer_type") if self.auth_context else None
154
154
 
155
155
  @property
156
- def authorizer_result(self) -> Dict[str, Any]:
156
+ def authorizer_result(self) -> dict[str, Any]:
157
157
  if isinstance(self.auth_context, dict):
158
158
  return self.auth_context.get("authorizer") if self.auth_context else {}
159
159
 
@@ -165,7 +165,7 @@ class ApiInvocationContext:
165
165
  """Whether this is an API Gateway v1 request"""
166
166
  return self.apigw_version == ApiGatewayVersion.V1
167
167
 
168
- def cookies(self) -> Optional[List[str]]:
168
+ def cookies(self) -> list[str] | None:
169
169
  if cookies := self.headers.get("cookie") or "":
170
170
  return list(cookies.split(";"))
171
171
  return None
@@ -3,8 +3,8 @@ import logging
3
3
  import re
4
4
  import time
5
5
  from collections import defaultdict
6
- from datetime import datetime, timezone
7
- from typing import Any, Dict, List, Optional, Tuple, TypedDict, Union
6
+ from datetime import UTC, datetime
7
+ from typing import Any, TypedDict
8
8
  from urllib import parse as urlparse
9
9
 
10
10
  from botocore.utils import InvalidArnException
@@ -90,7 +90,7 @@ class RequestParametersResolver:
90
90
 
91
91
  :return: IntegrationParameters
92
92
  """
93
- method_request_params: Dict[str, Any] = self.method_request_dict(context)
93
+ method_request_params: dict[str, Any] = self.method_request_dict(context)
94
94
 
95
95
  # requestParameters: {
96
96
  # "integration.request.path.pathParam": "method.request.header.Content-Type"
@@ -128,13 +128,13 @@ class RequestParametersResolver:
128
128
 
129
129
  return result
130
130
 
131
- def method_request_dict(self, context: ApiInvocationContext) -> Dict[str, Any]:
131
+ def method_request_dict(self, context: ApiInvocationContext) -> dict[str, Any]:
132
132
  """
133
133
  Build a dict with all method request parameters and their values.
134
134
  :return: dict with all method request parameters and their values,
135
135
  and all keys in lowercase
136
136
  """
137
- params: Dict[str, str] = {}
137
+ params: dict[str, str] = {}
138
138
 
139
139
  # TODO: add support for multi-values headers and multi-values querystring
140
140
 
@@ -183,7 +183,7 @@ class RequestParametersResolver:
183
183
 
184
184
 
185
185
  class ResponseParametersResolver:
186
- def resolve(self, context: ApiInvocationContext) -> Dict[str, str]:
186
+ def resolve(self, context: ApiInvocationContext) -> dict[str, str]:
187
187
  """
188
188
  Resolve integration response parameters into method response parameters.
189
189
  Integration response parameters can map header, body,
@@ -191,7 +191,7 @@ class ResponseParametersResolver:
191
191
 
192
192
  :return: dict with all method response parameters and their values
193
193
  """
194
- integration_request_params: Dict[str, Any] = self.integration_request_dict(context)
194
+ integration_request_params: dict[str, Any] = self.integration_request_dict(context)
195
195
 
196
196
  # "responseParameters" : {
197
197
  # "method.response.header.Location" : "integration.response.body.redirect.url",
@@ -213,7 +213,7 @@ class ResponseParametersResolver:
213
213
  method_parameters[k] = v.replace("'", "")
214
214
 
215
215
  # build the integration parameters
216
- result: Dict[str, str] = {}
216
+ result: dict[str, str] = {}
217
217
  for k, v in method_parameters.items():
218
218
  # headers
219
219
  if k.startswith("method.response.header."):
@@ -222,8 +222,8 @@ class ResponseParametersResolver:
222
222
 
223
223
  return result
224
224
 
225
- def integration_request_dict(self, context: ApiInvocationContext) -> Dict[str, Any]:
226
- params: Dict[str, str] = {}
225
+ def integration_request_dict(self, context: ApiInvocationContext) -> dict[str, Any]:
226
+ params: dict[str, str] = {}
227
227
 
228
228
  for k, v in context.headers.items():
229
229
  params[f"integration.request.header.{k}"] = v
@@ -293,7 +293,7 @@ def is_test_invoke_method(method, path):
293
293
  return method == "POST" and bool(re.match(PATH_REGEX_TEST_INVOKE_API, path))
294
294
 
295
295
 
296
- def get_stage_variables(context: ApiInvocationContext) -> Optional[Dict[str, str]]:
296
+ def get_stage_variables(context: ApiInvocationContext) -> dict[str, str] | None:
297
297
  if is_test_invoke_method(context.method, context.path):
298
298
  return None
299
299
 
@@ -316,7 +316,7 @@ def tokenize_path(path):
316
316
  return path.lstrip("/").split("/")
317
317
 
318
318
 
319
- def extract_path_params(path: str, extracted_path: str) -> Dict[str, str]:
319
+ def extract_path_params(path: str, extracted_path: str) -> dict[str, str]:
320
320
  tokenized_extracted_path = tokenize_path(extracted_path)
321
321
  # Looks for '{' in the tokenized extracted path
322
322
  path_params_list = [(i, v) for i, v in enumerate(tokenized_extracted_path) if "{" in v]
@@ -335,7 +335,7 @@ def extract_path_params(path: str, extracted_path: str) -> Dict[str, str]:
335
335
  return path_params
336
336
 
337
337
 
338
- def extract_query_string_params(path: str) -> Tuple[str, Dict[str, str]]:
338
+ def extract_query_string_params(path: str) -> tuple[str, dict[str, str]]:
339
339
  parsed_path = urlparse.urlparse(path)
340
340
  if not path.startswith("//"):
341
341
  path = parsed_path.path
@@ -411,8 +411,8 @@ def get_rest_api_paths(account_id: str, region_name: str, rest_api_id: str):
411
411
  # -method-request.html
412
412
  # https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-routes.html
413
413
  def get_resource_for_path(
414
- path: str, method: str, path_map: Dict[str, Dict]
415
- ) -> tuple[Optional[str], Optional[dict]]:
414
+ path: str, method: str, path_map: dict[str, dict]
415
+ ) -> tuple[str | None, dict | None]:
416
416
  matches = []
417
417
  # creates a regex from the input path if there are parameters, e.g /foo/{bar}/baz -> /foo/[
418
418
  # ^\]+/baz, otherwise is a direct match.
@@ -528,7 +528,7 @@ def connect_api_gateway_to_sqs(gateway_name, stage_name, queue_arn, path, accoun
528
528
 
529
529
  def get_target_resource_details(
530
530
  invocation_context: ApiInvocationContext,
531
- ) -> Tuple[Optional[str], Optional[dict]]:
531
+ ) -> tuple[str | None, dict | None]:
532
532
  """Look up and return the API GW resource (path pattern + resource dict) for the given invocation context."""
533
533
  path_map = get_rest_api_paths(
534
534
  account_id=invocation_context.account_id,
@@ -557,7 +557,7 @@ def get_target_resource_details(
557
557
  return None, None
558
558
 
559
559
 
560
- def get_target_resource_method(invocation_context: ApiInvocationContext) -> Optional[Dict]:
560
+ def get_target_resource_method(invocation_context: ApiInvocationContext) -> dict | None:
561
561
  """Look up and return the API GW resource method for the given invocation context."""
562
562
  _, resource = get_target_resource_details(invocation_context)
563
563
  if not resource:
@@ -614,7 +614,7 @@ def get_event_request_context(invocation_context: ApiInvocationContext):
614
614
  },
615
615
  "httpMethod": method,
616
616
  "protocol": "HTTP/1.1",
617
- "requestTime": datetime.now(timezone.utc).strftime(REQUEST_TIME_DATE_FORMAT),
617
+ "requestTime": datetime.now(UTC).strftime(REQUEST_TIME_DATE_FORMAT),
618
618
  "requestTimeEpoch": int(time.time() * 1000),
619
619
  "authorizer": {},
620
620
  }
@@ -681,7 +681,7 @@ def set_api_id_stage_invocation_path(
681
681
  return invocation_context
682
682
 
683
683
 
684
- def get_api_account_id_and_region(api_id: str) -> Tuple[Optional[str], Optional[str]]:
684
+ def get_api_account_id_and_region(api_id: str) -> tuple[str | None, str | None]:
685
685
  """Return the region name for the given REST API ID"""
686
686
  for account_id, account in apigateway_backends.items():
687
687
  for region_name, region in account.items():
@@ -698,7 +698,7 @@ def extract_api_id_from_hostname_in_url(hostname: str) -> str:
698
698
  return match.group(1)
699
699
 
700
700
 
701
- def multi_value_dict_for_list(elements: Union[List, Dict]) -> Dict:
701
+ def multi_value_dict_for_list(elements: list | dict) -> dict:
702
702
  temp_mv_dict = defaultdict(list)
703
703
  for key in elements:
704
704
  if isinstance(key, (list, tuple)):
@@ -5,7 +5,7 @@ import re
5
5
  from abc import ABC, abstractmethod
6
6
  from functools import lru_cache
7
7
  from http import HTTPMethod, HTTPStatus
8
- from typing import Any, Dict
8
+ from typing import Any
9
9
  from urllib.parse import urljoin
10
10
 
11
11
  import requests
@@ -91,7 +91,7 @@ class BackendIntegration(ABC):
91
91
 
92
92
  @classmethod
93
93
  def apply_request_parameters(
94
- cls, integration_params: IntegrationParameters, headers: Dict[str, Any]
94
+ cls, integration_params: IntegrationParameters, headers: dict[str, Any]
95
95
  ):
96
96
  for k, v in integration_params.get("headers").items():
97
97
  headers.update({k: v})
@@ -569,7 +569,7 @@ class KinesisIntegration(BackendIntegration):
569
569
  return invocation_context.response
570
570
 
571
571
  @classmethod
572
- def _validate_required_params(cls, request_parameters: Dict[str, Any]) -> None:
572
+ def _validate_required_params(cls, request_parameters: dict[str, Any]) -> None:
573
573
  if not request_parameters:
574
574
  raise BadRequestException("Missing required parameters")
575
575
  # https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html#Kinesis-PutRecord
@@ -588,7 +588,7 @@ class KinesisIntegration(BackendIntegration):
588
588
 
589
589
  def _create_request_parameters(
590
590
  self, invocation_context: ApiInvocationContext
591
- ) -> Dict[str, Any]:
591
+ ) -> dict[str, Any]:
592
592
  request_parameters = invocation_context.integration.get("requestParameters", {})
593
593
  self._validate_required_params(request_parameters)
594
594
 
@@ -756,7 +756,7 @@ class S3Integration(BackendIntegration):
756
756
 
757
757
  class HTTPIntegration(BackendIntegration):
758
758
  @staticmethod
759
- def _set_http_apigw_headers(headers: Dict[str, Any], invocation_context: ApiInvocationContext):
759
+ def _set_http_apigw_headers(headers: dict[str, Any], invocation_context: ApiInvocationContext):
760
760
  del headers["host"]
761
761
  headers["x-amzn-apigateway-api-id"] = invocation_context.api_id
762
762
  return headers
@@ -902,7 +902,7 @@ class SNSIntegration(BackendIntegration):
902
902
 
903
903
  class StepFunctionIntegration(BackendIntegration):
904
904
  @classmethod
905
- def _validate_required_params(cls, request_parameters: Dict[str, Any]) -> None:
905
+ def _validate_required_params(cls, request_parameters: dict[str, Any]) -> None:
906
906
  if not request_parameters:
907
907
  raise BadRequestException("Missing required parameters")
908
908
  # stateMachineArn and input are required
@@ -1065,7 +1065,7 @@ class MockIntegration(BackendIntegration):
1065
1065
 
1066
1066
  # TODO: remove once we migrate all usages to `apply_request_parameters` on BackendIntegration
1067
1067
  def apply_request_parameters(
1068
- uri: str, integration: Dict[str, Any], path_params: Dict[str, str], query_params: Dict[str, str]
1068
+ uri: str, integration: dict[str, Any], path_params: dict[str, str], query_params: dict[str, str]
1069
1069
  ):
1070
1070
  request_parameters = integration.get("requestParameters")
1071
1071
  uri = uri or integration.get("uri") or integration.get("integrationUri") or ""
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict
2
+ from typing import Any
3
3
 
4
4
  from requests.models import Response as RequestsResponse
5
5
  from werkzeug.datastructures import Headers
@@ -22,7 +22,7 @@ LOG = logging.getLogger(__name__)
22
22
  # invocation context property decorators and use the url_params directly,
23
23
  # something asked for a long time.
24
24
  def to_invocation_context(
25
- request: Request, url_params: Dict[str, Any] = None
25
+ request: Request, url_params: dict[str, Any] = None
26
26
  ) -> ApiInvocationContext:
27
27
  """
28
28
  Converts an HTTP Request object into an ApiInvocationContext.
@@ -3,7 +3,7 @@ import copy
3
3
  import json
4
4
  import logging
5
5
  from enum import Enum
6
- from typing import Any, Dict, Union
6
+ from typing import Any
7
7
  from urllib.parse import quote_plus, unquote_plus
8
8
 
9
9
  import xmltodict
@@ -184,7 +184,7 @@ class VelocityInput:
184
184
  class ApiGatewayVtlTemplate(VtlTemplate):
185
185
  """Util class for rendering VTL templates with API Gateway specific extensions"""
186
186
 
187
- def prepare_namespace(self, variables, source: str = APIGW_SOURCE) -> Dict[str, Any]:
187
+ def prepare_namespace(self, variables, source: str = APIGW_SOURCE) -> dict[str, Any]:
188
188
  namespace = super().prepare_namespace(variables, source)
189
189
  if stage_var := variables.get("stage_variables") or {}:
190
190
  namespace["stageVariables"] = stage_var
@@ -203,7 +203,7 @@ class Templates:
203
203
  def __init__(self):
204
204
  self.vtl = ApiGatewayVtlTemplate()
205
205
 
206
- def render(self, api_context: ApiInvocationContext) -> Union[bytes, str]:
206
+ def render(self, api_context: ApiInvocationContext) -> bytes | str:
207
207
  pass
208
208
 
209
209
  def render_vtl(self, template, variables):
@@ -250,7 +250,7 @@ class RequestTemplates(Templates):
250
250
 
251
251
  def render(
252
252
  self, api_context: ApiInvocationContext, template_key: str = APPLICATION_JSON
253
- ) -> Union[bytes, str]:
253
+ ) -> bytes | str:
254
254
  LOG.debug(
255
255
  "Method request body before transformations: %s", to_str(api_context.data_as_string())
256
256
  )
@@ -278,7 +278,7 @@ class ResponseTemplates(Templates):
278
278
  template is used.
279
279
  """
280
280
 
281
- def render(self, api_context: ApiInvocationContext, **kwargs) -> Union[bytes, str]:
281
+ def render(self, api_context: ApiInvocationContext, **kwargs) -> bytes | str:
282
282
  # XXX: keep backwards compatibility until we migrate all integrations to this new classes
283
283
  # api_context contains a response object that we want slowly remove from it
284
284
  data = kwargs.get("response", "")
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, List
1
+ from typing import Any
2
2
 
3
3
  from requests.structures import CaseInsensitiveDict
4
4
 
@@ -28,21 +28,21 @@ class RestApiContainer:
28
28
  # contains the RestApi dictionary. We're not making use of it yet, still using moto data.
29
29
  rest_api: RestApi
30
30
  # maps AuthorizerId -> Authorizer
31
- authorizers: Dict[str, Authorizer]
31
+ authorizers: dict[str, Authorizer]
32
32
  # maps RequestValidatorId -> RequestValidator
33
- validators: Dict[str, RequestValidator]
33
+ validators: dict[str, RequestValidator]
34
34
  # map DocumentationPartId -> DocumentationPart
35
- documentation_parts: Dict[str, DocumentationPart]
35
+ documentation_parts: dict[str, DocumentationPart]
36
36
  # map doc version name -> DocumentationVersion
37
- documentation_versions: Dict[str, DocumentationVersion]
37
+ documentation_versions: dict[str, DocumentationVersion]
38
38
  # not used yet, still in moto
39
- gateway_responses: Dict[GatewayResponseType, GatewayResponse]
39
+ gateway_responses: dict[GatewayResponseType, GatewayResponse]
40
40
  # maps Model name -> Model
41
- models: Dict[str, Model]
41
+ models: dict[str, Model]
42
42
  # maps Model name -> resolved dict Model, so we don't need to load the JSON everytime
43
- resolved_models: Dict[str, dict]
43
+ resolved_models: dict[str, dict]
44
44
  # maps ResourceId of a Resource to its children ResourceIds
45
- resource_children: Dict[str, List[str]]
45
+ resource_children: dict[str, list[str]]
46
46
 
47
47
  def __init__(self, rest_api: RestApi):
48
48
  self.rest_api = rest_api
@@ -102,25 +102,25 @@ class RestApiDeployment:
102
102
  class ApiGatewayStore(BaseStore):
103
103
  # maps (API id) -> RestApiContainer
104
104
  # TODO: remove CaseInsensitiveDict, and lower the value of the ID when getting it from the tags
105
- rest_apis: Dict[str, RestApiContainer] = LocalAttribute(default=CaseInsensitiveDict)
105
+ rest_apis: dict[str, RestApiContainer] = LocalAttribute(default=CaseInsensitiveDict)
106
106
 
107
107
  # account details
108
- _account: Dict[str, Any] = LocalAttribute(default=dict)
108
+ _account: dict[str, Any] = LocalAttribute(default=dict)
109
109
 
110
110
  # maps (domain_name) -> [path_mappings]
111
- base_path_mappings: Dict[str, List[Dict]] = LocalAttribute(default=dict)
111
+ base_path_mappings: dict[str, list[dict]] = LocalAttribute(default=dict)
112
112
 
113
113
  # maps ID to VPC link details
114
- vpc_links: Dict[str, Dict] = LocalAttribute(default=dict)
114
+ vpc_links: dict[str, dict] = LocalAttribute(default=dict)
115
115
 
116
116
  # maps cert ID to client certificate details
117
- client_certificates: Dict[str, Dict] = LocalAttribute(default=dict)
117
+ client_certificates: dict[str, dict] = LocalAttribute(default=dict)
118
118
 
119
119
  # maps domain name to domain name model
120
- domain_names: Dict[str, DomainName] = LocalAttribute(default=dict)
120
+ domain_names: dict[str, DomainName] = LocalAttribute(default=dict)
121
121
 
122
122
  # maps resource ARN to tags
123
- TAGS: Dict[str, Dict[str, str]] = CrossRegionAttribute(default=dict)
123
+ TAGS: dict[str, dict[str, str]] = CrossRegionAttribute(default=dict)
124
124
 
125
125
  # internal deployments, represents a frozen REST API for a deployment, used in our router
126
126
  # TODO: make sure API ID are unique across all accounts
@@ -1,4 +1,4 @@
1
- from typing import Callable, Type
1
+ from collections.abc import Callable
2
2
 
3
3
  from rolo import Response
4
4
  from rolo.gateway.chain import HandlerChain as RoloHandlerChain
@@ -14,4 +14,4 @@ RestApiGatewayExceptionHandler = Callable[
14
14
  None,
15
15
  ]
16
16
 
17
- RestApiGatewayHandlerChain: Type[RoloHandlerChain[RestApiInvocationContext]] = RoloHandlerChain
17
+ RestApiGatewayHandlerChain: type[RoloHandlerChain[RestApiInvocationContext]] = RoloHandlerChain
@@ -1,5 +1,5 @@
1
1
  from http import HTTPMethod
2
- from typing import Optional, TypedDict
2
+ from typing import TypedDict
3
3
 
4
4
  from rolo import Request
5
5
  from rolo.gateway import RequestContext
@@ -14,12 +14,12 @@ from .variables import ContextVariableOverrides, ContextVariables, LoggingContex
14
14
  class InvocationRequest(TypedDict, total=False):
15
15
  http_method: HTTPMethod
16
16
  """HTTP Method of the incoming request"""
17
- raw_path: Optional[str]
17
+ raw_path: str | None
18
18
  # TODO: verify if raw_path is needed
19
19
  """Raw path of the incoming request with no modification, needed to keep double forward slashes"""
20
- path: Optional[str]
20
+ path: str | None
21
21
  """Path of the request with no URL decoding"""
22
- path_parameters: Optional[dict[str, str]]
22
+ path_parameters: dict[str, str] | None
23
23
  """Path parameters of the request"""
24
24
  query_string_parameters: dict[str, str]
25
25
  """Query string parameters of the request"""
@@ -72,48 +72,48 @@ class RestApiInvocationContext(RequestContext):
72
72
  This context is going to be used to pass relevant information across an API Gateway invocation.
73
73
  """
74
74
 
75
- deployment: Optional[RestApiDeployment]
75
+ deployment: RestApiDeployment | None
76
76
  """Contains the invoked REST API Resources"""
77
- integration: Optional[Integration]
77
+ integration: Integration | None
78
78
  """The Method Integration for the invoked request"""
79
- api_id: Optional[str]
79
+ api_id: str | None
80
80
  """The REST API identifier of the invoked API"""
81
- stage: Optional[str]
81
+ stage: str | None
82
82
  """The REST API stage name linked to this invocation"""
83
- base_path: Optional[str]
83
+ base_path: str | None
84
84
  """The REST API base path mapped to the stage of this invocation"""
85
- deployment_id: Optional[str]
85
+ deployment_id: str | None
86
86
  """The REST API deployment linked to this invocation"""
87
- region: Optional[str]
87
+ region: str | None
88
88
  """The region the REST API is living in."""
89
- account_id: Optional[str]
89
+ account_id: str | None
90
90
  """The account the REST API is living in."""
91
- trace_id: Optional[str]
91
+ trace_id: str | None
92
92
  """The X-Ray trace ID for the request."""
93
- resource: Optional[Resource]
93
+ resource: Resource | None
94
94
  """The resource the invocation matched"""
95
- resource_method: Optional[Method]
95
+ resource_method: Method | None
96
96
  """The method of the resource the invocation matched"""
97
- stage_variables: Optional[dict[str, str]]
97
+ stage_variables: dict[str, str] | None
98
98
  """The Stage variables, also used in parameters mapping and mapping templates"""
99
- stage_configuration: Optional[Stage]
99
+ stage_configuration: Stage | None
100
100
  """The Stage configuration, containing canary deployment settings"""
101
- is_canary: Optional[bool]
101
+ is_canary: bool | None
102
102
  """If the current call was directed to a canary deployment"""
103
- context_variables: Optional[ContextVariables]
103
+ context_variables: ContextVariables | None
104
104
  """The $context used in data models, authorizers, mapping templates, and CloudWatch access logging"""
105
- context_variable_overrides: Optional[ContextVariableOverrides]
105
+ context_variable_overrides: ContextVariableOverrides | None
106
106
  """requestOverrides and responseOverrides are passed from request templates to response templates but are
107
107
  not in the integration context"""
108
- logging_context_variables: Optional[LoggingContextVariables]
108
+ logging_context_variables: LoggingContextVariables | None
109
109
  """Additional $context variables available only for access logging, not yet implemented"""
110
- invocation_request: Optional[InvocationRequest]
110
+ invocation_request: InvocationRequest | None
111
111
  """Contains the data relative to the invocation request"""
112
- integration_request: Optional[IntegrationRequest]
112
+ integration_request: IntegrationRequest | None
113
113
  """Contains the data needed to construct an HTTP request to an Integration"""
114
- endpoint_response: Optional[EndpointResponse]
114
+ endpoint_response: EndpointResponse | None
115
115
  """Contains the data returned by an Integration"""
116
- invocation_response: Optional[InvocationResponse]
116
+ invocation_response: InvocationResponse | None
117
117
  """Contains the data serialized and to be returned by an invocation"""
118
118
 
119
119
  def __init__(self, request: Request):
@@ -1,5 +1,4 @@
1
1
  import logging
2
- from typing import Optional
3
2
 
4
3
  from localstack.aws.api.apigateway import ApiKey, ApiKeySourceType, RestApi
5
4
  from localstack.http import Response
@@ -56,9 +55,7 @@ class ApiKeyValidationHandler(RestApiGatewayHandler):
56
55
  LOG.debug("Updating $context.identity.apiKeyId='%s'", validated_key["id"])
57
56
  identity["apiKeyId"] = validated_key["id"]
58
57
 
59
- def validate_api_key(
60
- self, api_key_value, context: RestApiInvocationContext
61
- ) -> Optional[ApiKey]:
58
+ def validate_api_key(self, api_key_value, context: RestApiInvocationContext) -> ApiKey | None:
62
59
  api_id = context.api_id
63
60
  stage = context.stage
64
61
  account_id = context.account_id
@@ -95,7 +92,7 @@ class ApiKeyValidationHandler(RestApiGatewayHandler):
95
92
 
96
93
  def get_request_api_key(
97
94
  self, rest_api: RestApi, request: InvocationRequest, identity: ContextVarsIdentity
98
- ) -> Optional[str]:
95
+ ) -> str | None:
99
96
  """https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-key-source.html
100
97
  The source of the API key for metering requests according to a usage plan.
101
98
  Valid values are:
@@ -2,7 +2,6 @@ import datetime
2
2
  import logging
3
3
  import re
4
4
  from collections import defaultdict
5
- from typing import Optional
6
5
  from urllib.parse import urlparse
7
6
 
8
7
  from rolo.request import restore_payload
@@ -178,7 +177,7 @@ class InvocationRequestParser(RestApiGatewayHandler):
178
177
  return context_variables
179
178
 
180
179
  @staticmethod
181
- def get_stage_variables(context: RestApiInvocationContext) -> Optional[dict[str, str]]:
180
+ def get_stage_variables(context: RestApiInvocationContext) -> dict[str, str] | None:
182
181
  stage_variables = context.stage_configuration.get("variables")
183
182
  if context.is_canary:
184
183
  overrides = (
@@ -1,7 +1,7 @@
1
1
  import logging
2
+ from collections.abc import Iterable
2
3
  from functools import cache
3
4
  from http import HTTPMethod
4
- from typing import Iterable
5
5
 
6
6
  from werkzeug.exceptions import MethodNotAllowed, NotFound
7
7
  from werkzeug.routing import Map, MapAdapter, Rule
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  from collections import defaultdict
3
- from typing import Iterable
3
+ from collections.abc import Iterable
4
4
 
5
5
  from werkzeug.datastructures.headers import Headers
6
6
 
@@ -4,7 +4,7 @@ import random
4
4
  import re
5
5
  import time
6
6
  from secrets import token_hex
7
- from typing import Type, TypedDict
7
+ from typing import TypedDict
8
8
 
9
9
  from moto.apigateway.models import RestAPI as MotoRestAPI
10
10
 
@@ -115,7 +115,7 @@ def get_lambda_function_arn_from_invocation_uri(uri: str) -> str:
115
115
  return uri.split("functions/")[1].removesuffix("/invocations")
116
116
 
117
117
 
118
- def validate_sub_dict_of_typed_dict(typed_dict: Type[TypedDict], obj: dict) -> bool:
118
+ def validate_sub_dict_of_typed_dict(typed_dict: type[TypedDict], obj: dict) -> bool:
119
119
  """
120
120
  Validate that the object is a subset off the keys of a given `TypedDict`.
121
121
  :param typed_dict: the `TypedDict` blueprint