dayhoff-tools 1.0.16__tar.gz → 1.0.18__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 (30) hide show
  1. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/PKG-INFO +16 -18
  2. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/cli/utility_commands.py +42 -27
  3. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/pyproject.toml +26 -15
  4. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/README.md +0 -0
  5. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/__init__.py +0 -0
  6. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/chemistry/standardizer.py +0 -0
  7. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/chemistry/utils.py +0 -0
  8. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/cli/__init__.py +0 -0
  9. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/cli/cloud_commands.py +0 -0
  10. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/cli/main.py +0 -0
  11. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/cli/swarm_commands.py +0 -0
  12. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/deployment/base.py +0 -0
  13. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/deployment/deploy_aws.py +0 -0
  14. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/deployment/deploy_gcp.py +0 -0
  15. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/deployment/deploy_utils.py +0 -0
  16. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/deployment/job_runner.py +0 -0
  17. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/deployment/processors.py +0 -0
  18. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/deployment/swarm.py +0 -0
  19. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/embedders.py +0 -0
  20. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/fasta.py +0 -0
  21. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/file_ops.py +0 -0
  22. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/gcp.py +0 -0
  23. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/h5.py +0 -0
  24. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/kegg.py +0 -0
  25. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/logs.py +0 -0
  26. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/mmseqs.py +0 -0
  27. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/sqlite.py +0 -0
  28. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/structure.py +0 -0
  29. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/uniprot.py +0 -0
  30. {dayhoff_tools-1.0.16 → dayhoff_tools-1.0.18}/dayhoff_tools/warehouse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dayhoff-tools
3
- Version: 1.0.16
3
+ Version: 1.0.18
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
@@ -10,23 +10,21 @@ Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
11
  Classifier: Programming Language :: Python :: 3.12
12
12
  Classifier: Programming Language :: Python :: 3.13
13
- Provides-Extra: full
14
- Requires-Dist: biopython (>=1.84) ; extra == "full"
15
- Requires-Dist: boto3 (>=1.36.8) ; extra == "full"
16
- Requires-Dist: docker (>=7.1.0) ; extra == "full"
17
- Requires-Dist: fair-esm (>=2.0.0) ; extra == "full"
18
- Requires-Dist: firebase-admin (>=6.5.0)
19
- Requires-Dist: h5py (>=3.11.0) ; extra == "full"
20
- Requires-Dist: pandas (>=2.2.3) ; extra == "full"
21
- Requires-Dist: pyyaml (>=6.0)
22
- Requires-Dist: questionary (>=2.0.1) ; extra == "full"
23
- Requires-Dist: rdkit-pypi (>=2022.9.5) ; extra == "full"
24
- Requires-Dist: requests (>=2.31.0)
25
- Requires-Dist: sqlalchemy (>=2.0.40,<3.0.0) ; extra == "full"
26
- Requires-Dist: torch (>=2.1.0) ; extra == "full"
27
- Requires-Dist: torchvision (>=0.16.0) ; extra == "full"
28
- Requires-Dist: transformers (==4.36.2) ; extra == "full"
29
- Requires-Dist: typer (>=0.9.0)
13
+ Provides-Extra: base
14
+ Requires-Dist: biopython (>=1.84)
15
+ Requires-Dist: boto3 (>=1.36.8)
16
+ Requires-Dist: docker (>=7.1.0)
17
+ Requires-Dist: fair-esm (>=2.0.0)
18
+ Requires-Dist: firebase-admin (>=6.5.0) ; extra == "base"
19
+ Requires-Dist: h5py (>=3.11.0)
20
+ Requires-Dist: pandas (>=2.2.3)
21
+ Requires-Dist: pyyaml (>=6.0) ; extra == "base"
22
+ Requires-Dist: questionary (>=2.0.1)
23
+ Requires-Dist: rdkit-pypi (>=2022.9.5)
24
+ Requires-Dist: requests (>=2.31.0) ; extra == "base"
25
+ Requires-Dist: sqlalchemy (>=2.0.40,<3.0.0)
26
+ Requires-Dist: transformers (==4.36.2)
27
+ Requires-Dist: typer (>=0.9.0) ; extra == "base"
30
28
  Description-Content-Type: text/markdown
