localstack-core 4.7.1.dev49__py3-none-any.whl → 4.10.1.dev12__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 (253) hide show
  1. localstack/aws/api/cloudformation/__init__.py +18 -4
  2. localstack/aws/api/cloudwatch/__init__.py +41 -1
  3. localstack/aws/api/config/__init__.py +4 -0
  4. localstack/aws/api/core.py +6 -2
  5. localstack/aws/api/dynamodb/__init__.py +30 -0
  6. localstack/aws/api/ec2/__init__.py +1522 -65
  7. localstack/aws/api/iam/__init__.py +7 -0
  8. localstack/aws/api/kinesis/__init__.py +19 -0
  9. localstack/aws/api/kms/__init__.py +6 -0
  10. localstack/aws/api/lambda_/__init__.py +13 -0
  11. localstack/aws/api/logs/__init__.py +15 -0
  12. localstack/aws/api/redshift/__init__.py +9 -3
  13. localstack/aws/api/route53/__init__.py +5 -0
  14. localstack/aws/api/s3/__init__.py +12 -0
  15. localstack/aws/api/s3control/__init__.py +54 -0
  16. localstack/aws/api/ssm/__init__.py +2 -0
  17. localstack/aws/api/transcribe/__init__.py +17 -0
  18. localstack/aws/client.py +7 -2
  19. localstack/aws/forwarder.py +52 -5
  20. localstack/aws/handlers/analytics.py +1 -1
  21. localstack/aws/handlers/internal_requests.py +6 -1
  22. localstack/aws/handlers/logging.py +12 -2
  23. localstack/aws/handlers/metric_handler.py +41 -1
  24. localstack/aws/handlers/service.py +40 -20
  25. localstack/aws/mocking.py +2 -2
  26. localstack/aws/patches.py +2 -2
  27. localstack/aws/protocol/parser.py +459 -32
  28. localstack/aws/protocol/serializer.py +689 -69
  29. localstack/aws/protocol/service_router.py +120 -20
  30. localstack/aws/protocol/validate.py +1 -1
  31. localstack/aws/scaffold.py +1 -1
  32. localstack/aws/skeleton.py +4 -2
  33. localstack/aws/spec-patches.json +58 -0
  34. localstack/aws/spec.py +37 -16
  35. localstack/cli/exceptions.py +1 -1
  36. localstack/cli/localstack.py +6 -6
  37. localstack/cli/lpm.py +3 -4
  38. localstack/cli/plugins.py +1 -1
  39. localstack/cli/profiles.py +1 -2
  40. localstack/config.py +25 -18
  41. localstack/constants.py +4 -29
  42. localstack/dev/kubernetes/__main__.py +130 -7
  43. localstack/dev/run/configurators.py +1 -4
  44. localstack/dev/run/paths.py +1 -1
  45. localstack/dns/plugins.py +5 -1
  46. localstack/dns/server.py +13 -4
  47. localstack/logging/format.py +3 -3
  48. localstack/packages/api.py +9 -8
  49. localstack/packages/core.py +2 -2
  50. localstack/packages/plugins.py +0 -8
  51. localstack/runtime/analytics.py +3 -0
  52. localstack/runtime/hooks.py +1 -1
  53. localstack/runtime/init.py +2 -2
  54. localstack/runtime/main.py +5 -5
  55. localstack/runtime/patches.py +2 -2
  56. localstack/services/apigateway/helpers.py +1 -4
  57. localstack/services/apigateway/legacy/helpers.py +7 -8
  58. localstack/services/apigateway/legacy/integration.py +4 -3
  59. localstack/services/apigateway/legacy/invocations.py +6 -5
  60. localstack/services/apigateway/legacy/provider.py +148 -68
  61. localstack/services/apigateway/legacy/templates.py +1 -1
  62. localstack/services/apigateway/next_gen/execute_api/handlers/method_request.py +7 -2
  63. localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +1 -2
  64. localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +3 -0
  65. localstack/services/apigateway/next_gen/execute_api/integrations/http.py +3 -3
  66. localstack/services/apigateway/next_gen/execute_api/template_mapping.py +2 -2
  67. localstack/services/apigateway/next_gen/execute_api/test_invoke.py +114 -9
  68. localstack/services/apigateway/next_gen/provider.py +5 -0
  69. localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +1 -1
  70. localstack/services/cloudformation/api_utils.py +4 -8
  71. localstack/services/cloudformation/cfn_utils.py +1 -1
  72. localstack/services/cloudformation/engine/entities.py +14 -4
  73. localstack/services/cloudformation/engine/template_deployer.py +6 -4
  74. localstack/services/cloudformation/engine/transformers.py +6 -4
  75. localstack/services/cloudformation/engine/v2/change_set_model.py +201 -13
  76. localstack/services/cloudformation/engine/v2/change_set_model_describer.py +52 -3
  77. localstack/services/cloudformation/engine/v2/change_set_model_executor.py +117 -76
  78. localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +205 -52
  79. localstack/services/cloudformation/engine/v2/change_set_model_transform.py +350 -116
  80. localstack/services/cloudformation/engine/v2/change_set_model_validator.py +56 -14
  81. localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +1 -0
  82. localstack/services/cloudformation/engine/v2/resolving.py +7 -5
  83. localstack/services/cloudformation/engine/yaml_parser.py +9 -2
  84. localstack/services/cloudformation/provider.py +7 -5
  85. localstack/services/cloudformation/resource_provider.py +7 -1
  86. localstack/services/cloudformation/resources.py +24149 -0
  87. localstack/services/cloudformation/service_models.py +2 -2
  88. localstack/services/cloudformation/v2/entities.py +19 -9
  89. localstack/services/cloudformation/v2/provider.py +336 -106
  90. localstack/services/cloudformation/v2/types.py +13 -7
  91. localstack/services/cloudformation/v2/utils.py +4 -1
  92. localstack/services/cloudwatch/alarm_scheduler.py +4 -1
  93. localstack/services/cloudwatch/provider.py +18 -13
  94. localstack/services/cloudwatch/provider_v2.py +25 -28
  95. localstack/services/dynamodb/packages.py +2 -1
  96. localstack/services/dynamodb/provider.py +42 -0
  97. localstack/services/dynamodb/server.py +2 -2
  98. localstack/services/dynamodb/v2/provider.py +42 -0
  99. localstack/services/ecr/resource_providers/aws_ecr_repository.py +5 -2
  100. localstack/services/edge.py +1 -1
  101. localstack/services/es/provider.py +2 -2
  102. localstack/services/events/event_rule_engine.py +31 -13
  103. localstack/services/events/models.py +4 -5
  104. localstack/services/events/provider.py +17 -14
  105. localstack/services/events/target.py +17 -9
  106. localstack/services/events/v1/provider.py +5 -5
  107. localstack/services/firehose/provider.py +14 -4
  108. localstack/services/iam/provider.py +11 -116
  109. localstack/services/iam/resources/policy_simulator.py +133 -0
  110. localstack/services/kinesis/models.py +15 -2
  111. localstack/services/kinesis/provider.py +86 -3
  112. localstack/services/kms/provider.py +14 -5
  113. localstack/services/lambda_/api_utils.py +6 -3
  114. localstack/services/lambda_/invocation/docker_runtime_executor.py +1 -1
  115. localstack/services/lambda_/invocation/event_manager.py +1 -1
  116. localstack/services/lambda_/invocation/internal_sqs_queue.py +5 -9
  117. localstack/services/lambda_/invocation/lambda_models.py +10 -7
  118. localstack/services/lambda_/invocation/lambda_service.py +5 -1
  119. localstack/services/lambda_/packages.py +1 -1
  120. localstack/services/lambda_/provider.py +4 -3
  121. localstack/services/lambda_/provider_utils.py +1 -1
  122. localstack/services/logs/provider.py +36 -19
  123. localstack/services/moto.py +2 -1
  124. localstack/services/opensearch/cluster.py +15 -7
  125. localstack/services/opensearch/packages.py +26 -7
  126. localstack/services/opensearch/provider.py +8 -2
  127. localstack/services/opensearch/versions.py +56 -7
  128. localstack/services/plugins.py +11 -7
  129. localstack/services/providers.py +10 -2
  130. localstack/services/redshift/provider.py +0 -21
  131. localstack/services/s3/constants.py +5 -2
  132. localstack/services/s3/cors.py +4 -4
  133. localstack/services/s3/models.py +1 -1
  134. localstack/services/s3/notifications.py +55 -39
  135. localstack/services/s3/presigned_url.py +35 -54
  136. localstack/services/s3/provider.py +73 -15
  137. localstack/services/s3/utils.py +42 -22
  138. localstack/services/s3/validation.py +46 -32
  139. localstack/services/s3/website_hosting.py +4 -2
  140. localstack/services/ses/provider.py +18 -8
  141. localstack/services/sns/constants.py +7 -1
  142. localstack/services/sns/executor.py +9 -2
  143. localstack/services/sns/provider.py +8 -5
  144. localstack/services/sns/publisher.py +31 -16
  145. localstack/services/sns/v2/models.py +167 -0
  146. localstack/services/sns/v2/provider.py +867 -0
  147. localstack/services/sns/v2/utils.py +130 -0
  148. localstack/services/sqs/constants.py +1 -1
  149. localstack/services/sqs/developer_api.py +205 -0
  150. localstack/services/sqs/models.py +48 -5
  151. localstack/services/sqs/provider.py +38 -311
  152. localstack/services/sqs/query_api.py +6 -2
  153. localstack/services/sqs/utils.py +121 -2
  154. localstack/services/ssm/provider.py +1 -1
  155. localstack/services/stepfunctions/asl/component/intrinsic/member.py +1 -1
  156. localstack/services/stepfunctions/asl/component/state/state_choice/comparison/comparison.py +5 -11
  157. localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +2 -2
  158. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +2 -2
  159. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +1 -1
  160. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +2 -2
  161. localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +1 -1
  162. localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +2 -2
  163. localstack/services/stepfunctions/asl/component/state/state_succeed/state_succeed.py +1 -1
  164. localstack/services/stepfunctions/asl/component/state/state_wait/state_wait.py +1 -1
  165. localstack/services/stepfunctions/asl/eval/environment.py +1 -1
  166. localstack/services/stepfunctions/asl/jsonata/jsonata.py +1 -1
  167. localstack/services/stepfunctions/backend/execution.py +2 -1
  168. localstack/services/stores.py +1 -1
  169. localstack/services/transcribe/provider.py +6 -1
  170. localstack/state/codecs.py +61 -0
  171. localstack/state/core.py +11 -5
  172. localstack/state/pickle.py +10 -49
  173. localstack/testing/aws/cloudformation_utils.py +1 -1
  174. localstack/testing/pytest/cloudformation/fixtures.py +3 -3
  175. localstack/testing/pytest/cloudformation/transformers.py +0 -0
  176. localstack/testing/pytest/container.py +4 -5
  177. localstack/testing/pytest/fixtures.py +33 -31
  178. localstack/testing/pytest/in_memory_localstack.py +0 -4
  179. localstack/testing/pytest/marking.py +38 -11
  180. localstack/testing/pytest/stepfunctions/utils.py +4 -3
  181. localstack/testing/pytest/util.py +1 -1
  182. localstack/testing/pytest/validation_tracking.py +1 -2
  183. localstack/testing/snapshots/transformer_utility.py +6 -1
  184. localstack/utils/analytics/events.py +2 -2
  185. localstack/utils/analytics/metadata.py +6 -4
  186. localstack/utils/analytics/metrics/counter.py +8 -15
  187. localstack/utils/analytics/publisher.py +1 -2
  188. localstack/utils/analytics/service_providers.py +19 -0
  189. localstack/utils/analytics/service_request_aggregator.py +2 -2
  190. localstack/utils/archives.py +11 -11
  191. localstack/utils/asyncio.py +2 -2
  192. localstack/utils/aws/arns.py +24 -29
  193. localstack/utils/aws/aws_responses.py +8 -8
  194. localstack/utils/aws/aws_stack.py +2 -3
  195. localstack/utils/aws/dead_letter_queue.py +1 -5
  196. localstack/utils/aws/message_forwarding.py +1 -2
  197. localstack/utils/aws/request_context.py +4 -5
  198. localstack/utils/aws/resources.py +1 -1
  199. localstack/utils/aws/templating.py +1 -1
  200. localstack/utils/batch_policy.py +3 -3
  201. localstack/utils/bootstrap.py +21 -13
  202. localstack/utils/catalog/catalog.py +139 -0
  203. localstack/utils/catalog/catalog_loader.py +119 -0
  204. localstack/utils/catalog/common.py +58 -0
  205. localstack/utils/catalog/plugins.py +28 -0
  206. localstack/utils/cloudwatch/cloudwatch_util.py +5 -5
  207. localstack/utils/collections.py +7 -8
  208. localstack/utils/config_listener.py +1 -1
  209. localstack/utils/container_networking.py +2 -3
  210. localstack/utils/container_utils/container_client.py +135 -136
  211. localstack/utils/container_utils/docker_cmd_client.py +85 -69
  212. localstack/utils/container_utils/docker_sdk_client.py +69 -66
  213. localstack/utils/crypto.py +10 -10
  214. localstack/utils/diagnose.py +3 -4
  215. localstack/utils/docker_utils.py +9 -5
  216. localstack/utils/files.py +33 -13
  217. localstack/utils/functions.py +4 -3
  218. localstack/utils/http.py +11 -11
  219. localstack/utils/json.py +20 -6
  220. localstack/utils/kinesis/kinesis_connector.py +2 -1
  221. localstack/utils/net.py +15 -9
  222. localstack/utils/no_exit_argument_parser.py +2 -2
  223. localstack/utils/numbers.py +9 -2
  224. localstack/utils/objects.py +7 -6
  225. localstack/utils/patch.py +10 -3
  226. localstack/utils/run.py +12 -11
  227. localstack/utils/scheduler.py +11 -11
  228. localstack/utils/server/tcp_proxy.py +2 -2
  229. localstack/utils/serving.py +3 -4
  230. localstack/utils/strings.py +15 -16
  231. localstack/utils/sync.py +126 -1
  232. localstack/utils/tagging.py +8 -6
  233. localstack/utils/testutil.py +8 -8
  234. localstack/utils/threads.py +2 -2
  235. localstack/utils/time.py +12 -4
  236. localstack/utils/urls.py +1 -3
  237. localstack/utils/xray/traceid.py +1 -1
  238. localstack/version.py +16 -3
  239. {localstack_core-4.7.1.dev49.dist-info → localstack_core-4.10.1.dev12.dist-info}/METADATA +18 -14
  240. {localstack_core-4.7.1.dev49.dist-info → localstack_core-4.10.1.dev12.dist-info}/RECORD +248 -239
  241. {localstack_core-4.7.1.dev49.dist-info → localstack_core-4.10.1.dev12.dist-info}/entry_points.txt +8 -4
  242. localstack_core-4.10.1.dev12.dist-info/plux.json +1 -0
  243. localstack/packages/terraform.py +0 -46
  244. localstack/services/cloudformation/deploy.html +0 -144
  245. localstack/services/cloudformation/deploy_ui.py +0 -47
  246. localstack/services/cloudformation/plugins.py +0 -12
  247. localstack_core-4.7.1.dev49.dist-info/plux.json +0 -1
  248. {localstack_core-4.7.1.dev49.data → localstack_core-4.10.1.dev12.data}/scripts/localstack +0 -0
  249. {localstack_core-4.7.1.dev49.data → localstack_core-4.10.1.dev12.data}/scripts/localstack-supervisor +0 -0
  250. {localstack_core-4.7.1.dev49.data → localstack_core-4.10.1.dev12.data}/scripts/localstack.bat +0 -0
  251. {localstack_core-4.7.1.dev49.dist-info → localstack_core-4.10.1.dev12.dist-info}/WHEEL +0 -0
  252. {localstack_core-4.7.1.dev49.dist-info → localstack_core-4.10.1.dev12.dist-info}/licenses/LICENSE.txt +0 -0
  253. {localstack_core-4.7.1.dev49.dist-info → localstack_core-4.10.1.dev12.dist-info}/top_level.txt +0 -0
