Skip to content

Commit fdf12b7

Browse files
committed
fix: address review comments
1 parent 26b0eb6 commit fdf12b7

File tree

1 file changed

+36
-44
lines changed

1 file changed

+36
-44
lines changed

nipype/utils/filemanip.py

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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

758754
def 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

776768
rst_levels = ['=', '-', '~', '+']

0 commit comments

Comments
 (0)