dayhoff-tools 1.6.2__tar.gz → 1.6.4__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.

Potentially problematic release.


This version of dayhoff-tools might be problematic. Click here for more details.

Files changed (32) hide show
  1. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/PKG-INFO +1 -1
  2. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/cli/engine_commands.py +36 -0
  3. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/pyproject.toml +1 -1
  4. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/README.md +0 -0
  5. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/__init__.py +0 -0
  6. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/chemistry/standardizer.py +0 -0
  7. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/chemistry/utils.py +0 -0
  8. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/cli/__init__.py +0 -0
  9. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/cli/cloud_commands.py +0 -0
  10. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/cli/main.py +0 -0
  11. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/cli/swarm_commands.py +0 -0
  12. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/cli/utility_commands.py +0 -0
  13. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/deployment/base.py +0 -0
  14. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/deployment/deploy_aws.py +0 -0
  15. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/deployment/deploy_gcp.py +0 -0
  16. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/deployment/deploy_utils.py +0 -0
  17. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/deployment/job_runner.py +0 -0
  18. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/deployment/processors.py +0 -0
  19. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/deployment/swarm.py +0 -0
  20. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/embedders.py +0 -0
  21. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/fasta.py +0 -0
  22. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/file_ops.py +0 -0
  23. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/h5.py +0 -0
  24. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/intake/gcp.py +0 -0
  25. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/intake/gtdb.py +0 -0
  26. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/intake/kegg.py +0 -0
  27. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/intake/mmseqs.py +0 -0
  28. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/intake/structure.py +0 -0
  29. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/intake/uniprot.py +0 -0
  30. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/logs.py +0 -0
  31. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/sqlite.py +0 -0
  32. {dayhoff_tools-1.6.2 → dayhoff_tools-1.6.4}/dayhoff_tools/warehouse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dayhoff-tools
3
- Version: 1.6.2
3
+ Version: 1.6.4
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
@@ -1810,9 +1810,20 @@ def _attempt_studio_attach(studio, engine, target_user, public_key):
1810
1810
  },
1811
1811
  )
1812
1812
 
1813
+ # Fast-path success
1813
1814
  if response.status_code == 200:
1814
1815
  return True, None
1815
1816
 
1817
+ # Asynchronous path – API returned 202 Accepted and operation tracking ID
1818
+ if response.status_code == 202:
1819
+ op_id = response.json().get("operation_id")
1820
+ if not op_id:
1821
+ return False, "Async operation started but no operation_id returned"
1822
+ poll_ok, poll_err = _poll_operation(op_id)
1823
+ if poll_ok:
1824
+ return True, None
1825
+ return False, poll_err
1826
+
1816
1827
  # --- determine if we should retry ---
1817
1828
  recoverable = False
1818
1829
  if response.status_code in (409, 503):
@@ -1848,6 +1859,31 @@ def _attempt_studio_attach(studio, engine, target_user, public_key):
1848
1859
  return False, None
1849
1860
 
1850
1861
 
1862
+ def _poll_operation(operation_id: str, timeout: int = 600) -> Tuple[bool, str]:
1863
+ """Poll /operations/<id> until COMPLETED or FAILED.
1864
+
1865
+ Returns (True, "") on success or (False, error_message) on failure / timeout.
1866
+ Uses a simple status spinner to avoid nested Live displays.
1867
+ """
1868
+ start_ts = time.time()
1869
+ with console.status("[cyan]Waiting for studio attach to complete…", spinner="dots") as status:
1870
+ while True:
1871
+ if time.time() - start_ts > timeout:
1872
+ return False, "Timed out waiting for attach operation to complete"
1873
+ op_resp = make_api_request("GET", f"/operations/{operation_id}")
1874
+ if op_resp.status_code != 200:
1875
+ return False, f"Failed to fetch operation status (HTTP {op_resp.status_code})"
1876
+ data = op_resp.json()
1877
+ op_status = data.get("status")
1878
+ if op_status == "COMPLETED":
1879
+ return True, ""
1880
+ if op_status == "FAILED":
1881
+ return False, data.get("error", "Operation failed")
1882
+ # update spinner text occasionally
1883
+ status.update(f"[cyan]Waiting… ({op_status.lower()})")
1884
+ time.sleep(3)
1885
+
1886
+
1851
1887
  @studio_app.command("detach")
1852
1888
  def detach_studio(
1853
1889
  user: Optional[str] = typer.Option(
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
5
5
 
6
6
  [project]
7
7
  name = "dayhoff-tools"
8
- version = "1.6.2"
8
+ version = "1.6.4"
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