[utils] Jython support: tolerate missing fcntl module

This commit is contained in:
Yen Chi Hsuan 2016-02-21 03:28:25 +08:00
parent 7360db05b4
commit 399a76e67b
1 changed files with 15 additions and 5 deletions

View File

@ -1217,13 +1217,23 @@ if sys.platform == 'win32':
raise OSError('Unlocking file failed: %r' % ctypes.FormatError()) raise OSError('Unlocking file failed: %r' % ctypes.FormatError())
else: else:
import fcntl # Some platforms, such as Jython, is missing fcntl
try:
import fcntl
def _lock_file(f, exclusive): def _lock_file(f, exclusive):
fcntl.flock(f, fcntl.LOCK_EX if exclusive else fcntl.LOCK_SH) fcntl.flock(f, fcntl.LOCK_EX if exclusive else fcntl.LOCK_SH)
def _unlock_file(f): def _unlock_file(f):
fcntl.flock(f, fcntl.LOCK_UN) fcntl.flock(f, fcntl.LOCK_UN)
except ImportError:
UNSUPPORTED_MSG = 'file locking is not supported on this platform'
def _lock_file(f, exclusive):
raise IOError(UNSUPPORTED_MSG)
def _unlock_file(f):
raise IOError(UNSUPPORTED_MSG)
class locked_file(object): class locked_file(object):