Skip to content

Commit 2854f9e

Browse files
committed
Start of task call expressions support with ATAC
1 parent 0c5c872 commit 2854f9e

File tree

14 files changed

+1980
-28
lines changed

14 files changed

+1980
-28
lines changed

wdl2cwl/main.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def convert(doc: str) -> Dict[str, Any]:
6363
WDL.Error.ValidationError,
6464
WDL.Error.MultipleValidationErrors,
6565
) as exn:
66-
WDL.CLI.print_error(exn) # type: ignore[no-untyped-call]
66+
WDL.CLI.print_error(exn)
6767
raise exn
6868

6969
parser = Converter()
@@ -289,7 +289,11 @@ def load_wdl_objects(
289289
def get_step_input_expr(
290290
self, wf_expr: Union[WDL.Expr.Get, WDL.Expr.String]
291291
) -> Tuple[str, Optional[str]]:
292-
"""Get name of expression referenced in workflow call inputs."""
292+
"""
293+
Get name of expression referenced in workflow call inputs.
294+
295+
Returns a tuple of the source plus any needed "valueFrom" expression.
296+
"""
293297
with WDLSourceLine(wf_expr, ConversionException):
294298
if isinstance(wf_expr, WDL.Expr.String):
295299
return self.get_expr_string(wf_expr)[1:-1], None
@@ -307,14 +311,22 @@ def get_step_input_expr(
307311
member = str(wf_expr.member)
308312
ident = cast(WDL.Expr.Ident, wf_expr.expr.expr)
309313
id_name = ident.name
314+
elif isinstance(wf_expr, WDL.Expr.Apply):
315+
expr_str = self.get_expr(wf_expr)
316+
if expr_str.count("inputs") == 1:
317+
id_name = re.match(r"inputs\.*?[ \.](.*?)[. ]", expr_str).groups()[
318+
0
319+
]
320+
value_from = "self" + expr_str.partition(f"inputs.{id_name}")[2]
321+
return id_name, value_from
310322
else:
311323
return get_literal_value(wf_expr), None
312324
return id_name, f"self.{member}" if member else None
313325

314326
def load_wdl_workflow(self, obj: WDL.Tree.Workflow) -> cwl.Workflow:
315327
"""Load WDL workflow and convert to CWL."""
316328
wf_name = obj.name
317-
requirements: List[cwl.ProcessRequirement] = []
329+
requirements: List[cwl.ProcessRequirement] = [cwl.InlineJavascriptRequirement()]
318330
inputs = self.get_cwl_workflow_inputs(obj.available_inputs, obj.parameter_meta)
319331
outputs = [
320332
cwl.WorkflowOutputParameter(

0 commit comments

Comments
 (0)