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.
Files changed (54) hide show
  1. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/PKG-INFO +1 -1
  2. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/api_client.py +1 -3
  3. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/engine-studio-cli.md +1 -5
  4. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/engine_commands.py +19 -18
  5. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/pyproject.toml +1 -1
  6. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/README.md +0 -0
  7. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/__init__.py +0 -0
  8. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/chemistry/standardizer.py +0 -0
  9. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/chemistry/utils.py +0 -0
  10. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/__init__.py +0 -0
  11. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/cloud_commands.py +0 -0
  12. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/__init__.py +0 -0
  13. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_core.py +0 -0
  14. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_lifecycle.py +0 -0
  15. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_maintenance.py +0 -0
  16. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/engine_management.py +0 -0
  17. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/shared.py +0 -0
  18. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engine1/studio_commands.py +0 -0
  19. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/__init__.py +0 -0
  20. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/auth.py +0 -0
  21. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/progress.py +0 -0
  22. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/cli-simulators.md +0 -0
  23. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/demo.sh +0 -0
  24. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/engine_list_simulator.py +0 -0
  25. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/engine_status_simulator.py +0 -0
  26. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/idle_status_simulator.py +0 -0
  27. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/simulator_utils.py +0 -0
  28. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/studio_list_simulator.py +0 -0
  29. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/simulators/studio_status_simulator.py +0 -0
  30. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/engines_studios/studio_commands.py +0 -0
  31. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/github_commands.py +0 -0
  32. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/main.py +0 -0
  33. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/swarm_commands.py +0 -0
  34. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/cli/utility_commands.py +0 -0
  35. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/base.py +0 -0
  36. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/deploy_aws.py +0 -0
  37. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/deploy_gcp.py +0 -0
  38. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/deploy_utils.py +0 -0
  39. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/job_runner.py +0 -0
  40. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/processors.py +0 -0
  41. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/deployment/swarm.py +0 -0
  42. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/embedders.py +0 -0
  43. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/fasta.py +0 -0
  44. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/file_ops.py +0 -0
  45. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/h5.py +0 -0
  46. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/gcp.py +0 -0
  47. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/gtdb.py +0 -0
  48. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/kegg.py +0 -0
  49. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/mmseqs.py +0 -0
  50. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/structure.py +0 -0
  51. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/intake/uniprot.py +0 -0
  52. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/logs.py +0 -0
  53. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/sqlite.py +0 -0
  54. {dayhoff_tools-1.13.15 → dayhoff_tools-1.13.17}/dayhoff_tools/warehouse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dayhoff-tools
3
- Version: 1.13.15
3
+ Version: 1.13.17
4
4
  Summary: Common tools for all the repos at Dayhoff Labs
5
5
  Author: Daniel Martin-Alarcon
6
6
  Author-email: dma@dayhofflabs.com
@@ -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, slack: 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** (configurable per engine)
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
 
@@ -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 or slack:
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 = readiness.get("stages", [])
1133
- for i, stage in enumerate(stages, 1):
1134
- status = stage.get("status", "unknown")
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
- if status == "completed"
1143
- else "⏳" if status == "in_progress" else ""
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.15"
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"}