@@ -685,37 +685,33 @@ def loadpkl(infile):
685685
686686 unpkl = None
687687 with indirectory (infile .parent ):
688- with SoftFileLock (infile .name + '.lock' ):
689- pkl_file = pklopen (infile .name , 'rb' )
690-
691- try : # Look if pkl file contains version file
692- pkl_metadata_line = pkl_file .readline ()
693- pkl_metadata = json .loads (pkl_metadata_line )
694- except (UnicodeDecodeError , json .JSONDecodeError ):
695- # Could not get version info
696- pkl_file .seek (0 )
697-
698- try :
699- unpkl = pickle .load (pkl_file )
700- except UnicodeDecodeError :
701- # Was this pickle created with Python 2.x?
702- unpkl = pickle .load (pkl_file , fix_imports = True , encoding = 'utf-8' )
703- fmlogger .info ('Successfully loaded pkl in compatibility mode.' )
704- # Unpickling problems
705- except Exception as e :
706- if pkl_metadata and 'version' in pkl_metadata :
707- from nipype import __version__ as version
708- if pkl_metadata ['version' ] != version :
709- fmlogger .error ("""\
710- Attempted to open a results file generated by Nipype version %s, \
711- with an incompatible Nipype version (%s)""" , pkl_metadata ['version' ], version )
712- raise e
713- fmlogger .error ("""\
714- No metadata was found in the pkl file. Make sure you are currently using \
715- the same Nipype version from the generated pkl.""" )
716- raise e
717- finally :
718- pkl_file .close ()
688+ with SoftFileLock ('%s.lock' % infile .name ):
689+ with pklopen (infile .name , 'rb' ) as pkl_file :
690+ try : # Look if pkl file contains version file
691+ pkl_metadata_line = pkl_file .readline ()
692+ pkl_metadata = json .loads (pkl_metadata_line )
693+ except (UnicodeDecodeError , json .JSONDecodeError ):
694+ # Could not get version info
695+ pkl_file .seek (0 )
696+ try :
697+ unpkl = pickle .load (pkl_file )
698+ except UnicodeDecodeError :
699+ # Was this pickle created with Python 2.x?
700+ unpkl = pickle .load (pkl_file , fix_imports = True , encoding = 'utf-8' )
701+ fmlogger .info ('Successfully loaded pkl in compatibility mode.' )
702+ # Unpickling problems
703+ except Exception as e :
704+ if pkl_metadata and 'version' in pkl_metadata :
705+ from nipype import __version__ as version
706+ if pkl_metadata ['version' ] != version :
707+ fmlogger .error ("""\
708+ Attempted to open a results file generated by Nipype version %s, \
709+ with an incompatible Nipype version (%s)""" , pkl_metadata ['version' ], version )
710+ raise e
711+ fmlogger .error ("""\
712+ No metadata was found in the pkl file. Make sure you are currently using \
713+ the same Nipype version from the generated pkl.""" )
714+ raise e
719715
720716 if unpkl is None :
721717 raise ValueError ('Loading %s resulted in None.' % infile )
@@ -756,21 +752,17 @@ def read_stream(stream, logger=None, encoding=None):
756752
757753
758754def savepkl (filename , record , versioning = False ):
759- with SoftFileLock (filename + '.lock' ):
760- if filename .endswith ('pklz' ):
761- pkl_file = gzip .open (filename , 'wb' )
762- else :
763- pkl_file = open (filename , 'wb' )
764-
765- if versioning :
766- from nipype import __version__ as version
767- metadata = json .dumps ({'version' : version })
755+ pklopen = gzip .open if filename .endswith ('.pklz' ) else open
756+ with SoftFileLock ('%s.lock' % filename ):
757+ with pklopen (filename , 'wb' ) as pkl_file :
758+ if versioning :
759+ from nipype import __version__ as version
760+ metadata = json .dumps ({'version' : version })
768761
769- pkl_file .write (metadata .encode ('utf-8' ))
770- pkl_file .write ('\n ' .encode ('utf-8' ))
762+ pkl_file .write (metadata .encode ('utf-8' ))
763+ pkl_file .write ('\n ' .encode ('utf-8' ))
771764
772- pickle .dump (record , pkl_file )
773- pkl_file .close ()
765+ pickle .dump (record , pkl_file )
774766
775767
776768rst_levels = ['=' , '-' , '~' , '+' ]
0 commit comments