dayhoff-tools 1.13.15__tar.gz → 1.13.17__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.
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/PKG-INFO +1 -1
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/api_client.py +1 -3
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/engine-studio-cli.md +1 -5
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/engine_commands.py +19 -18
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/pyproject.toml +1 -1
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/README.md +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/__init__.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/chemistry/standardizer.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/chemistry/utils.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/__init__.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/cloud_commands.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/__init__.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_core.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_lifecycle.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_maintenance.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_management.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/shared.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/studio_commands.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/__init__.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/auth.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/progress.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/cli-simulators.md +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/demo.sh +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/engine_list_simulator.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/engine_status_simulator.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/idle_status_simulator.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/simulator_utils.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/studio_list_simulator.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/studio_status_simulator.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/studio_commands.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/github_commands.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/main.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/swarm_commands.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/utility_commands.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/base.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/deploy_aws.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/deploy_gcp.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/deploy_utils.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/job_runner.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/processors.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/swarm.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/embedders.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/fasta.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/file_ops.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/h5.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/gcp.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/gtdb.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/kegg.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/mmseqs.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/structure.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/uniprot.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/logs.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/sqlite.py +0 -0
- {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/warehouse.py +0 -0
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/api_client.py
RENAMED
|
@@ -194,14 +194,12 @@ class StudioManagerClient:
|
|
|
194
194
|
return self._request("DELETE", f"/engines/{engine_id}/coffee")
|
|
195
195
|
|
|
196
196
|
def update_idle_settings(
|
|
197
|
-
self, engine_id: str, timeout: Optional[str] = None
|
|
197
|
+
self, engine_id: str, timeout: Optional[str] = None
|
|
198
198
|
) -> Dict[str, Any]:
|
|
199
199
|
"""Update idle detector settings."""
|
|
200
200
|
payload = {}
|
|
201
201
|
if timeout:
|
|
202
202
|
payload["timeout"] = timeout
|
|
203
|
-
if slack:
|
|
204
|
-
payload["slack"] = slack
|
|
205
203
|
return self._request(
|
|
206
204
|
"PATCH", f"/engines/{engine_id}/idle-settings", json=payload
|
|
207
205
|
)
|
|
@@ -496,7 +496,6 @@ dh engine2 idle <name-or-id> [options]
|
|
|
496
496
|
|
|
497
497
|
**Options:**
|
|
498
498
|
- `--set <duration>` - Set new timeout (e.g., `2h`, `45m`)
|
|
499
|
-
- `--slack <none|default|all>` - Configure Slack notifications
|
|
500
499
|
- `--env <env>` - Target environment
|
|
501
500
|
|
|
502
501
|
**Examples:**
|
|
@@ -506,9 +505,6 @@ dh engine2 idle my-engine
|
|
|
506
505
|
|
|
507
506
|
# Set 2-hour timeout
|
|
508
507
|
dh engine2 idle my-engine --set 2h
|
|
509
|
-
|
|
510
|
-
# Configure Slack notifications
|
|
511
|
-
dh engine2 idle my-engine --slack all
|
|
512
508
|
```
|
|
513
509
|
|
|
514
510
|
**Output:**
|
|
@@ -1203,7 +1199,7 @@ Use `dh engine2 status --detailed` to see:
|
|
|
1203
1199
|
|
|
1204
1200
|
### Monitoring
|
|
1205
1201
|
- **CloudWatch metrics** for operations
|
|
1206
|
-
- **Slack notifications** (
|
|
1202
|
+
- **Slack notifications** for disk usage warnings (90% full)
|
|
1207
1203
|
- **Progress APIs** for real-time status
|
|
1208
1204
|
- **Detailed logging** for debugging
|
|
1209
1205
|
|
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/engine_commands.py
RENAMED
|
@@ -966,11 +966,6 @@ def coffee(name_or_id: str, duration: Optional[str], cancel: bool, env: Optional
|
|
|
966
966
|
@engine_cli.command("idle")
|
|
967
967
|
@click.argument("name_or_id")
|
|
968
968
|
@click.option("--set", "set_timeout", help="Set new timeout (e.g., '2h30m', '45m')")
|
|
969
|
-
@click.option(
|
|
970
|
-
"--slack",
|
|
971
|
-
type=click.Choice(["none", "default", "all"]),
|
|
972
|
-
help="Set Slack notifications",
|
|
973
|
-
)
|
|
974
969
|
@click.option(
|
|
975
970
|
"--env",
|
|
976
971
|
default=None,
|
|
@@ -979,7 +974,6 @@ def coffee(name_or_id: str, duration: Optional[str], cancel: bool, env: Optional
|
|
|
979
974
|
def idle_timeout_cmd(
|
|
980
975
|
name_or_id: str,
|
|
981
976
|
set_timeout: Optional[str],
|
|
982
|
-
slack: Optional[str],
|
|
983
977
|
env: Optional[str],
|
|
984
978
|
):
|
|
985
979
|
"""Show or configure idle detector settings."""
|
|
@@ -1009,10 +1003,8 @@ def idle_timeout_cmd(
|
|
|
1009
1003
|
raise click.Abort()
|
|
1010
1004
|
|
|
1011
1005
|
# Update if requested
|
|
1012
|
-
if set_timeout
|
|
1013
|
-
result = client.update_idle_settings(
|
|
1014
|
-
engine_id, timeout=set_timeout, slack=slack
|
|
1015
|
-
)
|
|
1006
|
+
if set_timeout:
|
|
1007
|
+
result = client.update_idle_settings(engine_id, timeout=set_timeout)
|
|
1016
1008
|
if "error" in result:
|
|
1017
1009
|
click.echo(f"✗ Error: {result['error']}", err=True)
|
|
1018
1010
|
raise click.Abort()
|
|
@@ -1129,19 +1121,28 @@ def debug_engine(name_or_id: str, env: Optional[str]):
|
|
|
1129
1121
|
click.echo(f"Current Stage: {readiness.get('current_stage', 'unknown')}")
|
|
1130
1122
|
click.echo(f"\nBootstrap Stages:")
|
|
1131
1123
|
|
|
1132
|
-
stages
|
|
1133
|
-
|
|
1134
|
-
|
|
1124
|
+
# Deduplicate stages by name, keeping the latest status for each
|
|
1125
|
+
# (bootstrap reports both "starting" and "completed" for each stage)
|
|
1126
|
+
stages_by_name: dict[str, dict] = {}
|
|
1127
|
+
for stage in readiness.get("stages", []):
|
|
1135
1128
|
name = stage.get("name", "unknown")
|
|
1129
|
+
stages_by_name[name] = stage # Later entries overwrite earlier ones
|
|
1130
|
+
|
|
1131
|
+
for i, (name, stage) in enumerate(stages_by_name.items(), 1):
|
|
1132
|
+
status = stage.get("status", "unknown")
|
|
1136
1133
|
duration = (
|
|
1137
1134
|
stage.get("duration_ms", 0) / 1000 if stage.get("duration_ms") else None
|
|
1138
1135
|
)
|
|
1139
1136
|
|
|
1140
|
-
icon
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1137
|
+
# Map status to icon: completed=✓, starting/in_progress=⏳, failed=✗
|
|
1138
|
+
if status == "completed":
|
|
1139
|
+
icon = "✓"
|
|
1140
|
+
elif status in ("starting", "in_progress"):
|
|
1141
|
+
icon = "⏳"
|
|
1142
|
+
elif status == "failed":
|
|
1143
|
+
icon = "✗"
|
|
1144
|
+
else:
|
|
1145
|
+
icon = "?" # Unknown status
|
|
1145
1146
|
duration_str = f" ({duration:.1f}s)" if duration else ""
|
|
1146
1147
|
|
|
1147
1148
|
click.echo(f" {icon} {i}. {name}{duration_str}")
|
|
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
5
5
|
|
|
6
6
|
[project]
|
|
7
7
|
name = "dayhoff-tools"
|
|
8
|
-
version = "1.13.
|
|
8
|
+
version = "1.13.17"
|
|
9
9
|
description = "Common tools for all the repos at Dayhoff Labs"
|
|
10
10
|
authors = [
|
|
11
11
|
{name = "Daniel Martin-Alarcon", email = "dma@dayhofflabs.com"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_lifecycle.py
RENAMED
|
File without changes
|
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_maintenance.py
RENAMED
|
File without changes
|
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_management.py
RENAMED
|
File without changes
|
|
File without changes
|
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/studio_commands.py
RENAMED
|
File without changes
|
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/progress.py
RENAMED
|
File without changes
|
|
File without changes
|
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/demo.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/studio_commands.py
RENAMED
|
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
|