@@ -230,19 +230,20 @@ def output_callback(out, processStatus):
230
230
output_dirs .add (kwargs ["outdir" ])
231
231
kwargs ["mutation_manager" ] = MutationManager ()
232
232
233
- jobReqs = []
233
+ jobReqs = None
234
234
if "cwl:requirements" in job_order_object :
235
235
jobReqs = job_order_object ["cwl:requirements" ]
236
236
del job_order_object ["cwl:requirements" ]
237
237
elif ("cwl:defaults" in t .metadata and "cwl:requirements" in t .metadata ["cwl:defaults" ]):
238
238
jobReqs = t .metadata ["cwl:defaults" ]["cwl:requirements" ]
239
+ if jobReqs :
240
+ for req in jobReqs :
241
+ t .requirements .append (req )
239
242
240
243
if "http://commonwl.org/cwltool#overrides" in job_order_object :
241
244
kwargs ["overrides" ] = resolve_overrides (job_order_object , t .tool ["id" ])
242
245
del job_order_object ["http://commonwl.org/cwltool#overrides" ]
243
246
244
- kwargs ["requirements" ] = jobReqs
245
-
246
247
if kwargs .get ("default_container" ):
247
248
t .requirements .insert (0 , {
248
249
"class" : "DockerRequirement" ,
@@ -428,15 +429,12 @@ def generate_parser(toolparser, tool, namemap, records):
428
429
return toolparser
429
430
430
431
431
- def load_job_order (args , t , stdin , print_input_deps = False , relative_deps = False ,
432
- stdout = sys .stdout , make_fs_access = None , fetcher_constructor = None ):
432
+ def load_job_order (args , stdin , fetcher_constructor = None ):
433
433
# type: (argparse.Namespace, Process, IO[Any], bool, bool, IO[Any], Callable[[Text], StdFsAccess], Callable[[Dict[unicode, unicode], requests.sessions.Session], Fetcher]) -> Union[int, Tuple[Dict[Text, Any], Text]]
434
434
435
- job_order_object = None
435
+ job_order_object = {}
436
436
437
- _jobloaderctx = jobloaderctx .copy ()
438
- _jobloaderctx .update (t .metadata .get ("$namespaces" , {}))
439
- loader = Loader (_jobloaderctx , fetcher_constructor = fetcher_constructor )
437
+ loader = Loader (jobloaderctx , fetcher_constructor = fetcher_constructor )
440
438
441
439
if len (args .job_order ) == 1 and args .job_order [0 ][0 ] != "-" :
442
440
job_order_file = args .job_order [0 ]
@@ -454,48 +452,53 @@ def load_job_order(args, t, stdin, print_input_deps=False, relative_deps=False,
454
452
job_order_object , _ = loader .resolve_ref (job_order_file , checklinks = False )
455
453
except Exception as e :
456
454
_logger .error (Text (e ), exc_info = args .debug )
457
- return 1
455
+ return ( 1 , None )
458
456
toolparser = None
459
- else :
460
- input_basedir = args .basedir if args .basedir else os .getcwd ()
461
- namemap = {} # type: Dict[Text, Text]
462
- records = [] # type: List[Text]
463
- toolparser = generate_parser (
464
- argparse .ArgumentParser (prog = args .workflow ), t , namemap , records )
465
- if toolparser :
466
- if args .tool_help :
467
- toolparser .print_help ()
468
- return 0
469
- cmd_line = vars (toolparser .parse_args (args .job_order ))
470
- for record_name in records :
471
- record = {}
472
- record_items = {
473
- k : v for k , v in cmd_line .iteritems ()
474
- if k .startswith (record_name )}
475
- for key , value in record_items .iteritems ():
476
- record [key [len (record_name ) + 1 :]] = value
477
- del cmd_line [key ]
478
- cmd_line [str (record_name )] = record
479
-
480
- if cmd_line ["job_order" ]:
481
- try :
482
- input_basedir = args .basedir if args .basedir else os .path .abspath (
483
- os .path .dirname (cmd_line ["job_order" ]))
484
- job_order_object = loader .resolve_ref (cmd_line ["job_order" ])
485
- except Exception as e :
486
- _logger .error (Text (e ), exc_info = args .debug )
487
- return 1
488
- else :
489
- job_order_object = {"id" : args .workflow }
490
457
491
- del cmd_line ["job_order" ]
458
+ return (job_order_object , loader )
459
+
460
+ def job_order_from_command_line (args , t , loader , input_basedir ,
461
+ print_input_deps = False ,
462
+ relative_deps = False ,
463
+ stdout = sys .stdout ):
464
+ namemap = {} # type: Dict[Text, Text]
465
+ records = [] # type: List[Text]
466
+ toolparser = generate_parser (
467
+ argparse .ArgumentParser (prog = args .workflow ), t , namemap , records )
468
+ if toolparser :
469
+ if args .tool_help :
470
+ toolparser .print_help ()
471
+ return 0
472
+ cmd_line = vars (toolparser .parse_args (args .job_order ))
473
+ for record_name in records :
474
+ record = {}
475
+ record_items = {
476
+ k : v for k , v in cmd_line .iteritems ()
477
+ if k .startswith (record_name )}
478
+ for key , value in record_items .iteritems ():
479
+ record [key [len (record_name ) + 1 :]] = value
480
+ del cmd_line [key ]
481
+ cmd_line [str (record_name )] = record
482
+
483
+ if cmd_line ["job_order" ]:
484
+ try :
485
+ input_basedir = args .basedir if args .basedir else os .path .abspath (
486
+ os .path .dirname (cmd_line ["job_order" ]))
487
+ job_order_object , _ = loader .resolve_ref (cmd_line ["job_order" ])
488
+ except Exception as e :
489
+ _logger .error (Text (e ), exc_info = args .debug )
490
+ return 1
491
+ else :
492
+ job_order_object = {"id" : args .workflow }
492
493
493
- job_order_object . update ({ namemap [ k ]: v for k , v in cmd_line . items ()})
494
+ del cmd_line [ "job_order" ]
494
495
495
- if _logger .isEnabledFor (logging .DEBUG ):
496
- _logger .debug (u"Parsed job order from command line: %s" , json .dumps (job_order_object , indent = 4 ))
497
- else :
498
- job_order_object = None
496
+ job_order_object .update ({namemap [k ]: v for k , v in cmd_line .items ()})
497
+
498
+ if _logger .isEnabledFor (logging .DEBUG ):
499
+ _logger .debug (u"Parsed job order from command line: %s" , json .dumps (job_order_object , indent = 4 ))
500
+ else :
501
+ job_order_object = {}
499
502
500
503
for inp in t .tool ["inputs" ]:
501
504
if "default" in inp and (not job_order_object or shortname (inp ["id" ]) not in job_order_object ):
@@ -509,13 +512,16 @@ def load_job_order(args, t, stdin, print_input_deps=False, relative_deps=False,
509
512
toolparser .print_help ()
510
513
_logger .error ("" )
511
514
_logger .error ("Input object required, use --help for details" )
512
- return 1
515
+ return ( 1 , None )
513
516
514
517
if print_input_deps :
515
518
printdeps (job_order_object , loader , stdout , relative_deps , "" ,
516
519
basedir = file_uri (input_basedir + "/" ))
517
- return 0
520
+ return ( 0 , None )
518
521
522
+ return (job_order_object , input_basedir )
523
+
524
+ def normalize_job_order (job_order_object ):
519
525
def pathToLoc (p ):
520
526
if "location" not in p and "path" in p :
521
527
p ["location" ] = p ["path" ]
@@ -530,8 +536,6 @@ def pathToLoc(p):
530
536
if "id" in job_order_object :
531
537
del job_order_object ["id" ]
532
538
533
- return (job_order_object , input_basedir )
534
-
535
539
536
540
def makeRelative (base , ob ):
537
541
u = ob .get ("location" , ob .get ("path" ))
@@ -701,6 +705,21 @@ def main(argsl=None, # type: List[str]
701
705
else :
702
706
use_standard_schema ("v1.0" )
703
707
708
+ try :
709
+ if job_order_object is None :
710
+ job_order_object , job_order_loader = load_job_order (args , stdin ,
711
+ fetcher_constructor = fetcher_constructor )
712
+ else :
713
+ job_order_loader = None
714
+ except SystemExit as e :
715
+ return e .code
716
+
717
+ if isinstance (job_order_object , int ):
718
+ return job_order_object
719
+
720
+ if args .overrides :
721
+ args .overrides = load_overrides (file_uri (os .path .abspath (args .overrides )), args .workflow )
722
+
704
723
try :
705
724
document_loader , workflowobj , uri = fetch_document (args .workflow , resolver = resolver ,
706
725
fetcher_constructor = fetcher_constructor )
@@ -774,28 +793,23 @@ def main(argsl=None, # type: List[str]
774
793
setattr (args , 'move_outputs' , "copy" )
775
794
setattr (args , "tmp_outdir_prefix" , args .cachedir )
776
795
777
- try :
778
- if job_order_object is None :
779
- job_order_object = load_job_order (args , tool , stdin ,
780
- print_input_deps = args .print_input_deps ,
781
- relative_deps = args .relative_deps ,
782
- stdout = stdout ,
783
- make_fs_access = make_fs_access ,
784
- fetcher_constructor = fetcher_constructor )
785
- except SystemExit as e :
786
- return e .code
787
-
788
- if isinstance (job_order_object , int ):
789
- return job_order_object
796
+ input_basedir = args .basedir if args .basedir else os .getcwd ()
797
+ if job_order_loader :
798
+ jofc , input_basedir = job_order_from_command_line (args , tool , job_order_loader , input_basedir ,
799
+ print_input_deps = args .print_input_deps ,
800
+ relative_deps = args .relative_deps ,
801
+ stdout = stdout )
802
+ if isinstance (jofc , int ):
803
+ return jofc
804
+ job_order_object .update (jofc )
790
805
791
- if args .overrides :
792
- args .overrides = load_overrides (file_uri (os .path .abspath (args .overrides )), tool .tool ["id" ])
806
+ normalize_job_order (job_order_object )
793
807
794
808
try :
795
- setattr (args , 'basedir' , job_order_object [ 1 ] )
809
+ setattr (args , 'basedir' , input_basedir )
796
810
del args .workflow
797
811
del args .job_order
798
- (out , status ) = executor (tool , job_order_object [ 0 ] ,
812
+ (out , status ) = executor (tool , job_order_object ,
799
813
makeTool = makeTool ,
800
814
select_resources = selectResources ,
801
815
make_fs_access = make_fs_access ,
0 commit comments