dh-cli 0.2.3__tar.gz → 0.2.6__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.
- {dh_cli-0.2.3 → dh_cli-0.2.6}/PKG-INFO +1 -1
- {dh_cli-0.2.3 → dh_cli-0.2.6}/pyproject.toml +1 -1
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/aws_batch.py +39 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/submit.py +2 -1
- {dh_cli-0.2.3 → dh_cli-0.2.6}/.gitignore +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/LICENSE +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/README.md +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/__init__.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/__init__.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/__init__.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/boltz.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/cancel.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/clean.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/embed_t5.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/finalize.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/list_jobs.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/local.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/logs.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/retry.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/status.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/train.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/commands/wait_for.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/fasta_utils.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/h5_utils.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/job_id.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/manifest.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/batch/s3_transport.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/cloud_commands.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/codeartifact.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/engines_studios/__init__.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/engines_studios/api_client.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/engines_studios/auth.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/engines_studios/engine_commands.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/engines_studios/progress.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/engines_studios/ssh_config.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/engines_studios/studio_commands.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/github_commands.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/main.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/utility_commands.py +0 -0
- {dh_cli-0.2.3 → dh_cli-0.2.6}/src/dh_cli/warehouse.py +0 -0
|
@@ -83,6 +83,7 @@ class BatchClient:
|
|
|
83
83
|
vcpus: int | None = None,
|
|
84
84
|
memory_mb: int | None = None,
|
|
85
85
|
gpus: int | None = None,
|
|
86
|
+
image_override: str | None = None,
|
|
86
87
|
) -> str:
|
|
87
88
|
"""Submit a job to AWS Batch.
|
|
88
89
|
|
|
@@ -104,6 +105,11 @@ class BatchClient:
|
|
|
104
105
|
BatchError: If submission fails
|
|
105
106
|
"""
|
|
106
107
|
try:
|
|
108
|
+
if image_override:
|
|
109
|
+
job_definition = self._register_image_override(
|
|
110
|
+
job_definition, image_override
|
|
111
|
+
)
|
|
112
|
+
|
|
107
113
|
submit_args: dict[str, Any] = {
|
|
108
114
|
"jobName": job_name,
|
|
109
115
|
"jobDefinition": job_definition,
|
|
@@ -153,6 +159,39 @@ class BatchClient:
|
|
|
153
159
|
except ClientError as e:
|
|
154
160
|
raise BatchError(f"Failed to submit job: {e}")
|
|
155
161
|
|
|
162
|
+
def _register_image_override(
|
|
163
|
+
self, base_definition: str, image: str
|
|
164
|
+
) -> str:
|
|
165
|
+
"""Register a new revision of a job definition with a custom image.
|
|
166
|
+
|
|
167
|
+
AWS Batch containerOverrides doesn't support an image field, so we
|
|
168
|
+
create a new revision of the base definition with only the image
|
|
169
|
+
changed, preserving all other containerProperties (roles, volumes, etc.).
|
|
170
|
+
|
|
171
|
+
Returns the ARN of the new revision.
|
|
172
|
+
"""
|
|
173
|
+
resp = self.batch.describe_job_definitions(
|
|
174
|
+
jobDefinitionName=base_definition, status="ACTIVE"
|
|
175
|
+
)
|
|
176
|
+
definitions = resp.get("jobDefinitions", [])
|
|
177
|
+
if not definitions:
|
|
178
|
+
raise BatchError(
|
|
179
|
+
f"Job definition not found: {base_definition}"
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
latest = sorted(definitions, key=lambda d: d["revision"])[-1]
|
|
183
|
+
container_props = latest["containerProperties"].copy()
|
|
184
|
+
container_props["image"] = image
|
|
185
|
+
|
|
186
|
+
reg_resp = self.batch.register_job_definition(
|
|
187
|
+
jobDefinitionName=base_definition,
|
|
188
|
+
type=latest.get("type", "container"),
|
|
189
|
+
containerProperties=container_props,
|
|
190
|
+
)
|
|
191
|
+
arn = reg_resp["jobDefinitionArn"]
|
|
192
|
+
logger.info(f"Registered job definition {arn} with image {image}")
|
|
193
|
+
return arn
|
|
194
|
+
|
|
156
195
|
def submit_array_job_with_indices(
|
|
157
196
|
self,
|
|
158
197
|
job_name: str,
|
|
@@ -177,7 +177,7 @@ def submit(
|
|
|
177
177
|
|
|
178
178
|
batch_job_id = client.submit_job(
|
|
179
179
|
job_name=job_id,
|
|
180
|
-
job_definition=
|
|
180
|
+
job_definition=DEFAULT_JOB_DEFINITION,
|
|
181
181
|
job_queue=job_queue,
|
|
182
182
|
array_size=job_array if job_array > 1 else None,
|
|
183
183
|
environment=submit_env,
|
|
@@ -185,6 +185,7 @@ def submit(
|
|
|
185
185
|
retry_attempts=job_retry,
|
|
186
186
|
depends_on=depends_on,
|
|
187
187
|
share_identifier=get_aws_username(),
|
|
188
|
+
image_override=job_image,
|
|
188
189
|
)
|
|
189
190
|
|
|
190
191
|
# Update manifest with Batch job ID
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|