@@ -47,10 +47,12 @@ FailureTolerancePercentage = int
47
47
  GeneratedTemplateId = str
48
48
  GeneratedTemplateName = str
49
49
  HookInvocationCount = int
50
+ HookInvocationId = str
50
51
  HookResultId = str
51
52
  HookStatusReason = str
52
53
  HookTargetTypeName = str
53
54
  HookType = str
55
+ HookTypeArn = str
54
56
  HookTypeConfigurationVersionId = str
55
57
  HookTypeName = str
56
58
  HookTypeVersionId = str
@@ -720,6 +722,7 @@ class WarningType(StrEnum):
720
722
  UNSUPPORTED_PROPERTIES = "UNSUPPORTED_PROPERTIES"
721
723
  MUTUALLY_EXCLUSIVE_TYPES = "MUTUALLY_EXCLUSIVE_TYPES"
722
724
  EXCLUDED_PROPERTIES = "EXCLUDED_PROPERTIES"
725
+ EXCLUDED_RESOURCES = "EXCLUDED_RESOURCES"
723
726
 
724
727
 
725
728
  class AlreadyExistsException(ServiceException):
@@ -1603,6 +1606,7 @@ class StackEvent(TypedDict, total=False):
1603
1606
  HookStatus: Optional[HookStatus]
