basaltic-sdk-python 0.1.1__py3-none-any.whl → 0.3.0__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.
basaltic/_version.py CHANGED
@@ -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",
@@ -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
@@ -2,7 +2,7 @@ basaltic/__init__.py,sha256=_DOarOalYKxGZDb7j-IaOTUOm5qWHhmL90pS8YB32l8,1298
2
2
  basaltic/_client.py,sha256=NS_ke6EWKCn9v1KHV8ffr3hk0vSKT0BPgeh75rhWqcg,4708
3
3
  basaltic/_common.py,sha256=qrI-57XKQc13ZJvafA5gXn9dYp9-jjbVYXhYRUuMK2E,9860
4
4
  basaltic/_transport.py,sha256=cktv1mnEhOkNOOsGT7vvUmvfvZmZdYhvyAyju7NO03Y,8332
5
- basaltic/_version.py,sha256=39YjZLDQqjtA773sy_kaxFOIMylyXQFWF_mUN1e_8b0,51
5
+ basaltic/_version.py,sha256=gB7wyYlVPzpNwiNsFd1XEH74iEFJKXy9MlO6WWp5CQk,51
6
6
  basaltic/auth.py,sha256=ZD5ut4todK42pMEF-ZF2exT6GuFtjn-lGdylH3Z3ySQ,8315
7
7
  basaltic/client.py,sha256=Y09SmqWpJFSYZcT9l1oo3o1qSKetEXJ68RLOklM19CQ,4622
8
8
  basaltic/config.py,sha256=LNnDMqxRaUz59F1F1u7-kGrrexaLhjRt2taE09FbZT0,5464
@@ -14,15 +14,15 @@ basaltic/models/audit.py,sha256=7j-ESdkwu96_R2XbfDCqVmbYS573P4WXloBKn1fHNnQ,2971
14
14
  basaltic/models/billing.py,sha256=ghmfXQqoeeE6C6NbWQo5U6rQhsJ2WuaE7bDFuBve2e4,9851
15
15
  basaltic/models/catalog.py,sha256=zNHZACb-S9_MQuLeAWd-p_jKkRP-OqJ_7ckaEexSSVc,1229
16
16
  basaltic/models/certificate.py,sha256=8Xh0r-fxZKZf_KuGIiykBa7ok7ac0CW2a5s8lEQPlCQ,4480
17
- basaltic/models/compute.py,sha256=KfWYa7vf-9fHdOG-3ZUY-XsyniBcwEvovAoh7aN76G0,32119
17
+ basaltic/models/compute.py,sha256=mtfWAVkCly-E1IMmSMKniv8D-vCujQgTN4gsYOTxmVw,36178
18
18
  basaltic/models/dns.py,sha256=cVojfLVbhGE5_hJHf3eLXEJCbMd8REaQ2x-iBt5rOAc,8732
19
19
  basaltic/models/iam.py,sha256=Xq5lF3MbKhr0F8c-liZgxFBqNWFjWl2PljAUs-2Wx9o,27426
20
20
  basaltic/models/kms.py,sha256=Z7LXqJ110wtxD8OHqotCuqlwzQeGsnb5I4G4gGdB94E,5724
21
- basaltic/models/loadbalancer.py,sha256=EJrpg1ZCBrDGUAxaftEfjQ528M9jHCy0ZT992mlFxx0,20434
21
+ basaltic/models/loadbalancer.py,sha256=zd0LeaujchvCpBL38jQMMYr75c96I6Xe25HFyUG3T80,24368
22
22
  basaltic/models/network.py,sha256=jSZ0Oi20FkZqyAsp86C4o8OOWOW6w_UNYHGvDWR83OM,35702
23
23
  basaltic/models/quota.py,sha256=-PB3pETNQRGOiDb2sxr6eA7nofIf3S_dh8DbON2-aWg,992
24
24
  basaltic/models/secrets.py,sha256=_sL8TMCmRb_0R75b_TeVkdVQhyJOaEZ8VL6K8SlJJnY,4631
25
- basaltic/models/storage.py,sha256=RKl47ITLHG4pNcHtbFEunsKZzIxSu-q8udnfcjt4qLM,28534
25
+ basaltic/models/storage.py,sha256=Xze4xfjpBCT-njDMp0SILDuM-_dNCUWMCieHa1Uy3eY,28999
26
26
  basaltic/models/telemetry.py,sha256=7ZPWrzzyDJcSSWfTkADXtWRK2Mu9g8GeBR11yCtbccM,13953
27
27
  basaltic/models/workspace.py,sha256=wtMC-WLsEV5am3CkPS7WRTRe_Ay_b3VmOWb64pu8YSQ,26694
28
28
  basaltic/services/__init__.py,sha256=euiXNIZh01el-j2wG6Hw29NDfg6hK0BlQXUDaOkod_4,62
@@ -41,7 +41,7 @@ basaltic/services/secrets.py,sha256=W9QOCBIIgnH9g_i46nBDWRtwp3UyE1TBJ0tUWTFp6Ic,
41
41
  basaltic/services/storage.py,sha256=mj2WAPT6ELD5K34Wp2d4SAFZtOlOOvJ1Sf0cist-ezg,95012
42
42
  basaltic/services/telemetry.py,sha256=vPBVOIr_HIVqekDOZeAoxcvcDDEbX6sZXkzPI38Q_Ow,41777
43
43
  basaltic/services/workspace.py,sha256=86x_ymclTzvEXStJ8gFd0S_VCGeYjD2PQ0QkDg4ijW4,123641
44
- basaltic_sdk_python-0.1.1.dist-info/METADATA,sha256=bQ-3AzO3EADqhVNrgSH2jiqd8rd234s-BIC8tltRLzw,9261
45
- basaltic_sdk_python-0.1.1.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
46
- basaltic_sdk_python-0.1.1.dist-info/licenses/LICENSE,sha256=UWjn6PoPejts2Bgdk0SJ6pB3-2l2Bgh7Fr7WENHGSs0,11339
47
- basaltic_sdk_python-0.1.1.dist-info/RECORD,,
44
+ basaltic_sdk_python-0.3.0.dist-info/METADATA,sha256=t1FnJBAezXOFKHzbcQeEoMu6Je3rRhBcGvpbOjXwo00,9261
45
+ basaltic_sdk_python-0.3.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
46
+ basaltic_sdk_python-0.3.0.dist-info/licenses/LICENSE,sha256=UWjn6PoPejts2Bgdk0SJ6pB3-2l2Bgh7Fr7WENHGSs0,11339
47
+ basaltic_sdk_python-0.3.0.dist-info/RECORD,,