3838 write_rst_header ,
3939 write_rst_dict ,
4040 write_rst_list ,
41+ FileNotFoundError ,
4142)
4243from ...utils .misc import str2bool
4344from ...utils .functions import create_function_from_source
4445from ...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 )
4647from ...interfaces .base .support import Bunch , InterfaceResult
4748from ...interfaces .base import CommandLine
4849from ...interfaces .utility import IdentityInterface
@@ -249,6 +250,10 @@ def save_resultfile(result, cwd, name, rebase=None):
249250 savepkl (resultsfile , result )
250251 return
251252
253+ if not rebase :
254+ savepkl (resultsfile , result )
255+ return
256+
252257 backup_traits = {}
253258 try :
254259 with indirectory (cwd ):
@@ -273,58 +278,44 @@ def load_resultfile(results_file, resolve=True):
273278 """
274279 Load InterfaceResult file from path.
275280
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``).
280289
281290 Returns
282291 -------
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.
288295
289296 """
290297 results_file = Path (results_file )
291- aggregate = True
292- result = None
293- attribute_error = False
294-
295298 if not results_file .exists ():
296- return result , aggregate , attribute_error
299+ raise FileNotFoundError ( results_file )
297300
298- with indirectory (str (results_file .parent )):
301+ result = loadpkl (results_file )
302+ if resolve and result .outputs :
299303 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
328319
329320
330321def strip_temp (files , wd ):
0 commit comments