@@ -241,7 +241,6 @@ def output_callback(out, processStatus):
241
241
242
242
return final_output [0 ]
243
243
244
-
245
244
class FSAction (argparse .Action ):
246
245
objclass = None # type: Text
247
246
@@ -294,8 +293,9 @@ class DirectoryAppendAction(FSAppendAction):
294
293
objclass = "Directory"
295
294
296
295
297
- def add_argument (toolparser , name , inptype , description = "" , default = None ):
298
- # type: (argparse.ArgumentParser, Text, Any, Text, Any) -> None
296
+ def add_argument (toolparser , name , inptype , records , description = "" ,
297
+ default = None ):
298
+ # type: (argparse.ArgumentParser, Text, Any, List[Text], Text, Any) -> None
299
299
if len (name ) == 1 :
300
300
flag = "-"
301
301
else :
@@ -329,12 +329,14 @@ def add_argument(toolparser, name, inptype, description="", default=None):
329
329
elif isinstance (inptype , dict ) and inptype ["type" ] == "enum" :
330
330
atype = Text
331
331
elif isinstance (inptype , dict ) and inptype ["type" ] == "record" :
332
+ records .append (name )
332
333
for field in inptype ['fields' ]:
333
334
fieldname = name + "." + shortname (field ['name' ])
334
335
fieldtype = field ['type' ]
335
336
fielddescription = field .get ("doc" , "" )
336
337
add_argument (
337
- toolparser , fieldname , fieldtype , fielddescription )
338
+ toolparser , fieldname , fieldtype , records ,
339
+ fielddescription )
338
340
return
339
341
if inptype == "string" :
340
342
atype = Text
@@ -364,8 +366,8 @@ def add_argument(toolparser, name, inptype, description="", default=None):
364
366
default = default , ** typekw )
365
367
366
368
367
- def generate_parser (toolparser , tool , namemap ):
368
- # type: (argparse.ArgumentParser, Process, Dict[Text, Text]) -> argparse.ArgumentParser
369
+ def generate_parser (toolparser , tool , namemap , records ):
370
+ # type: (argparse.ArgumentParser, Process, Dict[Text, Text], List[Text] ) -> argparse.ArgumentParser
369
371
toolparser .add_argument ("job_order" , nargs = "?" , help = "Job input json file" )
370
372
namemap ["job_order" ] = "job_order"
371
373
@@ -375,7 +377,7 @@ def generate_parser(toolparser, tool, namemap):
375
377
inptype = inp ["type" ]
376
378
description = inp .get ("doc" , "" )
377
379
default = inp .get ("default" , None )
378
- add_argument (toolparser , name , inptype , description , default )
380
+ add_argument (toolparser , name , inptype , records , description , default )
379
381
380
382
return toolparser
381
383
@@ -418,12 +420,23 @@ def load_job_order(args, t, stdin, print_input_deps=False, relative_deps=False,
418
420
else :
419
421
input_basedir = args .basedir if args .basedir else os .getcwd ()
420
422
namemap = {} # type: Dict[Text, Text]
421
- toolparser = generate_parser (argparse .ArgumentParser (prog = args .workflow ), t , namemap )
423
+ records = [] # type: List[Text]
424
+ toolparser = generate_parser (
425
+ argparse .ArgumentParser (prog = args .workflow ), t , namemap , records )
422
426
if toolparser :
423
427
if args .tool_help :
424
428
toolparser .print_help ()
425
429
return 0
426
430
cmd_line = vars (toolparser .parse_args (args .job_order ))
431
+ for record_name in records :
432
+ record = {}
433
+ record_items = {
434
+ k :v for k ,v in cmd_line .iteritems ()
435
+ if k .startswith (record_name )}
436
+ for key , value in record_items .iteritems ():
437
+ record [key [len (record_name )+ 1 :]] = value
438
+ del cmd_line [key ]
439
+ cmd_line [str (record_name )] = record
427
440
428
441
if cmd_line ["job_order" ]:
429
442
try :
0 commit comments