@@ -206,7 +206,7 @@ def output_callback(out, processStatus):
206206
207207    output_dirs  =  set ()
208208    finaloutdir  =  kwargs .get ("outdir" )
209-     kwargs ["outdir" ] =  tempfile .mkdtemp ()
209+     kwargs ["outdir" ] =  tempfile .mkdtemp (prefix = kwargs [ "tmp_outdir_prefix" ])  if   kwargs . get ( "tmp_outdir_prefix" )  else   tempfile . mkdtemp ( )
210210    output_dirs .add (kwargs ["outdir" ])
211211
212212    jobReqs  =  None 
@@ -678,20 +678,22 @@ def main(argsl=None,  # type: List[str]
678678        if  isinstance (tool , int ):
679679            return  tool 
680680
681-         if  args .tmp_outdir_prefix  !=  'tmp' :
682-             # Use user defined temp directory (if it exists) 
683-             setattr (args , 'tmp_outdir_prefix' ,
684-                     os .path .abspath (args .tmp_outdir_prefix ))
685-             if  not  os .path .exists (args .tmp_outdir_prefix ):
686-                 _logger .error ("Intermediate output directory prefix doesn't exist." )
687-                 return  1 
681+         for  dirprefix  in  ("tmpdir_prefix" , "tmp_outdir_prefix" , "cachedir" ):
682+             if  getattr (args , dirprefix ) and  getattr (args , dirprefix ) !=  'tmp' :
683+                 sl  =  "/"  if  getattr (args , dirprefix ).endswith ("/" ) or  dirprefix  ==  "cachedir"  else  "" 
684+                 setattr (args , dirprefix ,
685+                         os .path .abspath (getattr (args , dirprefix ))+ sl )
686+                 if  not  os .path .exists (os .path .dirname (getattr (args , dirprefix ))):
687+                     try :
688+                         os .makedirs (os .path .dirname (getattr (args , dirprefix )))
689+                     except  Exception  as  e :
690+                         _logger .error ("Failed to create directory: %s" , e )
691+                         return  1 
688692
689-         if  args .tmpdir_prefix  !=  'tmp' :
690-             # Use user defined prefix (if the folder exists) 
691-             setattr (args , 'tmpdir_prefix' , os .path .abspath (args .tmpdir_prefix ))
692-             if  not  os .path .exists (args .tmpdir_prefix ):
693-                 _logger .error ("Temporary directory prefix doesn't exist." )
694-                 return  1 
693+         if  args .cachedir :
694+             if  args .move_outputs  ==  "move" :
695+                 setattr (args , 'move_outputs' , "copy" )
696+             setattr (args , "tmp_outdir_prefix" , args .cachedir )
695697
696698        if  job_order_object  is  None :
697699            job_order_object  =  load_job_order (args , tool , stdin ,
@@ -703,14 +705,7 @@ def main(argsl=None,  # type: List[str]
703705        if  isinstance (job_order_object , int ):
704706            return  job_order_object 
705707
706-         if  args .cachedir :
707-             setattr (args , 'cachedir' , os .path .abspath (args .cachedir ))
708-             if  args .move_outputs  ==  "move" :
709-                 setattr (args , 'move_outputs' , "copy" )
710- 
711708        try :
712-             setattr (args , 'tmp_outdir_prefix' ,
713-                     args .cachedir  if  args .cachedir  else  args .tmp_outdir_prefix )
714709            setattr (args , 'basedir' , job_order_object [1 ])
715710            del  args .workflow 
716711            del  args .job_order 
0 commit comments