basaltic-sdk-python 0.1.1__tar.gz → 0.3.0__tar.gz

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 (49) hide show
  1. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/PKG-INFO +1 -1
  2. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/pyproject.toml +1 -1
  3. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/_version.py +1 -1
  4. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/compute.py +108 -0
  5. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/loadbalancer.py +107 -1
  6. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/storage.py +13 -0
  7. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/.gitignore +0 -0
  8. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/LICENSE +0 -0
  9. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/README.md +0 -0
  10. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/SECURITY.md +0 -0
  11. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/__init__.py +0 -0
  12. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/_client.py +0 -0
  13. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/_common.py +0 -0
  14. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/_transport.py +0 -0
  15. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/auth.py +0 -0
  16. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/client.py +0 -0
  17. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/config.py +0 -0
  18. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/errors.py +0 -0
  19. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/__init__.py +0 -0
  20. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/audit.py +0 -0
  21. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/billing.py +0 -0
  22. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/catalog.py +0 -0
  23. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/certificate.py +0 -0
  24. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/dns.py +0 -0
  25. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/iam.py +0 -0
  26. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/kms.py +0 -0
  27. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/network.py +0 -0
  28. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/quota.py +0 -0
  29. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/secrets.py +0 -0
  30. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/telemetry.py +0 -0
  31. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/models/workspace.py +0 -0
  32. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/py.typed +0 -0
  33. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/response.py +0 -0
  34. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/__init__.py +0 -0
  35. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/audit.py +0 -0
  36. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/billing.py +0 -0
  37. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/catalog.py +0 -0
  38. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/certificate.py +0 -0
  39. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/compute.py +0 -0
  40. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/dns.py +0 -0
  41. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/iam.py +0 -0
  42. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/kms.py +0 -0
  43. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/loadbalancer.py +0 -0
  44. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/network.py +0 -0
  45. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/quota.py +0 -0
  46. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/secrets.py +0 -0
  47. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/storage.py +0 -0
  48. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/telemetry.py +0 -0
  49. {basaltic_sdk_python-0.1.1 → basaltic_sdk_python-0.3.0}/src/basaltic/services/workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: basaltic-sdk-python
3
- Version: 0.1.1
3
+ Version: 0.3.0
4
4
  Summary: Official typed synchronous and asynchronous Python SDK for Basaltic
5
5
  Project-URL: Homepage, https://basaltic.sh
6
6
  Project-URL: Documentation, https://docs.basaltic.sh
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "basaltic-sdk-python"
7
- version = "0.1.1"
7
+ version = "0.3.0"
8
8
  description = "Official typed synchronous and asynchronous Python SDK for Basaltic"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,3 +1,3 @@
1
1
  """Basaltic SDK version."""
2
2
 
