Skip to content

Commit b15ba00

Browse files
committed
fix: added ExpressionTool and updated code
1 parent beaeefb commit b15ba00

2 files changed

Lines changed: 38 additions & 17 deletions

File tree

src/dirac_cwl/submission_models.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -186,40 +186,34 @@ def validate_production(cls, values):
186186
# Temporary code, waiting on cwltool PR: https://github.com/common-workflow-language/cwltool/pull/2179.
187187

188188

189-
def validate_resource_requirements(task):
189+
def validate_resource_requirements(task: CommandLineTool | Workflow | ExpressionTool):
190190
"""
191-
Validate ResourceRequirements of a task (CommandLineTool, Workflow, WorkflowStep, WorkflowStep.run).
191+
Validate ResourceRequirements of a task (CommandLineTool, ExpressionTool, Workflow, WorkflowStep).
192192
193193
:param task: The task to validate
194194
"""
195-
cwl_req = _get_resource_requirement(task)
195+
req = _get_resource_requirement(task)
196196

197-
# Validate Workflow/CLT requirements.
198-
if cwl_req:
199-
_validate_resource_requirement(cwl_req)
197+
# Validate Workflow/CommandLineTool/ExpressionTool requirements.
198+
if req:
199+
_validate_resource_requirement(req)
200200

201201
# Validate WorkflowStep requirements.
202-
if not isinstance(task, CommandLineTool) and task.steps:
202+
if isinstance(task, Workflow) and task.steps:
203203
for step in task.steps:
204204
step_req = _get_resource_requirement(step)
205205
if step_req:
206206
_validate_resource_requirement(step_req)
207207

208208
# Validate run requirements for each step if they exist.
209209
if step.run:
210-
if isinstance(step.run, Workflow):
211-
# Validate nested Workflow requirements, if any.
212-
validate_resource_requirements(task=step.run)
213-
214-
step_run_req = _get_resource_requirement(step.run)
215-
if step_run_req:
216-
_validate_resource_requirement(step_run_req)
210+
validate_resource_requirements(task=step.run)
217211

218212

219213
def _validate_resource_requirement(requirement):
220214
"""Validate a ResourceRequirement.
221215
222-
Verify that resourceMin is not higher than resourceMax (CommandLineTool, Workflow, WorkflowStep, WorkflowStep.run)
216+
Verify that resourceMin is not higher than resourceMax (CommandLineTool, ExpressionTool, Workflow, WorkflowStep)
223217
224218
:param requirement: The current ResourceRequirement to validate.
225219
:raises ValueError: If the requirement is invalid.
@@ -235,7 +229,7 @@ def _validate_resource_requirement(requirement):
235229

236230

237231
def _get_resource_requirement(
238-
cwl_object: Workflow | CommandLineTool | WorkflowStep,
232+
cwl_object: Workflow | CommandLineTool | ExpressionTool | WorkflowStep,
239233
) -> ResourceRequirement | None:
240234
"""
241235
Extract the resource requirement from the current cwl_object.

test/test_resource_requirements.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import List, Optional
44

55
import pytest
6-
from cwl_utils.parser.cwl_v1_2 import CommandLineTool, ResourceRequirement, Workflow, WorkflowStep
6+
from cwl_utils.parser.cwl_v1_2 import CommandLineTool, ExpressionTool, ResourceRequirement, Workflow, WorkflowStep
77

88
from dirac_cwl.submission_models import JobSubmissionModel, ProductionSubmissionModel, TransformationSubmissionModel
99

@@ -55,6 +55,20 @@ def create_step(
5555
)
5656

5757

58+
def create_expressiontool(
59+
requirements: Optional[list] = None,
60+
inputs: Optional[list] = None,
61+
outputs: Optional[list] = None,
62+
) -> CommandLineTool:
63+
"""Create an ExpressionTool with the given requirements, inputs, and outputs."""
64+
return ExpressionTool(
65+
expression="",
66+
requirements=requirements or [],
67+
inputs=inputs or [],
68+
outputs=outputs or [],
69+
)
70+
71+
5872
def assert_submission_fails(task):
5973
"""Assert that submission fails with ValueError for Job and Transformation models with bad resource requirements.
6074
@@ -86,17 +100,30 @@ def test_bad_min_max_resource_reqs(bad_min_max_reqs):
86100
clt = create_commandlinetool(requirements=[bad_min_max_reqs])
87101
assert_submission_fails(clt)
88102

103+
# ExpressionTool with bad minmax reqs
104+
expression_tool = create_expressiontool(requirements=[bad_min_max_reqs])
105+
assert_submission_fails(expression_tool)
106+
89107
# WorkflowStep.run with bad minmax reqs
90108
step_bad_run = create_step(run=clt)
91109
workflow = create_workflow(steps=[step_bad_run])
92110
assert_submission_fails(workflow)
93111

112+
step_bad_run = create_step(run=expression_tool)
113+
workflow = create_workflow(steps=[step_bad_run])
114+
assert_submission_fails(workflow)
115+
94116
# WorkflowStep with bad minmax reqs
95117
clt = create_commandlinetool()
96118
step = create_step(run=clt, requirements=[bad_min_max_reqs])
97119
workflow = create_workflow(steps=[step])
98120
assert_submission_fails(workflow)
99121

122+
expression_tool = create_commandlinetool()
123+
step = create_step(run=expression_tool, requirements=[bad_min_max_reqs])
124+
workflow = create_workflow(steps=[step])
125+
assert_submission_fails(workflow)
126+
100127
# Workflow with bad minmax reqs
101128
workflow = create_workflow(requirements=[bad_min_max_reqs])
102129
assert_submission_fails(workflow)

0 commit comments

Comments
 (0)