31
29
 
32
30
  # dayhoff-tools
@@ -7,6 +7,7 @@ import subprocess
7
7
  import sys
8
8
  from pathlib import Path
9
9
 
10
+ import typer
10
11
  import yaml
11
12
 
12
13
 
@@ -211,6 +212,8 @@ def build_and_upload_wheel(bump_part: str = "patch"):
211
212
  return
212
213
 
213
214
  # Build the command with token authentication
215
+ # IMPORTANT: Mask token for printing
216
+ publish_cmd_safe_print = ["uv", "publish", "--token", "*****"]
214
217
  publish_cmd = ["uv", "publish", "--token", token]
215
218
  print("Using UV_PUBLISH_TOKEN for authentication.")
216
219
 
@@ -279,13 +282,16 @@ def build_and_upload_wheel(bump_part: str = "patch"):
279
282
  # --- End Version Bumping Logic ---
280
283
 
281
284
  # Build wheel and sdist
282
- print("Building wheel and sdist using uv build...")
283
- subprocess.run(["uv", "build"], check=True)
285
+ build_cmd = ["uv", "build"]
286
+ print(f"Running command: {' '.join(build_cmd)}")
287
+ subprocess.run(build_cmd, check=True)
284
288
 
285
289
  # Upload using uv publish with explicit arguments
286
- print("Uploading to PyPI using uv publish...")
290
+ print(
291
+ f"Running command: {' '.join(publish_cmd_safe_print)}"
292
+ ) # Print masked command
287
293
  subprocess.run(
288
- publish_cmd, # Use the command list built earlier
294
+ publish_cmd, # Use the actual command with token
289
295
  check=True,
290
296
  )
291
297
 
@@ -357,39 +363,48 @@ def build_and_upload_wheel(bump_part: str = "patch"):
357
363
  def update_dayhoff_tools():
358
364
  """Update the dayhoff-tools package to the latest version using uv.
359
365
 
360
- Runs `uv add dayhoff-tools@latest --group common` which attempts to update
361
- dayhoff-tools within the 'common' dependency group.
366
+ Runs `uv add dayhoff-tools@latest`. Note: This command might not correctly
367
+ update dayhoff-tools if it's only listed in a top-level [dependency-groups]
368
+ table in the target project's pyproject.toml. It works best for dependencies
369
+ in [project.dependencies] or [project.optional-dependencies].
362
370
  """
363
371
  try:
364
- print(
365
- "Updating dayhoff-tools to the latest version in 'common' group using uv..."
366
- )
367
- # Use uv add with --group common to explicitly target the dependency
368
- subprocess.run(
369
- ["uv", "add", "dayhoff-tools@latest", "--group", "common"], check=True
370
- )
371
- print(
372
- "Update complete! Run 'uv sync --group common' or relevant sync command if needed."
373
- )
372
+ print("Attempting to update dayhoff-tools to the latest version using uv...")
373
+ update_cmd = ["uv", "add", "dayhoff-tools@latest"]
374
+ print(f"Running command: {' '.join(update_cmd)}")
375
+ subprocess.run(update_cmd, check=True)
376
+ print("Update attempt complete! Check pyproject.toml and run sync if needed.")
374
377
  except subprocess.CalledProcessError as e:
375
- print(f"Error occurred while updating: {e}")
378
+ print(f"Error occurred while attempting update: {e}")
379
+ except FileNotFoundError:
380
+ print("Error: 'uv' command not found. Is uv installed and in PATH?")
381
+ sys.exit(1)
376
382
 
377
383
 
