41
41
)
42
42
from ...utils .misc import str2bool
43
43
from ...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 )
44
+ from ...interfaces .base .traits_extension import (
45
+ rebase_path_traits , resolve_path_traits , OutputMultiPath , isdefined , Undefined , traits )
46
+ from ...interfaces .base .support import Bunch , InterfaceResult
47
+ from ...interfaces .base import CommandLine
47
48
from ...interfaces .utility import IdentityInterface
48
49
from ...utils .provenance import ProvStore , pm , nipype_ns , get_id
49
50
@@ -239,7 +240,7 @@ def save_resultfile(result, cwd, name, rebase=True):
239
240
savepkl (resultsfile , result )
240
241
return
241
242
try :
242
- outputs = result .outputs .trait_get ()
243
+ output_names = result .outputs .copyable_trait_names ()
243
244
except AttributeError :
244
245
logger .debug ('Storing non-traited results, skipping rebase of paths' )
245
246
savepkl (resultsfile , result )
@@ -249,9 +250,12 @@ def save_resultfile(result, cwd, name, rebase=True):
249
250
try :
250
251
with indirectory (cwd ):
251
252
# All the magic to fix #2944 resides here:
252
- for key , old in list (outputs .items ()):
253
+ for key in output_names :
254
+ old = getattr (result .outputs , key )
253
255
if isdefined (old ):
254
- 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 )
255
259
backup_traits [key ] = old
256
260
val = rebase_path_traits (result .outputs .trait (key ), old , cwd )
257
261
setattr (result .outputs , key , val )
@@ -310,8 +314,9 @@ def load_resultfile(results_file, resolve=True):
310
314
logger .debug ('Resolving paths in outputs loaded from results file.' )
311
315
for trait_name , old in list (outputs .items ()):
312
316
if isdefined (old ):
313
- old = result .outputs .trait (trait_name ).handler .get_value (
314
- result .outputs , trait_name )
317
+ if result .outputs .trait (trait_name ).is_trait_type (OutputMultiPath ):
318
+ old = result .outputs .trait (trait_name ).handler .get_value (
319
+ result .outputs , trait_name )
315
320
value = resolve_path_traits (result .outputs .trait (trait_name ), old ,
316
321
results_file .parent )
317
322
setattr (result .outputs , trait_name , value )
0 commit comments