dh-cli 0.2.2__tar.gz → 0.2.3__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.
- {dh_cli-0.2.2 → dh_cli-0.2.3}/PKG-INFO +1 -1
- {dh_cli-0.2.2 → dh_cli-0.2.3}/pyproject.toml +1 -1
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/engines_studios/engine_commands.py +23 -2
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/engines_studios/studio_commands.py +24 -4
- {dh_cli-0.2.2 → dh_cli-0.2.3}/.gitignore +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/LICENSE +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/README.md +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/__init__.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/__init__.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/aws_batch.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/__init__.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/boltz.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/cancel.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/clean.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/embed_t5.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/finalize.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/list_jobs.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/local.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/logs.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/retry.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/status.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/submit.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/train.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/commands/wait_for.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/fasta_utils.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/h5_utils.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/job_id.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/manifest.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/batch/s3_transport.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/cloud_commands.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/codeartifact.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/engines_studios/__init__.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/engines_studios/api_client.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/engines_studios/auth.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/engines_studios/progress.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/engines_studios/ssh_config.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/github_commands.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/main.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/utility_commands.py +0 -0
- {dh_cli-0.2.2 → dh_cli-0.2.3}/src/dh_cli/warehouse.py +0 -0
|
@@ -616,6 +616,7 @@ def list_engines(env: Optional[str]):
|
|
|
616
616
|
state_width = 12
|
|
617
617
|
user_width = 12
|
|
618
618
|
type_width = 12
|
|
619
|
+
disk_width = 14
|
|
619
620
|
id_width = 20
|
|
620
621
|
|
|
621
622
|
# Table top border
|
|
@@ -629,13 +630,15 @@ def list_engines(env: Optional[str]):
|
|
|
629
630
|
+ "┬"
|
|
630
631
|
+ "─" * (type_width + 1)
|
|
631
632
|
+ "┬"
|
|
633
|
+
+ "─" * (disk_width + 1)
|
|
634
|
+
+ "┬"
|
|
632
635
|
+ "─" * (id_width + 1)
|
|
633
636
|
+ "╮"
|
|
634
637
|
)
|
|
635
638
|
|
|
636
639
|
# Table header
|
|
637
640
|
click.echo(
|
|
638
|
-
f"│ {'Name':<{name_width}}│ {'State':<{state_width}}│ {'User':<{user_width}}│ {'Type':<{type_width}}│ {'Instance ID':<{id_width}}│"
|
|
641
|
+
f"│ {'Name':<{name_width}}│ {'State':<{state_width}}│ {'User':<{user_width}}│ {'Type':<{type_width}}│ {'Disk':>{disk_width}}│ {'Instance ID':<{id_width}}│"
|
|
639
642
|
)
|
|
640
643
|
|
|
641
644
|
# Header separator
|
|
@@ -649,6 +652,8 @@ def list_engines(env: Optional[str]):
|
|
|
649
652
|
+ "┼"
|
|
650
653
|
+ "─" * (type_width + 1)
|
|
651
654
|
+ "┼"
|
|
655
|
+
+ "─" * (disk_width + 1)
|
|
656
|
+
+ "┼"
|
|
652
657
|
+ "─" * (id_width + 1)
|
|
653
658
|
+ "┤"
|
|
654
659
|
)
|
|
@@ -685,8 +690,22 @@ def list_engines(env: Optional[str]):
|
|
|
685
690
|
# Color the instance ID (grey)
|
|
686
691
|
instance_id_display = f"\033[90m{instance_id:<{id_width}}\033[0m"
|
|
687
692
|
|
|
693
|
+
# Color the disk usage
|
|
694
|
+
usage_pct = engine.get("boot_disk_usage_pct")
|
|
695
|
+
total_gb = engine.get("boot_disk_total_gb")
|
|
696
|
+
if usage_pct is not None and total_gb is not None:
|
|
697
|
+
disk_text = f"{usage_pct}% of {total_gb}G"
|
|
698
|
+
if usage_pct >= 90:
|
|
699
|
+
disk_display = f"\033[31m{disk_text:>{disk_width}}\033[0m"
|
|
700
|
+
elif usage_pct >= 70:
|
|
701
|
+
disk_display = f"\033[33m{disk_text:>{disk_width}}\033[0m"
|
|
702
|
+
else:
|
|
703
|
+
disk_display = f"\033[32m{disk_text:>{disk_width}}\033[0m"
|
|
704
|
+
else:
|
|
705
|
+
disk_display = f"\033[90m{'-':>{disk_width}}\033[0m"
|
|
706
|
+
|
|
688
707
|
click.echo(
|
|
689
|
-
f"│ {name_display}│ {state_display}│ {user:<{user_width}}│ {engine_type:<{type_width}}│ {instance_id_display}│"
|
|
708
|
+
f"│ {name_display}│ {state_display}│ {user:<{user_width}}│ {engine_type:<{type_width}}│ {disk_display}│ {instance_id_display}│"
|
|
690
709
|
)
|
|
691
710
|
|
|
692
711
|
# Table bottom border
|
|
@@ -700,6 +719,8 @@ def list_engines(env: Optional[str]):
|
|
|
700
719
|
+ "┴"
|
|
701
720
|
+ "─" * (type_width + 1)
|
|
702
721
|
+ "┴"
|
|
722
|
+
+ "─" * (disk_width + 1)
|
|
723
|
+
+ "┴"
|
|
703
724
|
+ "─" * (id_width + 1)
|
|
704
725
|
+ "╯"
|
|
705
726
|
)
|
|
@@ -299,9 +299,10 @@ def list_studios(env: Optional[str]):
|
|
|
299
299
|
max_attached_len + 2, len("Attached To") + 2, 3
|
|
300
300
|
) # At least 3 for "-"
|
|
301
301
|
|
|
302
|
-
# Fixed widths for other columns - reordered to [User, Status, Attached To, Size, Studio ID]
|
|
302
|
+
# Fixed widths for other columns - reordered to [User, Status, Attached To, Size, Usage, Studio ID]
|
|
303
303
|
status_width = 12
|
|
304
304
|
size_width = 10
|
|
305
|
+
usage_width = 8
|
|
305
306
|
id_width = 25
|
|
306
307
|
|
|
307
308
|
# Table top border
|
|
@@ -315,13 +316,15 @@ def list_studios(env: Optional[str]):
|
|
|
315
316
|
+ "┬"
|
|
316
317
|
+ "─" * (size_width + 1)
|
|
317
318
|
+ "┬"
|
|
319
|
+
+ "─" * (usage_width + 1)
|
|
320
|
+
+ "┬"
|
|
318
321
|
+ "─" * (id_width + 1)
|
|
319
322
|
+ "╮"
|
|
320
323
|
)
|
|
321
324
|
|
|
322
|
-
# Table header - reordered to [User, Status, Attached To, Size, Studio ID]
|
|
325
|
+
# Table header - reordered to [User, Status, Attached To, Size, Usage, Studio ID]
|
|
323
326
|
click.echo(
|
|
324
|
-
f"│ {'User':<{user_width}}│ {'Status':<{status_width}}│ {'Attached To':<{attached_width}}│ {'Size':<{size_width}}│ {'Studio ID':<{id_width}}│"
|
|
327
|
+
f"│ {'User':<{user_width}}│ {'Status':<{status_width}}│ {'Attached To':<{attached_width}}│ {'Size':<{size_width}}│ {'Usage':>{usage_width}}│ {'Studio ID':<{id_width}}│"
|
|
325
328
|
)
|
|
326
329
|
|
|
327
330
|
# Header separator
|
|
@@ -335,6 +338,8 @@ def list_studios(env: Optional[str]):
|
|
|
335
338
|
+ "┼"
|
|
336
339
|
+ "─" * (size_width + 1)
|
|
337
340
|
+ "┼"
|
|
341
|
+
+ "─" * (usage_width + 1)
|
|
342
|
+
+ "┼"
|
|
338
343
|
+ "─" * (id_width + 1)
|
|
339
344
|
+ "┤"
|
|
340
345
|
)
|
|
@@ -387,8 +392,21 @@ def list_studios(env: Optional[str]):
|
|
|
387
392
|
# Color the studio ID (grey)
|
|
388
393
|
studio_id_display = f"\033[90m{studio_id:<{id_width}}\033[0m"
|
|
389
394
|
|
|
395
|
+
# Format usage percentage
|
|
396
|
+
usage_pct = studio.get("usage_pct")
|
|
397
|
+
if usage_pct is not None:
|
|
398
|
+
usage_text = f"{usage_pct}%"
|
|
399
|
+
if usage_pct >= 90:
|
|
400
|
+
usage_display = f"\033[31m{usage_text:>{usage_width}}\033[0m"
|
|
401
|
+
elif usage_pct >= 70:
|
|
402
|
+
usage_display = f"\033[33m{usage_text:>{usage_width}}\033[0m"
|
|
403
|
+
else:
|
|
404
|
+
usage_display = f"\033[32m{usage_text:>{usage_width}}\033[0m"
|
|
405
|
+
else:
|
|
406
|
+
usage_display = f"\033[90m{'-':>{usage_width}}\033[0m"
|
|
407
|
+
|
|
390
408
|
click.echo(
|
|
391
|
-
f"│ {user_display}│ {status_display}│ {attached_display}│ {size:<{size_width}}│ {studio_id_display}│"
|
|
409
|
+
f"│ {user_display}│ {status_display}│ {attached_display}│ {size:<{size_width}}│ {usage_display}│ {studio_id_display}│"
|
|
392
410
|
)
|
|
393
411
|
|
|
394
412
|
# Table bottom border
|
|
@@ -402,6 +420,8 @@ def list_studios(env: Optional[str]):
|
|
|
402
420
|
+ "┴"
|
|
403
421
|
+ "─" * (size_width + 1)
|
|
404
422
|
+ "┴"
|
|
423
|
+
+ "─" * (usage_width + 1)
|
|
424
|
+
+ "┴"
|
|
405
425
|
+ "─" * (id_width + 1)
|
|
406
426
|
+ "╯"
|
|
407
427
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|