dayhoff-tools 1.11.2__py3-none-any.whl → 1.11.4__py3-none-any.whl
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/cli/utility_commands.py +160 -119
- {dayhoff_tools-1.11.2.dist-info → dayhoff_tools-1.11.4.dist-info}/METADATA +1 -1
- {dayhoff_tools-1.11.2.dist-info → dayhoff_tools-1.11.4.dist-info}/RECORD +5 -5
- {dayhoff_tools-1.11.2.dist-info → dayhoff_tools-1.11.4.dist-info}/WHEEL +0 -0
- {dayhoff_tools-1.11.2.dist-info → dayhoff_tools-1.11.4.dist-info}/entry_points.txt +0 -0
|
@@ -219,6 +219,7 @@ def build_and_upload_wheel(bump_part: str = "patch"):
|
|
|
219
219
|
# Build wheel and sdist
|
|
220
220
|
# UV expects pyproject.toml, so temporarily copy the platform manifest
|
|
221
221
|
backup_created = False
|
|
222
|
+
temp_pyproject_created = False
|
|
222
223
|
if pyproject_path != "pyproject.toml":
|
|
223
224
|
if Path("pyproject.toml").exists():
|
|
224
225
|
Path("pyproject.toml").rename("pyproject.toml.build.bak")
|
|
@@ -226,48 +227,53 @@ def build_and_upload_wheel(bump_part: str = "patch"):
|
|
|
226
227
|
Path(pyproject_path).read_text()
|
|
227
228
|
with open("pyproject.toml", "w") as f:
|
|
228
229
|
f.write(Path(pyproject_path).read_text())
|
|
230
|
+
temp_pyproject_created = True
|
|
229
231
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
print(f"Running command: {BLUE}{' '.join(publish_cmd_safe_print)}{RESET}")
|
|
244
|
-
subprocess.run(
|
|
245
|
-
publish_cmd, # Use the actual command with token
|
|
246
|
-
check=True,
|
|
247
|
-
)
|
|
232
|
+
try:
|
|
233
|
+
build_cmd = ["uv", "build"]
|
|
234
|
+
# Print command in blue
|
|
235
|
+
print(f"Running command: {BLUE}{' '.join(build_cmd)}{RESET}")
|
|
236
|
+
subprocess.run(build_cmd, check=True)
|
|
237
|
+
|
|
238
|
+
# Upload using uv publish with explicit arguments
|
|
239
|
+
# Print masked command in blue
|
|
240
|
+
print(f"Running command: {BLUE}{' '.join(publish_cmd_safe_print)}{RESET}")
|
|
241
|
+
subprocess.run(
|
|
242
|
+
publish_cmd, # Use the actual command with token
|
|
243
|
+
check=True,
|
|
244
|
+
)
|
|
248
245
|
|
|
249
|
-
|
|
246
|
+
print(f"Successfully built and uploaded version {new_version} to PyPI")
|
|
250
247
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
proj_name = None
|
|
248
|
+
# Re-install DHT in current venv when building from DHT itself
|
|
249
|
+
# (Keep temp pyproject.toml until after this step)
|
|
254
250
|
try:
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
proj_toml
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
251
|
+
proj_name = None
|
|
252
|
+
try:
|
|
253
|
+
proj_toml = toml.load(pyproject_path)
|
|
254
|
+
proj_name = (
|
|
255
|
+
proj_toml.get("project", {}).get("name")
|
|
256
|
+
if isinstance(proj_toml, dict)
|
|
257
|
+
else None
|
|
258
|
+
)
|
|
259
|
+
except Exception:
|
|
260
|
+
pass
|
|
261
|
+
if proj_name == "dayhoff-tools":
|
|
262
|
+
print("Re-installing dayhoff-tools into the active environment…")
|
|
263
|
+
reinstall_cmd = ["uv", "pip", "install", "-e", ".[full]"]
|
|
264
|
+
print(f"Running command: {BLUE}{' '.join(reinstall_cmd)}{RESET}")
|
|
265
|
+
subprocess.run(reinstall_cmd, check=True)
|
|
266
|
+
print("dayhoff-tools reinstalled in the current environment.")
|
|
267
|
+
except subprocess.CalledProcessError as e:
|
|
268
|
+
print(f"Warning: Failed to reinstall dayhoff-tools locally: {e}")
|
|
269
|
+
|
|
270
|
+
finally:
|
|
271
|
+
# Restore original state (always clean up, even if errors occurred)
|
|
272
|
+
if temp_pyproject_created:
|
|
273
|
+
if Path("pyproject.toml").exists():
|
|
274
|
+
Path("pyproject.toml").unlink()
|
|
275
|
+
if backup_created and Path("pyproject.toml.build.bak").exists():
|
|
276
|
+
Path("pyproject.toml.build.bak").rename("pyproject.toml")
|
|
271
277
|
|
|
272
278
|
except FileNotFoundError:
|
|
273
279
|
print(f"Error: {pyproject_path} not found.")
|
|
@@ -423,58 +429,79 @@ def sync_with_toml(
|
|
|
423
429
|
with open("pyproject.workstation.toml", "r") as f:
|
|
424
430
|
content = f.read()
|
|
425
431
|
|
|
426
|
-
# Extract dependencies list
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
deps = []
|
|
431
|
-
for line in deps_text.split("\n"):
|
|
432
|
-
line = line.strip()
|
|
433
|
-
if line.startswith('"') or line.startswith("'"):
|
|
434
|
-
dep = re.sub(r'["\']', "", line)
|
|
435
|
-
dep = re.sub(r",?\s*#.*$", "", dep)
|
|
436
|
-
dep = dep.strip().rstrip(",")
|
|
437
|
-
if dep:
|
|
438
|
-
deps.append(dep)
|
|
439
|
-
|
|
440
|
-
if deps:
|
|
441
|
-
pip_cmd = (
|
|
442
|
-
[sys.executable, "-m", "pip", "install"]
|
|
443
|
-
+ deps
|
|
444
|
-
+ ["-c", "constraints.txt"]
|
|
445
|
-
)
|
|
446
|
-
print(
|
|
447
|
-
f"Running command: {BLUE}{' '.join(pip_cmd[:5])} ... -c constraints.txt{RESET}"
|
|
448
|
-
)
|
|
449
|
-
subprocess.run(pip_cmd, check=True)
|
|
432
|
+
# Extract dependencies list using line-by-line parsing to handle [] in package names
|
|
433
|
+
lines = content.split("\n")
|
|
434
|
+
in_deps = False
|
|
435
|
+
deps_lines = []
|
|
450
436
|
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
437
|
+
for line in lines:
|
|
438
|
+
if re.match(r"\s*dependencies\s*=\s*\[", line):
|
|
439
|
+
in_deps = True
|
|
440
|
+
continue
|
|
441
|
+
if in_deps:
|
|
442
|
+
if re.match(r"^\s*\]\s*$", line):
|
|
443
|
+
break
|
|
444
|
+
deps_lines.append(line)
|
|
445
|
+
|
|
446
|
+
deps = []
|
|
447
|
+
for line in deps_lines:
|
|
448
|
+
line = line.strip()
|
|
449
|
+
if line.startswith('"') or line.startswith("'"):
|
|
450
|
+
dep = re.sub(r'["\']', "", line)
|
|
451
|
+
dep = re.sub(r",?\s*#.*$", "", dep)
|
|
452
|
+
dep = dep.strip().rstrip(",")
|
|
453
|
+
if dep:
|
|
454
|
+
deps.append(dep)
|
|
455
|
+
|
|
456
|
+
if deps:
|
|
457
|
+
pip_cmd = (
|
|
458
|
+
[sys.executable, "-m", "pip", "install"]
|
|
459
|
+
+ deps
|
|
460
|
+
+ ["-c", "constraints.txt"]
|
|
461
|
+
)
|
|
462
|
+
print(
|
|
463
|
+
f"Running command: {BLUE}{' '.join(pip_cmd[:5])} ... -c constraints.txt{RESET}"
|
|
464
|
+
)
|
|
465
|
+
subprocess.run(pip_cmd, check=True)
|
|
466
|
+
|
|
467
|
+
# Install dev dependencies using line-by-line parsing
|
|
468
|
+
in_dev_groups = False
|
|
469
|
+
in_dev_list = False
|
|
470
|
+
dev_lines = []
|
|
471
|
+
|
|
472
|
+
for line in lines:
|
|
473
|
+
if re.match(r"\s*\[dependency-groups\]", line):
|
|
474
|
+
in_dev_groups = True
|
|
475
|
+
continue
|
|
476
|
+
if in_dev_groups and re.match(r"\s*dev\s*=\s*\[", line):
|
|
477
|
+
in_dev_list = True
|
|
478
|
+
continue
|
|
479
|
+
if in_dev_list:
|
|
480
|
+
if re.match(r"^\s*\]\s*$", line):
|
|
481
|
+
break
|
|
482
|
+
dev_lines.append(line)
|
|
483
|
+
|
|
484
|
+
dev_deps = []
|
|
485
|
+
for line in dev_lines:
|
|
486
|
+
line = line.strip()
|
|
487
|
+
if line.startswith('"') or line.startswith("'"):
|
|
488
|
+
dep = re.sub(r'["\']', "", line)
|
|
489
|
+
dep = re.sub(r",?\s*#.*$", "", dep)
|
|
490
|
+
dep = dep.strip().rstrip(",")
|
|
491
|
+
if dep:
|
|
492
|
+
dev_deps.append(dep)
|
|
493
|
+
|
|
494
|
+
if dev_deps:
|
|
495
|
+
print("Installing dev dependencies...")
|
|
496
|
+
pip_cmd = (
|
|
497
|
+
[sys.executable, "-m", "pip", "install"]
|
|
498
|
+
+ dev_deps
|
|
499
|
+
+ ["-c", "constraints.txt"]
|
|
500
|
+
)
|
|
501
|
+
print(
|
|
502
|
+
f"Running command: {BLUE}{' '.join(pip_cmd[:5])} ... -c constraints.txt{RESET}"
|
|
503
|
+
)
|
|
504
|
+
subprocess.run(pip_cmd, check=True)
|
|
478
505
|
|
|
479
506
|
# Install project if requested
|
|
480
507
|
if install_project:
|
|
@@ -728,48 +755,62 @@ def add_dependency(
|
|
|
728
755
|
|
|
729
756
|
if dev:
|
|
730
757
|
# Add to [dependency-groups] dev section
|
|
731
|
-
#
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
758
|
+
# Use line-by-line parsing to handle [] in dependency names like dayhoff-tools[full]
|
|
759
|
+
lines = content.split("\n")
|
|
760
|
+
in_dev_groups = False
|
|
761
|
+
in_dev_list = False
|
|
762
|
+
dev_start_idx = None
|
|
763
|
+
dev_end_idx = None
|
|
764
|
+
|
|
765
|
+
for idx, line in enumerate(lines):
|
|
766
|
+
if re.match(r"\s*\[dependency-groups\]", line):
|
|
767
|
+
in_dev_groups = True
|
|
768
|
+
continue
|
|
769
|
+
if in_dev_groups and re.match(r"\s*dev\s*=\s*\[", line):
|
|
770
|
+
in_dev_list = True
|
|
771
|
+
dev_start_idx = idx
|
|
772
|
+
continue
|
|
773
|
+
if in_dev_list and re.match(r"^\s*\]\s*$", line):
|
|
774
|
+
dev_end_idx = idx
|
|
775
|
+
break
|
|
776
|
+
|
|
777
|
+
if dev_start_idx is None or dev_end_idx is None:
|
|
738
778
|
print(
|
|
739
779
|
f"Warning: Could not find [dependency-groups] dev section in {manifest_file}"
|
|
740
780
|
)
|
|
741
781
|
continue
|
|
742
782
|
|
|
743
|
-
# Insert new dependency
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
# Add with proper indentation
|
|
749
|
-
new_dep = f' "{package}",\n'
|
|
750
|
-
new_content = content.replace(
|
|
751
|
-
dev_match.group(0), f"{before}{deps_block}{new_dep}{after}"
|
|
752
|
-
)
|
|
783
|
+
# Insert new dependency before the closing ]
|
|
784
|
+
new_dep = f' "{package}",'
|
|
785
|
+
lines.insert(dev_end_idx, new_dep)
|
|
786
|
+
new_content = "\n".join(lines)
|
|
753
787
|
else:
|
|
754
788
|
# Add to [project] dependencies section
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
789
|
+
# Use line-by-line parsing to handle [] in dependency names like dayhoff-tools[full]
|
|
790
|
+
lines = content.split("\n")
|
|
791
|
+
in_deps = False
|
|
792
|
+
deps_start_idx = None
|
|
793
|
+
deps_end_idx = None
|
|
794
|
+
|
|
795
|
+
for idx, line in enumerate(lines):
|
|
796
|
+
if re.match(r"\s*dependencies\s*=\s*\[", line):
|
|
797
|
+
in_deps = True
|
|
798
|
+
deps_start_idx = idx
|
|
799
|
+
continue
|
|
800
|
+
if in_deps and re.match(r"^\s*\]\s*$", line):
|
|
801
|
+
deps_end_idx = idx
|
|
802
|
+
break
|
|
803
|
+
|
|
804
|
+
if deps_start_idx is None or deps_end_idx is None:
|
|
759
805
|
print(
|
|
760
806
|
f"Warning: Could not find dependencies section in {manifest_file}"
|
|
761
807
|
)
|
|
762
808
|
continue
|
|
763
809
|
|
|
764
|
-
before
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
# Add with proper indentation
|
|
769
|
-
new_dep = f' "{package}",\n'
|
|
770
|
-
new_content = content.replace(
|
|
771
|
-
deps_match.group(0), f"{before}{deps_block}{new_dep}{after}"
|
|
772
|
-
)
|
|
810
|
+
# Insert new dependency before the closing ]
|
|
811
|
+
new_dep = f' "{package}",'
|
|
812
|
+
lines.insert(deps_end_idx, new_dep)
|
|
813
|
+
new_content = "\n".join(lines)
|
|
773
814
|
|
|
774
815
|
manifest_file.write_text(new_content)
|
|
775
816
|
print(f"✅ Added '{package}' to {manifest_file}")
|
|
@@ -12,7 +12,7 @@ dayhoff_tools/cli/engine/shared.py,sha256=Ecx6I1jtzmxQDn3BezKpgpQ4SJeZf4SZjUCLg-
|
|
|
12
12
|
dayhoff_tools/cli/engine/studio_commands.py,sha256=VwTQujz32-uMcYusDRE73SdzRpgvIkv7ZAF4zRv6AzA,30266
|
|
13
13
|
dayhoff_tools/cli/main.py,sha256=Ii5boey--93yGthB_eS2LC7ZR3WHGsJXDHY7uElEtso,6169
|
|
14
14
|
dayhoff_tools/cli/swarm_commands.py,sha256=5EyKj8yietvT5lfoz8Zx0iQvVaNgc3SJX1z2zQR6o6M,5614
|
|
15
|
-
dayhoff_tools/cli/utility_commands.py,sha256=
|
|
15
|
+
dayhoff_tools/cli/utility_commands.py,sha256=46WAySWDFUgwP_Vkr1L4g1xpZOu38r-9UHJhJpRPMnA,42640
|
|
16
16
|
dayhoff_tools/deployment/base.py,sha256=48KE76QlWMeIZJefcBOZVbyChS2V_mgs7IQ31odPV2o,17806
|
|
17
17
|
dayhoff_tools/deployment/deploy_aws.py,sha256=gfqh09hGbz0q3oPqVm0imd_CEjKF2k8moGNRIL26qqE,18614
|
|
18
18
|
dayhoff_tools/deployment/deploy_gcp.py,sha256=xgaOVsUDmP6wSEMYNkm1yRNcVskfdz80qJtCulkBIAM,8860
|
|
@@ -33,7 +33,7 @@ dayhoff_tools/intake/uniprot.py,sha256=BZYJQF63OtPcBBnQ7_P9gulxzJtqyorgyuDiPeOJq
|
|
|
33
33
|
dayhoff_tools/logs.py,sha256=DKdeP0k0kliRcilwvX0mUB2eipO5BdWUeHwh-VnsICs,838
|
|
34
34
|
dayhoff_tools/sqlite.py,sha256=jV55ikF8VpTfeQqqlHSbY8OgfyfHj8zgHNpZjBLos_E,18672
|
|
35
35
|
dayhoff_tools/warehouse.py,sha256=UETBtZD3r7WgvURqfGbyHlT7cxoiVq8isjzMuerKw8I,24475
|
|
36
|
-
dayhoff_tools-1.11.
|
|
37
|
-
dayhoff_tools-1.11.
|
|
38
|
-
dayhoff_tools-1.11.
|
|
39
|
-
dayhoff_tools-1.11.
|
|
36
|
+
dayhoff_tools-1.11.4.dist-info/METADATA,sha256=3aHs-3Zmst0iz9G1VmPuLPHgmBjkVoG7Y-PESX5AlzM,2980
|
|
37
|
+
dayhoff_tools-1.11.4.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
38
|
+
dayhoff_tools-1.11.4.dist-info/entry_points.txt,sha256=iAf4jteNqW3cJm6CO6czLxjW3vxYKsyGLZ8WGmxamSc,49
|
|
39
|
+
dayhoff_tools-1.11.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|