1604
1607
  HookStatusReason: Optional[HookStatusReason]
1605
1608
  HookInvocationPoint: Optional[HookInvocationPoint]
1609
+ HookInvocationId: Optional[HookInvocationId]
1606
1610
  HookFailureMode: Optional[HookFailureMode]
1607
1611
  DetailedStatus: Optional[DetailedStatus]
1608
1612
 
@@ -2118,6 +2122,7 @@ class GetTemplateSummaryOutput(TypedDict, total=False):
2118
2122
 
2119
2123
 
2120
2124
  class HookResultSummary(TypedDict, total=False):
2125
+ HookResultId: Optional[HookInvocationId]
2121
2126
  InvocationPoint: Optional[HookInvocationPoint]
2122
2127
  FailureMode: Optional[HookFailureMode]
2123
2128
  TypeName: Optional[HookTypeName]
@@ -2125,6 +2130,11 @@ class HookResultSummary(TypedDict, total=False):
2125
2130
  TypeConfigurationVersionId: Optional[HookTypeConfigurationVersionId]
2126
2131
  Status: Optional[HookStatus]
2127
2132
  HookStatusReason: Optional[HookStatusReason]
2133
+ InvokedAt: Optional[Timestamp]
2134
+ TargetType: Optional[ListHookResultsTargetType]
2135
+ TargetId: Optional[HookResultId]
2136
+ TypeArn: Optional[HookTypeArn]
2137
+ HookExecutionTarget: Optional[HookResultId]
2128
2138
 
