38
38
write_rst_header ,
39
39
write_rst_dict ,
40
40
write_rst_list ,
41
+ FileNotFoundError ,
41
42
)
42
43
from ...utils .misc import str2bool
43
44
from ...utils .functions import create_function_from_source
44
45
from ...interfaces .base .traits_extension import (
45
- rebase_path_traits , resolve_path_traits , OutputMultiPath , isdefined , Undefined , traits )
46
+ rebase_path_traits , resolve_path_traits , OutputMultiPath , isdefined , Undefined )
46
47
from ...interfaces .base .support import Bunch , InterfaceResult
47
48
from ...interfaces .base import CommandLine
48
49
from ...interfaces .utility import IdentityInterface
@@ -249,6 +250,10 @@ def save_resultfile(result, cwd, name, rebase=None):
249
250
savepkl (resultsfile , result )
250
251
return
251
252
253
+ if not rebase :
254
+ savepkl (resultsfile , result )
255
+ return
256
+
252
257
backup_traits = {}
253
258
try :
254
259
with indirectory (cwd ):
@@ -273,58 +278,44 @@ def load_resultfile(results_file, resolve=True):
273
278
"""
274
279
Load InterfaceResult file from path.
275
280
276
- Parameter
277
- ---------
278
- path : base_dir of node
279
- name : name of node
281
+ Parameters
282
+ ----------
283
+ results_file : pathlike
284
+ Path to an existing pickle (``result_<interface name>.pklz``) created with
285
+ ``save_resultfile``.
286
+ Raises ``FileNotFoundError`` if ``results_file`` does not exist.
287
+ resolve : bool
288
+ Determines whether relative paths will be resolved to absolute (default is ``True``).
280
289
281
290
Returns
282
291
-------
283
- result : InterfaceResult structure
284
- aggregate : boolean indicating whether node should aggregate_outputs
285
- attribute error : boolean indicating whether there was some mismatch in
286
- versions of traits used to store result and hence node needs to
287
- rerun
292
+ result : InterfaceResult
293
+ A Nipype object containing the runtime, inputs, outputs and other interface information
294
+ such as a traceback in the case of errors.
288
295
289
296
"""
290
297
results_file = Path (results_file )
291
- aggregate = True
292
- result = None
293
- attribute_error = False
294
-
295
298
if not results_file .exists ():
296
- return result , aggregate , attribute_error
299
+ raise FileNotFoundError ( results_file )
297
300
298
- with indirectory (str (results_file .parent )):
301
+ result = loadpkl (results_file )
302
+ if resolve and result .outputs :
299
303
try :
300
- result = loadpkl (results_file )
301
- except (traits .TraitError , EOFError ):
302
- logger .debug (
303
- 'some file does not exist. hence trait cannot be set' )
304
- except (AttributeError , ImportError ) as err :
305
- attribute_error = True
306
- logger .debug ('attribute error: %s probably using '
307
- 'different trait pickled file' , str (err ))
308
- else :
309
- aggregate = False
310
-
311
- if resolve and result .outputs :
312
- try :
313
- outputs = result .outputs .get ()
314
- except TypeError : # This is a Bunch
315
- return result , aggregate , attribute_error
316
-
317
- logger .debug ('Resolving paths in outputs loaded from results file.' )
318
- for trait_name , old in list (outputs .items ()):
319
- if isdefined (old ):
320
- if result .outputs .trait (trait_name ).is_trait_type (OutputMultiPath ):
321
- old = result .outputs .trait (trait_name ).handler .get_value (
322
- result .outputs , trait_name )
323
- value = resolve_path_traits (result .outputs .trait (trait_name ), old ,
324
- results_file .parent )
325
- setattr (result .outputs , trait_name , value )
326
-
327
- return result , aggregate , attribute_error
304
+ outputs = result .outputs .get ()
305
+ except TypeError : # This is a Bunch
306
+ logger .debug ('Outputs object of loaded result %s is a Bunch.' , results_file )
307
+ return result
308
+
309
+ logger .debug ('Resolving paths in outputs loaded from results file.' )
310
+ for trait_name , old in list (outputs .items ()):
311
+ if isdefined (old ):
312
+ if result .outputs .trait (trait_name ).is_trait_type (OutputMultiPath ):
313
+ old = result .outputs .trait (trait_name ).handler .get_value (
314
+ result .outputs , trait_name )
315
+ value = resolve_path_traits (result .outputs .trait (trait_name ), old ,
316
+ results_file .parent )
317
+ setattr (result .outputs , trait_name , value )
318
+ return result
328
319
329
320
330
321
def strip_temp (files , wd ):
0 commit comments