mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
pep8
This commit is contained in:
parent
0b9aa7d119
commit
f8202dc3e3
@ -1,7 +1,6 @@
|
|||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Secure access to locked files from multiple processes.
|
Secure access to locked files from multiple processes.
|
||||||
'''
|
'''
|
||||||
@ -24,7 +23,8 @@ class WindowsExclFile(object):
|
|||||||
while timeout > 0:
|
while timeout > 0:
|
||||||
timeout -= 1
|
timeout -= 1
|
||||||
try:
|
try:
|
||||||
self._handle = w.CreateFile(path,
|
self._handle = w.CreateFile(
|
||||||
|
path,
|
||||||
w.GENERIC_READ | w.GENERIC_WRITE, # Open for reading and writing
|
w.GENERIC_READ | w.GENERIC_WRITE, # Open for reading and writing
|
||||||
0, # Open exclusive
|
0, # Open exclusive
|
||||||
None, # No security attributes, ensures handle is not inherited by children
|
None, # No security attributes, ensures handle is not inherited by children
|
||||||
@ -118,15 +118,24 @@ def unix_open(path):
|
|||||||
has_cloexec = False
|
has_cloexec = False
|
||||||
if hasattr(speedup, 'O_CLOEXEC'):
|
if hasattr(speedup, 'O_CLOEXEC'):
|
||||||
try:
|
try:
|
||||||
fd = os.open(path, flags | speedup.O_CLOEXEC, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
|
fd = os.open(
|
||||||
|
path, flags | speedup.O_CLOEXEC, stat.S_IRUSR | stat.S_IWUSR |
|
||||||
|
stat.S_IRGRP | stat.S_IROTH
|
||||||
|
)
|
||||||
has_cloexec = True
|
has_cloexec = True
|
||||||
except EnvironmentError as err:
|
except EnvironmentError as err:
|
||||||
if getattr(err, 'errno', None) == errno.EINVAL: # Kernel does not support O_CLOEXEC
|
if getattr(err, 'errno', None) == errno.EINVAL:
|
||||||
fd = os.open(path, flags, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
|
# Kernel does not support O_CLOEXEC
|
||||||
|
fd = os.open(
|
||||||
|
path, flags, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP |
|
||||||
|
stat.S_IROTH
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
fd = os.open(path, flags, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
|
fd = os.open(
|
||||||
|
path, flags, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH
|
||||||
|
)
|
||||||
|
|
||||||
if not has_cloexec:
|
if not has_cloexec:
|
||||||
fcntl.fcntl(fd, fcntl.F_SETFD, fcntl.FD_CLOEXEC)
|
fcntl.fcntl(fd, fcntl.F_SETFD, fcntl.FD_CLOEXEC)
|
||||||
@ -140,7 +149,8 @@ class ExclusiveFile(object):
|
|||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
self.file = WindowsExclFile(self.path, self.timeout) if iswindows else unix_open(self.path)
|
self.file = WindowsExclFile(self.path, self.timeout
|
||||||
|
) if iswindows else unix_open(self.path)
|
||||||
self.file.seek(0)
|
self.file.seek(0)
|
||||||
timeout = self.timeout
|
timeout = self.timeout
|
||||||
if not iswindows:
|
if not iswindows:
|
||||||
@ -168,18 +178,23 @@ def test_exclusive_file(path=None):
|
|||||||
# Try same process lock
|
# Try same process lock
|
||||||
try:
|
try:
|
||||||
with ExclusiveFile(f, timeout=1):
|
with ExclusiveFile(f, timeout=1):
|
||||||
raise LockError("ExclusiveFile failed to prevent multiple uses in the same process!")
|
raise LockError(
|
||||||
|
"ExclusiveFile failed to prevent multiple uses in the same process!"
|
||||||
|
)
|
||||||
except LockError:
|
except LockError:
|
||||||
pass
|
pass
|
||||||
# Try different process lock
|
# Try different process lock
|
||||||
from calibre.utils.ipc.simple_worker import fork_job
|
from calibre.utils.ipc.simple_worker import fork_job
|
||||||
err = fork_job('calibre.utils.lock', 'test_exclusive_file', (f,))['result']
|
err = fork_job('calibre.utils.lock', 'test_exclusive_file',
|
||||||
|
(f, ))['result']
|
||||||
if err is not None:
|
if err is not None:
|
||||||
raise LockError('ExclusiveFile failed with error: %s' % err)
|
raise LockError('ExclusiveFile failed with error: %s' % err)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
with ExclusiveFile(path, timeout=1):
|
with ExclusiveFile(path, timeout=1):
|
||||||
raise Exception('ExclusiveFile failed to prevent multiple uses in different processes!')
|
raise Exception(
|
||||||
|
'ExclusiveFile failed to prevent multiple uses in different processes!'
|
||||||
|
)
|
||||||
except LockError:
|
except LockError:
|
||||||
pass
|
pass
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
@ -196,7 +211,9 @@ def _clean_lock_file(file):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
if iswindows:
|
if iswindows:
|
||||||
|
|
||||||
def singleinstance(name):
|
def singleinstance(name):
|
||||||
mutexname = 'mutexforsingleinstanceof' + __appname__ + name
|
mutexname = 'mutexforsingleinstanceof' + __appname__ + name
|
||||||
mutex = win32event.CreateMutex(None, False, mutexname)
|
mutex = win32event.CreateMutex(None, False, mutexname)
|
||||||
@ -209,6 +226,7 @@ if iswindows:
|
|||||||
atexit.register(win32api.CloseHandle, mutex)
|
atexit.register(win32api.CloseHandle, mutex)
|
||||||
return not err == winerror.ERROR_ALREADY_EXISTS
|
return not err == winerror.ERROR_ALREADY_EXISTS
|
||||||
elif islinux:
|
elif islinux:
|
||||||
|
|
||||||
def singleinstance(name):
|
def singleinstance(name):
|
||||||
import socket
|
import socket
|
||||||
from calibre.utils.ipc import eintr_retry_call
|
from calibre.utils.ipc import eintr_retry_call
|
||||||
@ -229,10 +247,12 @@ elif islinux:
|
|||||||
atexit.register(sock.close)
|
atexit.register(sock.close)
|
||||||
return True
|
return True
|
||||||
elif ishaiku:
|
elif ishaiku:
|
||||||
|
|
||||||
def singleinstance(name):
|
def singleinstance(name):
|
||||||
# Somebody should fix this.
|
# Somebody should fix this.
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
|
|
||||||
def singleinstance_path(name):
|
def singleinstance_path(name):
|
||||||
home = os.path.expanduser('~')
|
home = os.path.expanduser('~')
|
||||||
if os.access(home, os.W_OK | os.R_OK | os.X_OK):
|
if os.access(home, os.W_OK | os.R_OK | os.X_OK):
|
||||||
@ -240,7 +260,9 @@ else:
|
|||||||
return os.path.expanduser('~/.' + basename)
|
return os.path.expanduser('~/.' + basename)
|
||||||
import tempfile
|
import tempfile
|
||||||
tdir = tempfile.gettempdir()
|
tdir = tempfile.gettempdir()
|
||||||
return os.path.join(tdir, '%s_%s_%s.lock' % (__appname__, name, os.geteuid()))
|
return os.path.join(
|
||||||
|
tdir, '%s_%s_%s.lock' % (__appname__, name, os.geteuid())
|
||||||
|
)
|
||||||
|
|
||||||
def singleinstance(name):
|
def singleinstance(name):
|
||||||
'''
|
'''
|
||||||
|
Loading…
x
Reference in New Issue
Block a user