2129
2139
 
2130
2140
  HookResultSummaries = List[HookResultSummary]
@@ -2195,8 +2205,10 @@ class ListGeneratedTemplatesOutput(TypedDict, total=False):
2195
2205
 
2196
2206
 
2197
2207
  class ListHookResultsInput(ServiceRequest):
2198
- TargetType: ListHookResultsTargetType
2199
- TargetId: HookResultId
2208
+ TargetType: Optional[ListHookResultsTargetType]
2209
+ TargetId: Optional[HookResultId]
2210
+ TypeArn: Optional[HookTypeArn]
2211
+ Status: Optional[HookStatus]
2200
2212
  NextToken: Optional[NextToken]
2201
2213
 
2202
2214
 
@@ -3456,8 +3468,10 @@ class CloudformationApi:
3456
3468
  def list_hook_results(
3457
3469
  self,
3458
3470
  context: RequestContext,
3459
- target_type: ListHookResultsTargetType,
3460
- target_id: HookResultId,
3471
+ target_type: ListHookResultsTargetType | None = None,
3472
+ target_id: HookResultId | None = None,
3473
+ type_arn: HookTypeArn | None = None,
3474
+ status: HookStatus | None = None,
3461
3475
  next_token: NextToken | None = None,
3462
3476
  **kwargs,
3463
3477
  ) -> ListHookResultsOutput:
@@ -16,7 +16,10 @@ AlarmRule = str
16
16
  AmazonResourceName = str
17
17
  AnomalyDetectorMetricStat = str
18
18
  AnomalyDetectorMetricTimezone = str
19
+ AttributeName = str
20
+ AttributeValue = str
19
21
  AwsQueryErrorMessage = str
22
+ ContributorId = str
20
23
  DashboardArn = str
21
24
  DashboardBody = str
22
25
  DashboardErrorMessage = str
@@ -136,6 +139,8 @@ class HistoryItemType(StrEnum):
136
139
  ConfigurationUpdate = "ConfigurationUpdate"
137
140
  StateUpdate = "StateUpdate"
138
141
  Action = "Action"
142
+ AlarmContributorStateUpdate = "AlarmContributorStateUpdate"
143
+ AlarmContributorAction = "AlarmContributorAction"
139
144
 
140
145
 
141
146
  class MetricStreamOutputFormat(StrEnum):
@@ -213,7 +218,7 @@ class ConcurrentModificationException(ServiceException):
213
218
  class ConflictException(ServiceException):
214
219
  code: str = "ConflictException"
215
220
  sender_fault: bool = False
216
- status_code: int = 400
221
+ status_code: int = 409
217
222
 
218
223
 
219
224
  class DashboardValidationMessage(TypedDict, total=False):