3
- __version__ = "0.1.1"
3
+ __version__ = "0.3.0"
@@ -342,6 +342,9 @@ Flavor = TypedDict(
342
342
  "ram_mb": "NotRequired[int]",
343
343
  "class": "NotRequired[Literal['shared', 'dedicated']]",
344
344
  "family": "NotRequired[Literal['general', 'loadbalancer', 'database']]",
345
+ "net_mbps": "NotRequired[int]",
346
+ "cpu_baseline_pct": "NotRequired[int]",
347
+ "cpu_burst_pct": "NotRequired[int]",
345
348
  "status": "NotRequired[Literal['active', 'disabled']]",
346
349
  "created_at": "NotRequired[str]",
347
350
  "updated_at": "NotRequired[str]",
@@ -359,6 +362,7 @@ CreateInstanceResponse: TypeAlias = "CreateInstanceResult"
359
362
  InstancePoolCreateRequestInput = TypedDict(
360
363
  "InstancePoolCreateRequestInput",
361
364
  {
365
+ "autoscaling": "NotRequired[AutoscalingPolicyInput]",
362
366
  "name": "Required[str]",
363
367
  "description": "NotRequired[str]",
364
368
  "tags": "NotRequired[TagsInput]",
@@ -369,6 +373,36 @@ InstancePoolCreateRequestInput = TypedDict(
369
373
  },
370
374
  total=False,
371
375
  )
376
+ AutoscalingPolicyInput = TypedDict(
377
+ "AutoscalingPolicyInput",
378
+ {
379
+ "enabled": "Required[bool]",
380
+ "metrics": "Required[list[ScalingMetricInput]]",
381
+ "warmup_seconds": "NotRequired[int]",
382
+ "cooldown_seconds": "NotRequired[int]",
383
+ "scale_down_stabilization_seconds": "NotRequired[int]",
384
+ "max_scale_out_step": "NotRequired[int]",
385
+ "max_scale_in_step": "NotRequired[int]",
386
+ "drain_seconds": "NotRequired[int]",
387
+ },
388
+ total=False,
389
+ )
390
+ ScalingMetricInput = TypedDict(
391
+ "ScalingMetricInput",
392
+ {
393
+ "source": "Required[Literal['cpu', 'telemetry']]",
394
+ "target_type": "Required[Literal['utilization', 'average_value']]",
395
+ "target_value": "Required[float]",
396
+ "name": "NotRequired[str]",
397
+ "labels": "NotRequired[dict[str, str]]",
398
+ "sample_aggregation": "NotRequired[Literal['last', 'avg', 'max', 'rate']]",
399
+ "series_aggregation": "NotRequired[Literal['sum', 'avg', 'max']]",
400
+ "expected_series": "NotRequired[int]",
401
+ "window_seconds": "NotRequired[int]",
402
+ "max_age_seconds": "NotRequired[int]",
403
+ },
404
+ total=False,
405
+ )
372
406
  InstancePoolTemplateRequestInput = TypedDict(
373
407
  "InstancePoolTemplateRequestInput",
374
408
  {
@@ -390,6 +424,7 @@ InstanceVolumeInput = TypedDict(
390
424
  "boot": "NotRequired[bool]",
391
425
  "size_gb": "Required[int]",
392
426
  "volume_type": "NotRequired[str]",
427
+ "performance": "NotRequired[VolumePerformanceRequestInput]",
393
428
  "mount_path": "NotRequired[str]",
394
429
  "fstype": "NotRequired[str]",
395
430
  "delete_on_termination": "NotRequired[bool]",
@@ -403,6 +438,10 @@ InstancePoolResponse = TypedDict(
403
438
  InstancePool = TypedDict(
404
439
  "InstancePool",
405
440
  {
441
+ "autoscaling": "NotRequired[AutoscalingPolicy]",
442
+ "autoscaling_status": "NotRequired[AutoscalingStatus]",
443
+ "rollout_surge": "NotRequired[bool]",
444
+ "retiring_instances": "NotRequired[list[RetiringPoolMember]]",
406
445
  "id": "NotRequired[str]",
407
446
  "crn": "NotRequired[str]",
408
447
  "name": "NotRequired[str]",
@@ -422,6 +461,68 @@ InstancePool = TypedDict(
422
461
  },
423
462
  total=False,
424
463
  )
464
+ AutoscalingPolicy = TypedDict(
465
+ "AutoscalingPolicy",
466
+ {
467
+ "enabled": "Required[bool]",
468
+ "metrics": "Required[list[ScalingMetric]]",
469
+ "warmup_seconds": "NotRequired[int]",
470
+ "cooldown_seconds": "NotRequired[int]",
471
+ "scale_down_stabilization_seconds": "NotRequired[int]",
472
+ "max_scale_out_step": "NotRequired[int]",
473
+ "max_scale_in_step": "NotRequired[int]",
474
+ "drain_seconds": "NotRequired[int]",
475
+ },
476
+ total=False,
477
+ )
478
+ ScalingMetric = TypedDict(
479
+ "ScalingMetric",
480
+ {
481
+ "source": "Required[Literal['cpu', 'telemetry']]",
482
+ "target_type": "Required[Literal['utilization', 'average_value']]",
483
+ "target_value": "Required[float]",
484
+ "name": "NotRequired[str]",
485
+ "labels": "NotRequired[dict[str, str]]",
486
+ "sample_aggregation": "NotRequired[Literal['last', 'avg', 'max', 'rate']]",
487
+ "series_aggregation": "NotRequired[Literal['sum', 'avg', 'max']]",
488
+ "expected_series": "NotRequired[int]",
489
+ "window_seconds": "NotRequired[int]",
490
+ "max_age_seconds": "NotRequired[int]",
491
+ },
492
+ total=False,
493
+ )
494
+ AutoscalingStatus = TypedDict(
495
+ "AutoscalingStatus",
496
+ {
497
+ "status": "Required[Literal['pending', 'disabled', 'stable', 'scaling', 'waiting', 'warming_up', 'metrics_unavailable', 'stabilizing', 'cooldown', 'draining']]",
498
+ "reason": "Required[str]",
499
+ "evaluated_at": "NotRequired[str]",
500
+ "last_scaled_at": "NotRequired[str]",
501
+ "history": "Required[list[AutoscalingStatusHistoryItem]]",
502
+ },
503
+ total=False,
504
+ )
505
+ AutoscalingStatusHistoryItem = TypedDict(
506
+ "AutoscalingStatusHistoryItem",
507
+ {
508
+ "at": "Required[str]",
509
+ "from": "Required[int]",
510
+ "to": "Required[int]",
511
+ "reason": "Required[str]",
512
+ },
513
+ total=False,
514
+ )
515
+ RetiringPoolMember = TypedDict(
516
+ "RetiringPoolMember",
517
+ {
518
+ "requested_at": "Required[str]",
519
+ "drain_seconds": "Required[int]",
520
+ "agent_acknowledged_at": "NotRequired[str]",
521
+ "drain_until": "NotRequired[str]",
522
+ "instance_id": "Required[str]",
523
+ },
524
+ total=False,
525
+ )
425
526
  InstancePoolTemplate = TypedDict(
426
527
  "InstancePoolTemplate",
427
528
  {
@@ -498,12 +599,18 @@ InstanceVolume = TypedDict(
498
599
  "boot": "NotRequired[bool]",
499
600
  "size_gb": "Required[int]",
500
601
  "volume_type": "NotRequired[str]",
602
+ "performance": "NotRequired[VolumePerformanceRequest]",
501
603
  "mount_path": "NotRequired[str]",
502
604
  "fstype": "NotRequired[str]",
503
605
  "delete_on_termination": "NotRequired[bool]",
504
606
  },
505
607
  total=False,
506
608
  )
609
+ VolumePerformanceRequest = TypedDict(
610
+ "VolumePerformanceRequest",
611
+ {"iops": "NotRequired[int]", "throughput_mib_s": "NotRequired[float]"},
612
+ total=False,
613
+ )
507
614
  CreateInstancePoolResponse: TypeAlias = "InstancePoolResponse"
508
615
  SerialConsoleTicket = TypedDict(
509
616
  "SerialConsoleTicket",
@@ -886,6 +993,7 @@ UpdateInstanceResponse: TypeAlias = "UpdateInstanceResult"
886
993
  InstancePoolUpdateRequestInput = TypedDict(
887
994
  "InstancePoolUpdateRequestInput",
888
995
  {
996
+ "autoscaling": "NotRequired[AutoscalingPolicyInput]",
889
997
  "description": "NotRequired[str]",
890
998
  "tags": "NotRequired[TagsInput]",
891
999
  "desired_count": "NotRequired[int]",
@@ -82,6 +82,10 @@ CreateListenerResponse: TypeAlias = "ListenerResponse"
82
82
  CreateLoadBalancerRequestInput = TypedDict(
83
83
  "CreateLoadBalancerRequestInput",
84
84
  {
85
+ "desired_count": "NotRequired[int]",
86
+ "min_count": "NotRequired[int]",
87
+ "max_count": "NotRequired[int]",
88
+ "autoscaling": "NotRequired[AutoscalingPolicyInput]",
85
89
  "name": "Required[str]",
86
90
  "type": "Required[Literal['application', 'network']]",
87
91
  "vpc": "Required[str]",
@@ -95,6 +99,36 @@ CreateLoadBalancerRequestInput = TypedDict(
95
99
  },
96
100
  total=False,
97
101
  )
102
+ AutoscalingPolicyInput = TypedDict(
103
+ "AutoscalingPolicyInput",
104
+ {
105
+ "enabled": "Required[bool]",
106
+ "metrics": "Required[list[ScalingMetricInput]]",
107
+ "warmup_seconds": "NotRequired[int]",
108
+ "cooldown_seconds": "NotRequired[int]",
109
+ "scale_down_stabilization_seconds": "NotRequired[int]",
110
+ "max_scale_out_step": "NotRequired[int]",
111
+ "max_scale_in_step": "NotRequired[int]",
112
+ "drain_seconds": "NotRequired[int]",
113
+ },
114
+ total=False,
115
+ )
116
+ ScalingMetricInput = TypedDict(
117
+ "ScalingMetricInput",
118
+ {
119
+ "source": "Required[Literal['cpu', 'telemetry']]",
120
+ "target_type": "Required[Literal['utilization', 'average_value']]",
121
+ "target_value": "Required[float]",
122
+ "name": "NotRequired[str]",
123
+ "labels": "NotRequired[dict[str, str]]",
124
+ "sample_aggregation": "NotRequired[Literal['last', 'avg', 'max', 'rate']]",
125
+ "series_aggregation": "NotRequired[Literal['sum', 'avg', 'max']]",
126
+ "expected_series": "NotRequired[int]",
127
+ "window_seconds": "NotRequired[int]",
128
+ "max_age_seconds": "NotRequired[int]",
129
+ },
130
+ total=False,
131
+ )
98
132
  CreateLoadBalancerBody: TypeAlias = "CreateLoadBalancerRequestInput"
99
133
  LoadBalancerResponse = TypedDict(
100
134
  "LoadBalancerResponse", {"load_balancer": "NotRequired[LoadBalancer]"}, total=False
@@ -102,6 +136,12 @@ LoadBalancerResponse = TypedDict(
102
136
  LoadBalancer = TypedDict(
103
137
  "LoadBalancer",
104
138
  {
139
+ "rollout_surge": "NotRequired[bool]",
140
+ "desired_count": "Required[int]",
141
+ "min_count": "Required[int]",
142
+ "max_count": "Required[int]",
143
+ "autoscaling": "NotRequired[AutoscalingPolicy]",
144
+ "autoscaling_status": "NotRequired[AutoscalingStatus]",
105
145
  "id": "Required[str]",
106
146
  "crn": "Required[str]",
107
147
  "account_id": "Required[str]",
@@ -124,6 +164,57 @@ LoadBalancer = TypedDict(
124
164
  },
125
165
  total=False,
126
166
  )
167
+ AutoscalingPolicy = TypedDict(
168
+ "AutoscalingPolicy",
169
+ {
170
+ "enabled": "Required[bool]",
171
+ "metrics": "Required[list[ScalingMetric]]",
172
+ "warmup_seconds": "NotRequired[int]",
173
+ "cooldown_seconds": "NotRequired[int]",
174
+ "scale_down_stabilization_seconds": "NotRequired[int]",
175
+ "max_scale_out_step": "NotRequired[int]",
176
+ "max_scale_in_step": "NotRequired[int]",
177
+ "drain_seconds": "NotRequired[int]",
178
+ },
179
+ total=False,
180
+ )
181
+ ScalingMetric = TypedDict(
182
+ "ScalingMetric",
183
+ {
184
+ "source": "Required[Literal['cpu', 'telemetry']]",
185
+ "target_type": "Required[Literal['utilization', 'average_value']]",
186
+ "target_value": "Required[float]",
187
+ "name": "NotRequired[str]",
188
+ "labels": "NotRequired[dict[str, str]]",
189
+ "sample_aggregation": "NotRequired[Literal['last', 'avg', 'max', 'rate']]",
190
+ "series_aggregation": "NotRequired[Literal['sum', 'avg', 'max']]",
191
+ "expected_series": "NotRequired[int]",
192
+ "window_seconds": "NotRequired[int]",
193
+ "max_age_seconds": "NotRequired[int]",
194
+ },
195
+ total=False,
196
+ )
197
+ AutoscalingStatus = TypedDict(
198
+ "AutoscalingStatus",
199
+ {
200
+ "status": "Required[Literal['pending', 'disabled', 'stable', 'scaling', 'waiting', 'warming_up', 'metrics_unavailable', 'stabilizing', 'cooldown', 'draining']]",
201
+ "reason": "Required[str]",
202
+ "evaluated_at": "NotRequired[str]",
203
+ "last_scaled_at": "NotRequired[str]",
204
+ "history": "Required[list[AutoscalingStatusHistoryItem]]",
205
+ },
206
+ total=False,
207
+ )
208
+ AutoscalingStatusHistoryItem = TypedDict(
209
+ "AutoscalingStatusHistoryItem",
210
+ {
211
+ "at": "Required[str]",
212
+ "from": "Required[int]",
213
+ "to": "Required[int]",
214
+ "reason": "Required[str]",
215
+ },
216
+ total=False,
217
+ )
127
218
  Fault = TypedDict(
128
219
  "Fault",
129
220
  {
@@ -426,17 +517,28 @@ LoadBalancerReplicasResponse = TypedDict(
426
517
  LoadBalancerReplica = TypedDict(
427
518
  "LoadBalancerReplica",
428
519
  {
520
+ "retirement": "NotRequired[Retirement]",
429
521
  "instance_id": "Required[str]",
430
522
  "replica_index": "Required[int]",
431
523
  "created_at": "Required[str]",
432
524
  "flavor_id": "Required[str]",
433
- "status": "Required[Literal['initializing', 'healthy', 'unhealthy']]",
525
+ "status": "Required[Literal['initializing', 'healthy', 'unhealthy', 'draining']]",
434
526
  "proxy_ok": "Required[bool]",
435
527
  "agent_version": "NotRequired[str]",
436
528
  "last_seen": "NotRequired[str]",
437
529
  },
438
530
  total=False,
439
531
  )
532
+ Retirement = TypedDict(
533
+ "Retirement",
534
+ {
535
+ "requested_at": "Required[str]",
536
+ "drain_seconds": "Required[int]",
537
+ "agent_acknowledged_at": "NotRequired[str]",
538
+ "drain_until": "NotRequired[str]",
539
+ },
540
+ total=False,
541
+ )
440
542
  ListLoadBalancerReplicasResponse: TypeAlias = "LoadBalancerReplicasResponse"
441
543
  ListLoadBalancerReplicasItem: TypeAlias = "LoadBalancerReplica"
442
544
  ListLoadBalancersParameters = TypedDict(
@@ -519,6 +621,10 @@ UpdateListenerResponse: TypeAlias = "ListenerResponse"
519
621
  UpdateLoadBalancerRequestInput = TypedDict(
520
622
  "UpdateLoadBalancerRequestInput",
521
623
  {
624
+ "desired_count": "NotRequired[int]",
625
+ "min_count": "NotRequired[int]",
626
+ "max_count": "NotRequired[int]",
627
+ "autoscaling": "NotRequired[AutoscalingPolicyInput]",
522
628
  "replica_count": "NotRequired[int]",
523
629
  "flavor": "NotRequired[str]",
524
630
  "tags": "NotRequired[TagsInput]",
@@ -74,6 +74,8 @@ Snapshot = TypedDict(
74
74
  "description": "NotRequired[str]",
75
75
  "tags": "NotRequired[Tags]",
76
76
  "size_gb": "NotRequired[int]",
77
+ "logical_size_bytes": "NotRequired[int]",
78
+ "snapshot_usage": "NotRequired[SnapshotUsage]",
77
79
  "status": "NotRequired[SnapshotStatus]",
78
80
  "faults": "Required[list[Fault]]",
79
81
  "created_at": "NotRequired[str]",
@@ -82,6 +84,17 @@ Snapshot = TypedDict(
82
84
  total=False,
83
85
  )
84
86
  Tags: TypeAlias = "dict[str, str]"
87
+ SnapshotUsage = TypedDict(
88
+ "SnapshotUsage",
89
+ {
90
+ "state": "Required[Literal['unknown', 'stale', 'measured']]",
91
+ "scope": "Required[Literal['volume_lineage']]",
92
+ "billable": "Required[Literal[False]]",
93
+ "measured_at": "Required[str | None]",
94
+ "lineage_retained_bytes": "Required[int | None]",
95
+ },
96
+ total=False,
97
+ )
85
98
  SnapshotStatus: TypeAlias = "Literal['creating', 'available', 'deleting', 'error']"
86
99
  Fault = TypedDict(
87
100
  "Fault",