dayhoff-tools 1.4.11__tar.gz → 1.4.13__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 (32) hide show
  1. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/PKG-INFO +1 -1
  2. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/cli/engine_commands.py +46 -17
  3. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/pyproject.toml +1 -1
  4. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/README.md +0 -0
  5. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/__init__.py +0 -0
  6. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/chemistry/standardizer.py +0 -0
  7. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/chemistry/utils.py +0 -0
  8. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/cli/__init__.py +0 -0
  9. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/cli/cloud_commands.py +0 -0
  10. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/cli/main.py +0 -0
  11. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/cli/swarm_commands.py +0 -0
  12. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/cli/utility_commands.py +0 -0
  13. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/deployment/base.py +0 -0
  14. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/deployment/deploy_aws.py +0 -0
  15. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/deployment/deploy_gcp.py +0 -0
  16. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/deployment/deploy_utils.py +0 -0
  17. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/deployment/job_runner.py +0 -0
  18. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/deployment/processors.py +0 -0
  19. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/deployment/swarm.py +0 -0
  20. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/embedders.py +0 -0
  21. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/fasta.py +0 -0
  22. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/file_ops.py +0 -0
  23. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/h5.py +0 -0
  24. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/intake/gcp.py +0 -0
  25. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/intake/gtdb.py +0 -0
  26. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/intake/kegg.py +0 -0
  27. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/intake/mmseqs.py +0 -0
  28. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/intake/structure.py +0 -0
  29. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/intake/uniprot.py +0 -0
  30. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/logs.py +0 -0
  31. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/sqlite.py +0 -0
  32. {dayhoff_tools-1.4.11 → dayhoff_tools-1.4.13}/dayhoff_tools/warehouse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dayhoff-tools
3
- Version: 1.4.11
3
+ Version: 1.4.13
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
@@ -1637,33 +1637,62 @@ def attach_studio(
1637
1637
 
1638
1638
  console.print(f"Attaching studio to engine [cyan]{engine['name']}[/cyan]...")
1639
1639
 
1640
- with Progress(
1641
- SpinnerColumn(),
1642
- TimeElapsedColumn(),
1643
- TextColumn("[progress.description]{task.description}"),
1644
- transient=True,
1645
- ) as prog:
1646
- task = prog.add_task("Attaching studio (engine is still booting)…", total=None)
1647
- ATTEMPT_LIMIT = 40 if engine_started_now else 6 # shorter retries for already-running engines
1648
- RETRY_DELAY = 10
1649
- for attempt in range(ATTEMPT_LIMIT):
1640
+ # Determine retry strategy
1641
+ max_attempts = 40 if engine_started_now else 3
1642
+ retry_delay = 10 if engine_started_now else 3
1643
+
1644
+ if engine_started_now:
1645
+ # Long spinner-based loop while the freshly started engine finishes booting
1646
+ with Progress(
1647
+ SpinnerColumn(),
1648
+ TimeElapsedColumn(),
1649
+ TextColumn("[progress.description]{task.description}"),
1650
+ transient=True,
1651
+ ) as prog:
1652
+ task = prog.add_task("Attaching studio (engine is still booting)…", total=None)
1653
+
1654
+ for attempt in range(max_attempts):
1655
+ success, error_msg = _attempt_studio_attach(studio, engine, target_user, public_key)
1656
+
1657
+ if success:
1658
+ break # success!
1659
+
1660
+ # Update spinner every 3rd try to avoid log spam
1661
+ if attempt % 3 == 0:
1662
+ prog.update(task, description=f"Attaching studio (engine is still booting)… {attempt+1}/{max_attempts}")
1663
+
1664
+ if error_msg:
1665
+ console.print(f"[red]❌ Failed to attach studio: {error_msg}[/red]")
1666
+ return
1667
+
1668
+ time.sleep(retry_delay)
1669
+
1670
+ else:
1671
+ console.print("[yellow]Engine is still starting up – please retry in a minute.[/yellow]")
1672
+ return
1673
+ else:
1674
+ # Give the (already-running) engine a little breathing room – e.g. it may still be mounting EFS
1675
+ max_attempts = 10 # ~1 min total
1676
+ retry_delay = 6
1677
+
1678
+ for attempt in range(max_attempts):
1650
1679
  success, error_msg = _attempt_studio_attach(studio, engine, target_user, public_key)
1651
1680
 
1652
1681
  if success:
1653
- break # success!
1654
-
1655
- # Update spinner description with attempt number
1656
- if attempt % 3 == 0: # update every 3rd attempt to avoid spam
1657
- prog.update(task, description=f"Attaching studio (engine is still booting)… {attempt+1}/{ATTEMPT_LIMIT}")
1682
+ break # attached!
1658
1683
 
1659
1684
  if error_msg:
1685
+ # Fatal – bubble up immediately
1660
1686
  console.print(f"[red]❌ Failed to attach studio: {error_msg}[/red]")
1661
1687
  return
1662
1688
 
1663
- time.sleep(RETRY_DELAY)
1689
+ # Recoverable and still not ready – short wait + optional info
1690
+ if attempt < max_attempts - 1:
1691
+ console.print("[dim]Engine not ready yet – retrying …[/dim]")
1692
+ time.sleep(retry_delay)
1664
1693
 
1665
1694
  else:
1666
- console.print("[yellow]Engine is still starting up – please retry in a minute.[/yellow]")
1695
+ console.print("[yellow]Engine is busy or still initialising – please retry in about a minute.[/yellow]")
1667
1696
  return
1668
1697
 
1669
1698
  # Successful attach path
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
5
5
 
6
6
  [project]
7
7
  name = "dayhoff-tools"
8
- version = "1.4.11"
8
+ version = "1.4.13"
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