dayhoff-tools 1.5.9__tar.gz → 1.6.1__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.
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/PKG-INFO +1 -1
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/cli/engine_commands.py +31 -9
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/pyproject.toml +1 -1
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/README.md +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/__init__.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/chemistry/standardizer.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/chemistry/utils.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/cli/__init__.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/cli/cloud_commands.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/cli/main.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/cli/swarm_commands.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/cli/utility_commands.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/deployment/base.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/deployment/deploy_aws.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/deployment/deploy_gcp.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/deployment/deploy_utils.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/deployment/job_runner.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/deployment/processors.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/deployment/swarm.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/embedders.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/fasta.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/file_ops.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/h5.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/intake/gcp.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/intake/gtdb.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/intake/kegg.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/intake/mmseqs.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/intake/structure.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/intake/uniprot.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/logs.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/sqlite.py +0 -0
- {dayhoff_tools-1.5.9 → dayhoff_tools-1.6.1}/dayhoff_tools/warehouse.py +0 -0
|
@@ -1477,27 +1477,49 @@ def create_ami(
|
|
|
1477
1477
|
for s in attached_studios:
|
|
1478
1478
|
console.print(f" • {s['user']} ({s['studio_id']})")
|
|
1479
1479
|
|
|
1480
|
+
detach_failed = []
|
|
1480
1481
|
for s in attached_studios:
|
|
1481
1482
|
resp = make_api_request("POST", f"/studios/{s['studio_id']}/detach")
|
|
1482
1483
|
if resp.status_code != 200:
|
|
1484
|
+
# Check if actually detached despite error
|
|
1485
|
+
time.sleep(2)
|
|
1486
|
+
check_resp = make_api_request("GET", f"/studios/{s['studio_id']}")
|
|
1487
|
+
if check_resp.status_code == 200:
|
|
1488
|
+
studio_data = check_resp.json()
|
|
1489
|
+
if studio_data.get("status") == "available":
|
|
1490
|
+
console.print(
|
|
1491
|
+
f" [yellow]⚠ {s['studio_id']} reported error but is detached[/yellow]"
|
|
1492
|
+
)
|
|
1493
|
+
continue # It's actually detached, continue
|
|
1494
|
+
|
|
1483
1495
|
console.print(
|
|
1484
|
-
f"[red]❌ Failed to detach {s['studio_id']}
|
|
1496
|
+
f" [red]❌ Failed to detach {s['studio_id']}[/red]"
|
|
1485
1497
|
)
|
|
1486
|
-
|
|
1498
|
+
detach_failed.append(s['studio_id'])
|
|
1499
|
+
|
|
1500
|
+
if detach_failed:
|
|
1501
|
+
console.print(
|
|
1502
|
+
f"[red]Failed to detach {len(detach_failed)} studio(s). Aborting AMI creation.[/red]"
|
|
1503
|
+
)
|
|
1504
|
+
return
|
|
1487
1505
|
|
|
1488
1506
|
# Wait briefly for volumes to become available (max 2 min)
|
|
1489
1507
|
# (time is already imported at module level)
|
|
1490
1508
|
ec2_wait = boto3.client("ec2", region_name="us-east-1")
|
|
1491
1509
|
vol_ids = [s["studio_id"] for s in attached_studios]
|
|
1492
1510
|
console.print("Waiting for volumes to detach…")
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
)
|
|
1498
|
-
|
|
1511
|
+
|
|
1512
|
+
# Check volume states directly instead of using waiter
|
|
1513
|
+
for attempt in range(24): # Max 2 minutes
|
|
1514
|
+
time.sleep(5)
|
|
1515
|
+
volumes = ec2_wait.describe_volumes(VolumeIds=vol_ids)["Volumes"]
|
|
1516
|
+
all_available = all(v["State"] == "available" for v in volumes)
|
|
1517
|
+
if all_available:
|
|
1518
|
+
console.print("[green]✓ All studios detached[/green]")
|
|
1519
|
+
break
|
|
1520
|
+
else:
|
|
1499
1521
|
console.print(
|
|
1500
|
-
"[yellow]
|
|
1522
|
+
"[yellow]⚠ Some volumes may still be detaching, but proceeding...[/yellow]"
|
|
1501
1523
|
)
|
|
1502
1524
|
|
|
1503
1525
|
# Create the AMI
|
|
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
5
5
|
|
|
6
6
|
[project]
|
|
7
7
|
name = "dayhoff-tools"
|
|
8
|
-
version = "1.
|
|
8
|
+
version = "1.6.1"
|
|
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
|
|
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
|