@@ -300,15 +305,28 @@ class ResourceNotFoundException(ServiceException):
300
305
 
301
306
 
302
307
  Timestamp = datetime
308
+ ContributorAttributes = Dict[AttributeName, AttributeValue]
309
+
310
+
311
+ class AlarmContributor(TypedDict, total=False):
312
+ ContributorId: ContributorId
313
+ ContributorAttributes: ContributorAttributes
314
+ StateReason: StateReason
315
+ StateTransitionedTimestamp: Optional[Timestamp]
316
+
317
+
318
+ AlarmContributors = List[AlarmContributor]
303
319
 
304
320
 
305
321
  class AlarmHistoryItem(TypedDict, total=False):
306
322
  AlarmName: Optional[AlarmName]
323
+ AlarmContributorId: Optional[ContributorId]
307
324
  AlarmType: Optional[AlarmType]
308
325
  Timestamp: Optional[Timestamp]
309
326
  HistoryItemType: Optional[HistoryItemType]
310
327
  HistorySummary: Optional[HistorySummary]
311
328
  HistoryData: Optional[HistoryData]
329
+ AlarmContributorAttributes: Optional[ContributorAttributes]
312
330
 
313
331
 
314
332
  AlarmHistoryItems = List[AlarmHistoryItem]
@@ -505,8 +523,19 @@ class DeleteMetricStreamOutput(TypedDict, total=False):
505
523
  pass
506
524
 
507
525
 
526
+ class DescribeAlarmContributorsInput(ServiceRequest):
527
+ AlarmName: AlarmName
528
+ NextToken: Optional[NextToken]
529
+
530
+
531
+ class DescribeAlarmContributorsOutput(TypedDict, total=False):
532
+ AlarmContributors: AlarmContributors
533
+ NextToken: Optional[NextToken]
534
+
535
+
508
536
  class DescribeAlarmHistoryInput(ServiceRequest):
509
537
  AlarmName: Optional[AlarmName]
538
+ AlarmContributorId: Optional[ContributorId]
510
539
  AlarmTypes: Optional[AlarmTypes]
511
540
  HistoryItemType: Optional[HistoryItemType]
512
541
  StartDate: Optional[Timestamp]
@@ -1179,11 +1208,22 @@ class CloudwatchApi:
1179
1208
  ) -> DeleteMetricStreamOutput:
1180
1209
  raise NotImplementedError
1181
1210
 
1211
+ @handler("DescribeAlarmContributors")
1212
+ def describe_alarm_contributors(
1213
+ self,
1214
+ context: RequestContext,
1215
+ alarm_name: AlarmName,
1216
+ next_token: NextToken | None = None,
1217
+ **kwargs,
1218
+ ) -> DescribeAlarmContributorsOutput:
1219
+ raise NotImplementedError
1220
+
1182
1221
  @handler("DescribeAlarmHistory")
