3232 to_str ,
3333 ensure_list ,
3434 get_related_files ,
35- FileNotFoundError ,
3635 save_json ,
3736 savepkl ,
3837 write_rst_header ,
4140)
4241from ...utils .misc import str2bool
4342from ...utils .functions import create_function_from_source
44- from ...interfaces .base .traits_extension import rebase_path_traits , resolve_path_traits
45- from ...interfaces .base import (Bunch , CommandLine , isdefined , Undefined ,
46- InterfaceResult , traits )
43+ from ...interfaces .base .traits_extension import (
44+ rebase_path_traits , resolve_path_traits , OutputMultiPath , isdefined , Undefined , traits )
45+ from ...interfaces .base .support import Bunch , InterfaceResult
46+ from ...interfaces .base import CommandLine
4747from ...interfaces .utility import IdentityInterface
4848from ...utils .provenance import ProvStore , pm , nipype_ns , get_id
4949
@@ -240,7 +240,7 @@ def save_resultfile(result, cwd, name, rebase=True):
240240 return
241241
242242 try :
243- outputs = result .outputs .trait_get ()
243+ output_names = result .outputs .copyable_trait_names ()
244244 except AttributeError :
245245 logger .debug ('Storing non-traited results, skipping rebase of paths' )
246246 savepkl (resultsfile , result )
@@ -250,9 +250,12 @@ def save_resultfile(result, cwd, name, rebase=True):
250250 try :
251251 with indirectory (cwd ):
252252 # All the magic to fix #2944 resides here:
253- for key , old in list (outputs .items ()):
253+ for key in output_names :
254+ old = getattr (result .outputs , key )
254255 if isdefined (old ):
255- old = result .outputs .trait (key ).handler .get_value (result .outputs , key )
256+ if result .outputs .trait (key ).is_trait_type (OutputMultiPath ):
257+ old = result .outputs .trait (key ).handler .get_value (
258+ result .outputs , key )
256259 backup_traits [key ] = old
257260 val = rebase_path_traits (result .outputs .trait (key ), old , cwd )
258261 setattr (result .outputs , key , val )
@@ -317,8 +320,9 @@ def load_resultfile(path, name, resolve=True):
317320 logger .debug ('Resolving paths in outputs loaded from results file.' )
318321 for trait_name , old in list (outputs .items ()):
319322 if isdefined (old ):
320- old = result .outputs .trait (trait_name ).handler .get_value (
321- result .outputs , trait_name )
323+ if result .outputs .trait (trait_name ).is_trait_type (OutputMultiPath ):
324+ old = result .outputs .trait (trait_name ).handler .get_value (
325+ result .outputs , trait_name )
322326 value = resolve_path_traits (result .outputs .trait (trait_name ), old , path )
323327 setattr (result .outputs , trait_name , value )
324328
0 commit comments