378
- def sync_dependencies():
384
+ def sync_dependencies(
385
+ install_project: bool = typer.Option(
386
+ False,
387
+ "--install-project",
388
+ help="Install the local project package itself into the environment.",
389
+ )
390
+ ):
379
391
  """Update uv.lock and sync dependencies based on pyproject.toml.
380
392
 
381
- Runs `uv lock` followed by `uv sync --all-groups --no-install-project`.
382
- This ensures the lock file is up-to-date and installs all declared
383
- dependencies without building/installing the local project itself.
393
+ By default, installs all declared dependencies without building/installing
394
+ the local project itself (--no-install-project). Use --install-project to
395
+ include the local project.
384
396
  """
385
397
  try:
386
- print("Updating lock file (uv lock)...")
387
- subprocess.run(["uv", "lock"], check=True)
398
+ lock_cmd = ["uv", "lock"]
399
+ print(f"Running command: {' '.join(lock_cmd)}")
400
+ subprocess.run(lock_cmd, check=True)
388
401
 
389
- print("Syncing dependencies (uv sync --all-groups --no-install-project)...")
390
- subprocess.run(
391
- ["uv", "sync", "--all-groups", "--no-install-project"], check=True
392
- )
402
+ sync_cmd = ["uv", "sync", "--all-groups"]
403
+ if not install_project:
404
+ sync_cmd.append("--no-install-project")
405
+
406
+ print(f"Running command: {' '.join(sync_cmd)}")
407
+ subprocess.run(sync_cmd, check=True)
393
408
 
394
409
  print("Dependencies synced successfully.")
395
410
  except subprocess.CalledProcessError as e:
@@ -4,24 +4,15 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "dayhoff-tools"
7
- version = "1.0.16"
7
+ version = "1.0.18"
8
8
  description = "Common tools for all the repos at Dayhoff Labs"
9
9
  authors = [
10
10
  {name = "Daniel Martin-Alarcon", email = "dma@dayhofflabs.com"}
11
11
  ]
12
12
  readme = "README.md"
13
- # Just enough deps to use the job_runner
14
- dependencies = [
15
- "firebase-admin>=6.5.0",
16
- "pyyaml>=6.0",
17
- "requests>=2.31.0",
18
- "typer>=0.9.0",
19
- ]
20
- requires-python = ">=3.10,<4.0"
21
13
 
22
- [project.optional-dependencies]
23
- # Deps we expect to need to bring to new repos
24
- full = [
14
+ # Default dependencies now include the formerly "full" set
15
+ dependencies = [
25
16
  "biopython>=1.84",
26
17
  "boto3>=1.36.8",
27
18
  "docker>=7.1.0",
@@ -32,11 +23,29 @@ full = [
32
23
  "rdkit-pypi>=2022.9.5",
33
24
  "sqlalchemy (>=2.0.40,<3.0.0)",
34
25
  "transformers==4.36.2",
35
- "torch>=2.1.0",
36
- "torchvision>=0.16.0",
37
26
  ]
27
+ requires-python = ">=3.10,<4.0"
28
+
29
+ [project.optional-dependencies]
30
+ # Minimal base dependencies
31
+ base = [
32
+ "firebase-admin>=6.5.0",
33
+ "pyyaml>=6.0",
34
+ "requests>=2.31.0",
35
+ "typer>=0.9.0",
36
+ ]
37
+
38
+ # Added UV-specific configuration for PyTorch source (for dev/test env)
39
+ [[tool.uv.index]]
40
+ name = "torch-cuda"
41
+ url = "https://download.pytorch.org/whl/cu121"
42
+ explicit = true
43
+
44
+ [tool.uv.sources]
45
+ torch = { index = "torch-cuda" }
46
+ torchvision = { index = "torch-cuda" }
38
47
 
39
- [tool.uv.dependency-groups]
48
+ [dependency-groups]
40
49
  common = [
41
50
  "black>=25.1.0,<26",
42
51
  "boto3>=1.36.8",
@@ -57,6 +66,8 @@ common = [
57
66
  "pytest>=8.0.2,<9",
58
67
  "pytest-cov>=4.1.0,<5",
59
68
  "pytest-mock>=3.12.0,<4",
69
+ "torch==2.4.0+cu121",
70
+ "torchvision==0.19.0+cu121",
60
71
  ]
61
72
 
62
73
  [project.scripts]
File without changes