1183
1222
  def describe_alarm_history(
1184
1223
  self,
1185
1224
  context: RequestContext,
1186
1225
  alarm_name: AlarmName | None = None,
1226
+ alarm_contributor_id: ContributorId | None = None,
1187
1227
  alarm_types: AlarmTypes | None = None,
1188
1228
  history_item_type: HistoryItemType | None = None,
1189
1229
  start_date: Timestamp | None = None,
@@ -291,12 +291,16 @@ class RemediationExecutionState(StrEnum):
291
291
  IN_PROGRESS = "IN_PROGRESS"
292
292
  SUCCEEDED = "SUCCEEDED"
293
293
  FAILED = "FAILED"
294
+ UNKNOWN = "UNKNOWN"
294
295
 
295
296
 
296
297
  class RemediationExecutionStepState(StrEnum):
297
298
  SUCCEEDED = "SUCCEEDED"
298
299
  PENDING = "PENDING"
299
300
  FAILED = "FAILED"
301
+ IN_PROGRESS = "IN_PROGRESS"
302
+ EXITED = "EXITED"
303
+ UNKNOWN = "UNKNOWN"
300
304
 
301
305
 
302
306
  class RemediationTargetType(StrEnum):
@@ -13,6 +13,7 @@ from botocore.model import OperationModel, ServiceModel
13
13
  from rolo.gateway import RequestContext as RoloRequestContext
14
14
 
15
15
  from localstack.aws.connect import InternalRequestParameters
16
+ from localstack.aws.spec import ProtocolName
16
17
  from localstack.http import Request, Response
17
18
  from localstack.utils.strings import long_uid
18
19
 
@@ -41,7 +42,7 @@ class ServiceException(Exception):
41
42
  message: str
42
43
 
43
44
  def __init__(self, *args: Any, **kwargs: Any):
44
- super(ServiceException, self).__init__(*args)
45
+ super().__init__(*args)
45
46
 
46
47
  if len(args) >= 1:
47
48
  self.message = args[0]
@@ -60,7 +61,7 @@ class CommonServiceException(ServiceException):
60
61
  """
61
62
 
62
63
  def __init__(self, code: str, message: str, status_code: int = 400, sender_fault: bool = False):
63
- super(CommonServiceException, self).__init__(message)
64
+ super().__init__(message)
64
65
  self.code = code
65
66
  self.status_code = status_code
66
67
  self.sender_fault = sender_fault
@@ -88,6 +89,8 @@ class RequestContext(RoloRequestContext):
88
89
  """The underlying incoming HTTP request."""
89
90
  service: ServiceModel | None
90
91
  """The botocore ServiceModel of the service the request is made to."""
92
+ protocol: ProtocolName | None
93
+ """The botocore Protocol for the service the request is made to."""
91
94
  operation: OperationModel | None
92
95
  """The botocore OperationModel of the AWS operation being invoked."""
93
96
  region: str
@@ -112,6 +115,7 @@ class RequestContext(RoloRequestContext):
112
115
  def __init__(self, request: Request):
113
116
  super().__init__(request)
114
117
  self.service = None
118
+ self.protocol = None
115
119
  self.operation = None
116
120
  self.region = None # type: ignore[assignment] # type=str, because we know it will always be set downstream
117
121
  self.partition = "aws" # Sensible default - will be overwritten by region-handler
@@ -8,6 +8,7 @@ ArchivalReason = str
8
8
  AttributeName = str
9
9
  AutoScalingPolicyName = str
10
10
  AutoScalingRoleArn = str
11
+ AvailabilityErrorMessage = str
11
12
  Backfilling = bool
12
13
  BackupArn = str
13
14
  BackupName = str
@@ -61,10 +62,12 @@ PartiQLStatement = str
61
62
  PolicyRevisionId = str
62
63
  PositiveIntegerObject = int
63
64
  ProjectionExpression = str
65
+ Reason = str
64
66
  RecoveryPeriodInDays = int
65
67
  RegionName = str
66
68
  ReplicaStatusDescription = str
67
69
  ReplicaStatusPercentProgress = str
70
+ Resource = str
68
71
  ResourceArnString = str
69
72
  ResourcePolicy = str
70
73
  RestoreInProgress = bool
@@ -169,6 +172,11 @@ class ContributorInsightsAction(StrEnum):
169
172
  DISABLE = "DISABLE"
170
173
 
171
174
 
175
+ class ContributorInsightsMode(StrEnum):
176
+ ACCESSED_AND_THROTTLED_KEYS = "ACCESSED_AND_THROTTLED_KEYS"
177
+ THROTTLED_KEYS = "THROTTLED_KEYS"
178
+
179
+
172
180
  class ContributorInsightsStatus(StrEnum):
173
181
  ENABLING = "ENABLING"
174
182
  ENABLED = "ENABLED"
@@ -509,10 +517,19 @@ class PolicyNotFoundException(ServiceException):
509
517
  status_code: int = 400
510
518
 
511
519
 
520
+ class ThrottlingReason(TypedDict, total=False):
521
+ reason: Optional[Reason]
522
+ resource: Optional[Resource]
523
+
524
+
525
+ ThrottlingReasonList = List[ThrottlingReason]
526
+
527
+
512
528
  class ProvisionedThroughputExceededException(ServiceException):
513
529
  code: str = "ProvisionedThroughputExceededException"
514
530
  sender_fault: bool = False
515
531
  status_code: int = 400
532
+ ThrottlingReasons: Optional[ThrottlingReasonList]
516
533
 
517
534
 
518
535
  class ReplicaAlreadyExistsException(ServiceException):
@@ -537,6 +554,7 @@ class RequestLimitExceeded(ServiceException):
537
554
  code: str = "RequestLimitExceeded"
538
555
  sender_fault: bool = False
539
556
  status_code: int = 400
557
+ ThrottlingReasons: Optional[ThrottlingReasonList]
540
558
 
541
559
 
542
560
  class ResourceInUseException(ServiceException):
@@ -569,6 +587,13 @@ class TableNotFoundException(ServiceException):
569
587
  status_code: int = 400
570
588
 
571
589
 
590
+ class ThrottlingException(ServiceException):
591
+ code: str = "ThrottlingException"
592
+ sender_fault: bool = False
593
+ status_code: int = 400
594
+ throttlingReasons: Optional[ThrottlingReasonList]
595
+
596
+
572
597
  class CancellationReason(TypedDict, total=False):
573
598
  Item: Optional[AttributeMap]
574
599
  Code: Optional[Code]
@@ -981,6 +1006,7 @@ class ContributorInsightsSummary(TypedDict, total=False):
981
1006
  TableName: Optional[TableName]
982
1007
  IndexName: Optional[IndexName]
983
1008
  ContributorInsightsStatus: Optional[ContributorInsightsStatus]
1009
+ ContributorInsightsMode: Optional[ContributorInsightsMode]
984
1010
 
985
1011
 
986
1012
  ContributorInsightsSummaries = List[ContributorInsightsSummary]
@@ -1375,6 +1401,7 @@ class DescribeContributorInsightsOutput(TypedDict, total=False):
1375
1401
  ContributorInsightsStatus: Optional[ContributorInsightsStatus]
1376
1402
  LastUpdateDateTime: Optional[LastUpdateDateTime]
1377
1403
  FailureException: Optional[FailureException]
1404
+ ContributorInsightsMode: Optional[ContributorInsightsMode]
1378
1405
 
1379
1406
 
1380
1407
  class DescribeEndpointsRequest(ServiceRequest):
@@ -2200,12 +2227,14 @@ class UpdateContributorInsightsInput(ServiceRequest):
2200
2227
  TableName: TableArn
2201
2228
  IndexName: Optional[IndexName]
2202
2229
  ContributorInsightsAction: ContributorInsightsAction
2230
+ ContributorInsightsMode: Optional[ContributorInsightsMode]
2203
2231
 
2204
2232
 
2205
2233
  class UpdateContributorInsightsOutput(TypedDict, total=False):
2206
2234
  TableName: Optional[TableName]
2207
2235
  IndexName: Optional[IndexName]
2208
2236
  ContributorInsightsStatus: Optional[ContributorInsightsStatus]
2237
+ ContributorInsightsMode: Optional[ContributorInsightsMode]
2209
2238
 
2210
2239
 
2211
2240
  class UpdateGlobalTableInput(ServiceRequest):
@@ -2858,6 +2887,7 @@ class DynamodbApi:
2858
2887
  table_name: TableArn,
2859
2888
  contributor_insights_action: ContributorInsightsAction,
2860
2889
  index_name: IndexName | None = None,
2890
+ contributor_insights_mode: ContributorInsightsMode | None = None,
2861
2891
  **kwargs,
2862
2892
  ) -> UpdateContributorInsightsOutput:
2863
2893
  raise NotImplementedError