@@ -208,89 +208,91 @@ def traverse(
208
208
skip_command_line2 : bool ,
209
209
) -> tuple [cwl .CommandLineTool | cwl .ExpressionTool | cwl .Workflow , bool ]:
210
210
"""Convert the given process and any subprocesses."""
211
- if not inside and isinstance (process , cwl .CommandLineTool ):
212
- process = expand_stream_shortcuts (process )
213
- wf_inputs = []
214
- wf_outputs = []
215
- step_inputs = []
216
- step_outputs = []
217
- if process .inputs :
218
- for inp in process .inputs :
219
- inp_id = inp .id .split ("#" )[- 1 ]
220
- step_inputs .append (
221
- cwl .WorkflowStepInput (
222
- id = inp_id ,
223
- source = inp_id ,
224
- extension_fields = inp .extension_fields ,
225
- loadingOptions = inp .loadingOptions ,
211
+ match process :
212
+ case cwl .CommandLineTool () if not inside :
213
+ process = expand_stream_shortcuts (process )
214
+ wf_inputs = []
215
+ wf_outputs = []
216
+ step_inputs = []
217
+ step_outputs = []
218
+ if process .inputs :
219
+ for inp in process .inputs :
220
+ inp_id = inp .id .split ("#" )[- 1 ]
221
+ step_inputs .append (
222
+ cwl .WorkflowStepInput (
223
+ id = inp_id ,
224
+ source = inp_id ,
225
+ extension_fields = inp .extension_fields ,
226
+ loadingOptions = inp .loadingOptions ,
227
+ )
226
228
)
227
- )
228
- wf_inputs . append (
229
- cwl . InputParameter (
230
- id = inp_id ,
231
- label = inp .label ,
232
- secondaryFiles = inp .secondaryFiles ,
233
- streamable = inp .streamable ,
234
- doc = inp .doc ,
235
- format = inp .format ,
236
- default = inp .default ,
237
- type_ = inp .type_ ,
238
- extension_fields = inp .extension_fields ,
239
- loadingOptions = inp . loadingOptions ,
229
+ wf_inputs . append (
230
+ cwl . InputParameter (
231
+ id = inp_id ,
232
+ label = inp . label ,
233
+ secondaryFiles = inp .secondaryFiles ,
234
+ streamable = inp .streamable ,
235
+ doc = inp .doc ,
236
+ format = inp .format ,
237
+ default = inp .default ,
238
+ type_ = inp .type_ ,
239
+ extension_fields = inp .extension_fields ,
240
+ loadingOptions = inp .loadingOptions ,
241
+ )
240
242
)
241
- )
242
- if process .outputs :
243
- for outp in process . outputs :
244
- outp_id = outp . id . split ( "#" )[ - 1 ]
245
- step_outputs .append (outp_id )
246
- wf_outputs . append (
247
- cwl . WorkflowOutputParameter (
248
- id = outp_id ,
249
- label = outp .label ,
250
- secondaryFiles = outp .secondaryFiles ,
251
- streamable = outp .streamable ,
252
- doc = outp .doc ,
253
- format = outp . format ,
254
- outputSource = f"main/ { outp_id } " ,
255
- type_ = outp .type_ ,
256
- extension_fields = outp .extension_fields ,
257
- loadingOptions = outp . loadingOptions ,
243
+ if process . outputs :
244
+ for outp in process .outputs :
245
+ outp_id = outp . id . split ( "#" )[ - 1 ]
246
+ step_outputs . append ( outp_id )
247
+ wf_outputs .append (
248
+ cwl . WorkflowOutputParameter (
249
+ id = outp_id ,
250
+ label = outp . label ,
251
+ secondaryFiles = outp .secondaryFiles ,
252
+ streamable = outp .streamable ,
253
+ doc = outp .doc ,
254
+ format = outp .format ,
255
+ outputSource = f"main/ { outp_id } " ,
256
+ type_ = outp . type_ ,
257
+ extension_fields = outp .extension_fields ,
258
+ loadingOptions = outp .loadingOptions ,
259
+ )
258
260
)
259
- )
260
- step = cwl .WorkflowStep (
261
- id = "#main" ,
262
- in_ = step_inputs ,
263
- out = step_outputs ,
264
- run = copy .deepcopy (process ),
265
- )
266
- workflow = cwl .Workflow (
267
- inputs = wf_inputs ,
268
- outputs = wf_outputs ,
269
- steps = [step ],
270
- cwlVersion = process .cwlVersion ,
271
- )
272
- result , modified = traverse_workflow (
273
- workflow , replace_etool , skip_command_line1 , skip_command_line2
274
- )
275
- if modified :
276
- return result , True
277
- else :
261
+ step = cwl .WorkflowStep (
262
+ id = "#main" ,
263
+ in_ = step_inputs ,
264
+ out = step_outputs ,
265
+ run = copy .deepcopy (process ),
266
+ )
267
+ workflow = cwl .Workflow (
268
+ inputs = wf_inputs ,
269
+ outputs = wf_outputs ,
270
+ steps = [step ],
271
+ cwlVersion = process .cwlVersion ,
272
+ )
273
+ result , modified = traverse_workflow (
274
+ workflow , replace_etool , skip_command_line1 , skip_command_line2
275
+ )
276
+ if modified :
277
+ return result , True
278
+ else :
279
+ return process , False
280
+ case cwl .ExpressionTool () if replace_etool :
281
+ expression = get_expression (process .expression , empty_inputs (process ), None )
282
+ # Why call get_expression on an ExpressionTool?
283
+ # It normalizes the form of $() CWL expressions into the ${} style
284
+ if expression :
285
+ process2 = copy .deepcopy (process )
286
+ process2 .expression = expression
287
+ else :
288
+ process2 = process
289
+ return etool_to_cltool (process2 ), True
290
+ case cwl .Workflow ():
291
+ return traverse_workflow (
292
+ process , replace_etool , skip_command_line1 , skip_command_line2
293
+ )
294
+ case _:
278
295
return process , False
279
- if isinstance (process , cwl .ExpressionTool ) and replace_etool :
280
- expression = get_expression (process .expression , empty_inputs (process ), None )
281
- # Why call get_expression on an ExpressionTool?
282
- # It normalizes the form of $() CWL expressions into the ${} style
283
- if expression :
284
- process2 = copy .deepcopy (process )
285
- process2 .expression = expression
286
- else :
287
- process2 = process
288
- return etool_to_cltool (process2 ), True
289
- if isinstance (process , cwl .Workflow ):
290
- return traverse_workflow (
291
- process , replace_etool , skip_command_line1 , skip_command_line2
292
- )
293
- return process , False
294
296
295
297
296
298
def load_step (
@@ -668,8 +670,8 @@ def process_workflow_reqs_and_hints(
668
670
iwdr : cwl .InitialWorkDirRequirement | None = None
669
671
if workflow .requirements is not None :
670
672
for req in cast (list [cwl .ProcessRequirement ], workflow .requirements ):
671
- if req and isinstance ( req , cwl . EnvVarRequirement ) :
672
- if req .envDef :
673
+ match req :
674
+ case cwl . EnvVarRequirement () if req .envDef :
673
675
for index , envDef in enumerate (req .envDef ):
674
676
if envDef .envValue :
675
677
expression = get_expression (envDef .envValue , inputs , None )
@@ -699,36 +701,33 @@ def process_workflow_reqs_and_hints(
699
701
newEnvDef .envValue = f"$(inputs._envDef{ index } )"
700
702
envVarReq .envDef [index ] = newEnvDef
701
703
generated_envVar_reqs .append ((etool_id , index ))
702
- if req and isinstance (req , cwl .ResourceRequirement ):
703
- for attr in cwl .ResourceRequirement .attrs :
704
- this_attr = getattr (req , attr , None )
705
- if this_attr :
706
- expression = get_expression (this_attr , inputs , None )
707
- if expression :
708
- modified = True
709
- target = cwl .InputParameter (id = None , type_ = "long" )
710
- etool_id = (
711
- "_expression_workflow_ResourceRequirement_{}" .format (
704
+ case cwl .ResourceRequirement ():
705
+ for attr in cwl .ResourceRequirement .attrs :
706
+ this_attr = getattr (req , attr , None )
707
+ if this_attr :
708
+ expression = get_expression (this_attr , inputs , None )
709
+ if expression :
710
+ modified = True
711
+ target = cwl .InputParameter (id = None , type_ = "long" )
712
+ etool_id = "_expression_workflow_ResourceRequirement_{}" .format (
712
713
attr
713
714
)
714
- )
715
- replace_expr_with_etool (
716
- expression ,
717
- etool_id ,
718
- workflow ,
719
- target ,
720
- None ,
721
- replace_etool ,
722
- )
723
- if not resourceReq :
724
- resourceReq = cwl .ResourceRequirement (
725
- loadingOptions = workflow .loadingOptions ,
715
+ replace_expr_with_etool (
716
+ expression ,
717
+ etool_id ,
718
+ workflow ,
719
+ target ,
720
+ None ,
721
+ replace_etool ,
726
722
)
727
- prop_reqs += (cwl .ResourceRequirement ,)
728
- setattr (resourceReq , attr , f"$(inputs._{ attr } )" )
729
- generated_res_reqs .append ((etool_id , attr ))
730
- if req and isinstance (req , cwl .InitialWorkDirRequirement ):
731
- if req .listing :
723
+ if not resourceReq :
724
+ resourceReq = cwl .ResourceRequirement (
725
+ loadingOptions = workflow .loadingOptions ,
726
+ )
727
+ prop_reqs += (cwl .ResourceRequirement ,)
728
+ setattr (resourceReq , attr , f"$(inputs._{ attr } )" )
729
+ generated_res_reqs .append ((etool_id , attr ))
730
+ case cwl .InitialWorkDirRequirement () if req .listing :
732
731
if isinstance (req .listing , str ):
733
732
expression = get_expression (req .listing , inputs , None )
734
733
if expression :
@@ -991,8 +990,8 @@ def process_level_reqs(
991
990
return False
992
991
step_name = step .id .split ("#" , 1 )[- 1 ]
993
992
for req_index , req in enumerate (process .requirements ):
994
- if req and isinstance ( req , cwl . EnvVarRequirement ) :
995
- if req .envDef :
993
+ match req :
994
+ case cwl . EnvVarRequirement () if req .envDef :
996
995
for env_index , envDef in enumerate (req .envDef ):
997
996
if envDef .envValue :
998
997
expression = get_expression (envDef .envValue , inputs , None )
@@ -1015,33 +1014,35 @@ def process_level_reqs(
1015
1014
env_index
1016
1015
].envValue = f"$(inputs._envDef{ env_index } )"
1017
1016
generated_envVar_reqs .append ((etool_id , env_index ))
1018
- if req and isinstance (req , cwl .ResourceRequirement ):
1019
- for attr in cwl .ResourceRequirement .attrs :
1020
- this_attr = getattr (req , attr , None )
1021
- if this_attr :
1022
- expression = get_expression (this_attr , inputs , None )
1023
- if expression :
1024
- modified = True
1025
- target = cwl .InputParameter (id = None , type_ = "long" )
1026
- etool_id = "_expression_{}_ResourceRequirement_{}" .format (
1027
- step_name , attr
1028
- )
1029
- replace_clt_hintreq_expr_with_etool (
1030
- expression , etool_id , parent , target , step , replace_etool
1031
- )
1032
- setattr (
1033
- target_process .requirements [req_index ],
1034
- attr ,
1035
- f"$(inputs._{ attr } )" ,
1036
- )
1037
- generated_res_reqs .append ((etool_id , attr ))
1038
-
1039
- if (
1040
- not skip_command_line2
1041
- and req
1042
- and isinstance (req , cwl .InitialWorkDirRequirement )
1043
- ):
1044
- if req .listing :
1017
+ case cwl .ResourceRequirement ():
1018
+ for attr in cwl .ResourceRequirement .attrs :
1019
+ this_attr = getattr (req , attr , None )
1020
+ if this_attr :
1021
+ expression = get_expression (this_attr , inputs , None )
1022
+ if expression :
1023
+ modified = True
1024
+ target = cwl .InputParameter (id = None , type_ = "long" )
1025
+ etool_id = "_expression_{}_ResourceRequirement_{}" .format (
1026
+ step_name , attr
1027
+ )
1028
+ replace_clt_hintreq_expr_with_etool (
1029
+ expression ,
1030
+ etool_id ,
1031
+ parent ,
1032
+ target ,
1033
+ step ,
1034
+ replace_etool ,
1035
+ )
1036
+ setattr (
1037
+ target_process .requirements [req_index ],
1038
+ attr ,
1039
+ f"$(inputs._{ attr } )" ,
1040
+ )
1041
+ generated_res_reqs .append ((etool_id , attr ))
1042
+
1043
+ case cwl .InitialWorkDirRequirement () if (
1044
+ not skip_command_line2 and req .listing
1045
+ ):
1045
1046
if isinstance (req .listing , str ):
1046
1047
expression = get_expression (req .listing , inputs , None )
1047
1048
if expression :
0 commit comments